【实例】使用canvas缓缓加载一个图片到web页面中
2015-08-04 23:34
585 查看
由于要做web前端设计,用到这个效果,弄了一个晚上,总算是弄出来了
获取这个图像中的每一行的数据
清除这个canvas,之后在缓缓把刚刚获取到的数据写回去
(如果可以直接获取image对象的数据直接写到canvas就好了)
效果
从上到下缓缓载入一个图片思路
获取一个空白canvas,使用drawImage方法画出整个图像获取这个图像中的每一行的数据
清除这个canvas,之后在缓缓把刚刚获取到的数据写回去
(如果可以直接获取image对象的数据直接写到canvas就好了)
实现
在线演示<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="css/basic.css"/> </head> <body> <img src="img/people.png" style="display: none;" id="test"/> <div id="mainPanel"> <canvas id="marker_box" width="1200px" height="700px"></canvas> </div> </body> <script type="text/javascript"> //用于计算当前写入行 var count = 0; //用于存储所有数据的全局变量,我本想传这个参过去,但是不懂怎么回事,总是不成功,干脆弄成全局变量好了 var frameAll = null; window.onload = function () { var marker_box = document.getElementById("marker_box"); var context = marker_box.getContext("2d"); //创建一个image对象 var myImage = new Image(); myImage.src = "img/people.png"; //把那个image对象画在context上,我在这里就不写那些参数是什么了,百度一下就有 context.drawImage(myImage, 0, 0); getImageData(); //清除context上的数据 context.clearRect(0, 0, marker_box.width, marker_box.height); showImage() }; function getImageData () { var marker_box = document.getElementById("marker_box"); var context = marker_box.getContext("2d"); frameAll = new Array(); //这个for是逐行的获取图像数据,之后依次放入frameAll中 for(var i = 0; i < marker_box.height; i++) { var myFrame = context.getImageData(0, i, marker_box.width, 1); frameAll.push(myFrame); } } function showImage() { var marker_box = document.getElementById("marker_box"); var context = marker_box.getContext("2d"); //写入当前行的图像数据 context.putImageData(frameAll[count], 0, count, 0, 0, marker_box.width, 1); //准备写下一行了 count++; if(count >= marker_box.height) { //当写入完成的时候结束showImage方法 return; } else { //还需要继续写入图像数据,使用setTimeout实现以最快速度显示数据 //在这里可以使用worker对线程性能进行优化,不过本文不是写这个的,况且我现在好饿了,就不弄了 setTimeout("showImage()", 0); } } </script> </html>
相关文章推荐
- 为啥面试需要Aggressive?
- 几个简单的文本处理工具:diff,patch,grep,cut,sort,tr
- Kettle(二)——控件简述
- python3 urllib使用1
- nodejs 全局变量和方法,以及console使用
- bitmap再出江湖:a.txt中有40亿个无符号整数, b.txt中有10000个无符号整数, 求交集。 可用内存:1G
- dfs(简单例题)
- 网络流入门总结(EK算法)
- [2015-08-04] python015
- Merge Two Sorted Lists
- LitJson处理Json
- C++中max_element和min_element
- <section></section>标签
- UVA 1619 动态规划
- svn服务器创建并提交代码
- 指针和引用作为参数的区别
- 【Android适配器系列】BaseAdapter学习笔记
- centOS6下vsftp服务配置
- Cocos2dX精灵类的封装
- 数组