我们常常绘画的canvas的画布内容,对于用户而言是只能看不能进行操作的,你所绘画出来的呈现出来的图片,其实用户看到了之后是无法对其进行操作的,不能进行保存和打印,这样,我们就需要用一种方法对我们所画的canvas进行改变,使之变成一个image。
canvas的API提供的toDataURL():返回的引用,指向了某个给定canvas元素的数据地址。可以将img元素的src属性值设置为这个数据地址,这样就可以创建表示canvas的图像了。
html页面的代码:
1.向网页中加入一个不可见的图像元素(img id="snapshotImageElement"),然后给该元素设置好id值,但不要设定其src属性。
2.通过css,调整图像的位置大小,使其刚好的覆盖在canvas上
3.对网页中加入一个用于抓取快照的控件
JavaScript代码:
1.获取指向不可见图像元素的引用
2.获取快照抓取控件的引用
3.当用户激活控件以抓取快照时:
(1)调用toDataURL()方法来获取数据地址
(2)将数据地址设置为不可见图像的src属性
(3)将图像元素设置为可见,将canvas设置为不可见
4.当用户激活控件以返回到canvas时:
(1)使canvas元素可见,使图像元素不可见
(2)如有必要,重绘canvas
setInterval(drawClock,1000):按照指定的周期(毫秒)来调用函数或者计算表达式
clearInterval:消除setInerval方法的定时器
style.display:更改display的样式(none:隐藏对象,block:块元素,inline:内联元素)
js:
var canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
snapshotButton = document.getElementById('snapshotButton');
snapshotImageElement = document.getElementById('snapshotImageElement');
loop;
snapshotButton.onclick = function (e) {
var dataUrl;
if (snapshotButton.value === 'Take snapshot') {
dataUrl = canvas.toDataURL();
clearInterval(loop);
snapshotImageElement.src = dataUrl;
snapshotImageElement.style.display = 'inline';
canvas.style.display = 'none';
snapshotButton.value = 'Ruturn to Canvas';
}
else {
canvas.style.display = 'inline';
snapshotImageElement.style.display = 'none';
loop = setInterval(drawClock,1000);
snapshotButton.value = 'Take snapshot';
}
};
context.font = FONT_HEIGHT + 'px Arial';
loop = setInterval(drawClock,1000);
html:
<html>
<head>
<title>clock</title>
<style>
body {
background: #dddddd;
}
#canvas {
position: absolute;
left: 10px;
top: 1.5em;
margin: 20px;
border: thin solid #aaaaaa;
}
#snapshotImageElement{
position: absolute;
left: 10px;
top: 1.5em;
margin: 20px;
border: thin solid #aaaaaa;
}
</style>
</head>
<body>
<div id="controls">
<input id="snapshotButton" type="button" value="Take snapshot"/>
</div>
<img id="snapshotImageElement">
<canvas id="canvas" width="400" height="400">canvas not supported</canvas>
<script src='example3.js'></script>
</style>
</head>
</html>
此代码少了drawClock函数,那个是个画钟的代码,在上一节已经写出来了,js的名称是example3.js其他的应该都没有什么问题了。