您现在的位置:首页 >> 前端 >> 内容

打印canvas的内容(toDataURL())

时间:2017/12/4 10:31:36 点击:

  核心提示:我们常常绘画的canvas的画布内容,对于用户而言是只能看不能进行操作的,你所绘画出来的呈现出来的图片,其实用户看到了之后是无法对其进行操作的,不能进行保存和打印,这样,我们就需要用一种方法对我们所画...

我们常常绘画的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>  
    <p id="controls">  
    <input id="snapshotButton" type="button" value="Take snapshot"/>  
    </p>  
  
    <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其他的应该都没有什么问题了。

Tags:打印 印C CA AN 
作者:网络 来源:ydmichelle