最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

HTML5编程实战之二-使用动画的形式切换图片代码案例

来源:动视网 责编:小采 时间:2020-11-27 15:10:06
文档

HTML5编程实战之二-使用动画的形式切换图片代码案例

HTML5编程实战之二-使用动画的形式切换图片代码案例:本文主要用到的知识 本文主要用到了http://www.gxlcms.com/code/7892.html target=_blank
推荐度:
导读HTML5编程实战之二-使用动画的形式切换图片代码案例:本文主要用到的知识 本文主要用到了http://www.gxlcms.com/code/7892.html target=_blank


本文主要用到的知识

  本文主要用到了http://www.gxlcms.com/code/7892.html" target="_blank">Canvas API中的drawImage方法,下面对此方法略做介绍。

  在Canvas API中绘制图像用drawImage方法,这是一个重载方法,定义如下:

context.drawImage(image,x,y);
context.drawImage(image,x,y,w,h);
context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh);

  第一个方法有三个参数,第一个参数为要绘制的图像(还可以是video元素),x和y为该图像在画布中的起始坐标。

  第二个方法有五个参数,前三个跟第一个方法意义一样,w和h指绘制时的图像宽度和高度,可以用来进行图像缩放。

  第三个方法有九个参数,第一个参数跟前二个方法意义相同,后八个参数中前四个在源图像上一取一个矩形,后四个参数用于在画布上定义一个矩形,整个方法的作用就是把源图像上部分区域(第二到五个参数定义的部分)复制到画布上(后四个参数定义的部分)。

  本文主要利用了第三个方法完成绘制。

源代码

<!DOCTYPE html><html><head>
 <meta charset="UTF-8">
 <title>用动画的形式切换图片</title>
 <script type="text/javascript">
 var width, height; 
 var context, image, functionId; 
 var drawLeft, drawWidth; 
 var drawTop, drawHeight; 
 var spaceWidth, spaceHeight; 
 var speed=5000; 
 var images = ["http://i.6.cn/cvbnm/4e/7e/bb/75f251a8e2ae935d598f17b4f8275060.jpg", 
 "http://i.6.cn/cvbnm/4a/6e/fb/805175016e502c483b75276f29801df3.jpg", 
 "http://i.6.cn/cvbnm/6a/72/18/1787a3b2754ef48e374bbd14635f5c36.jpg", 
 "http://i.6.cn/cvbnm/94/55/6c/b1ba743ba617be2891fa06b67d795511.jpg", 
 "http://i.6.cn/cvbnm/02/1b/04/8018ee9e5756ac6b30f27d7ad6396b03.jpg", 
 "http://i.6.cn/cvbnm/85/ea/d1/65f15857b971afb3b6e38b5fcdadc9c0.jpg"]; 
 function selectFrom(iFirstValue, iLastValue) { 
 var iChoices = iLastValue - iFirstValue + 1; 
 return Math.floor(Math.random() * iChoices + iFirstValue);
 } function showPicture(effects) { 
 var count = 0; 
 for (var o in effects) {
 count++;
 } 
 var canvas = document.getElementById('canvas');
 context = canvas.getContext('2d');
 width = canvas.width;
 height = canvas.height; 
 var currImage = 0;
 image = new Image();
 image.src = images[currImage];
 context.drawImage(image, 0, 0, width, height);
 currImage++; 
 if (count > 0) {
 setInterval(function () { 
 var rand = selectFrom(0, count - 1);
 image.src = images[currImage];
 currImage++; 
 if (currImage == images.length) {
 currImage = 0;
 } 
 var index = 0; 
 for (var effect in effects) { 
 if (index++ == rand) {
 effects[effect](); 
 break;
 }
 }
 }, speed);
 }
 }

 window.onload=function(){
 showPicture({
 leftToRight: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 drawWidth = 0;
 functionId = self.setInterval("drawleftToRight()", 10);
 },
 topToBottom: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 drawHeight = 0;
 functionId = self.setInterval("drawtopToBottom()", 10);
 },
 hcenter: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 drawLeft = width / 2;
 drawWidth = 0;
 functionId = self.setInterval("drawhcenter()", 10);
 },
 vcenter: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 drawTop = height / 2;
 drawHeight = 0;
 functionId = self.setInterval("drawvcenter()", 10);
 },
 hwindow: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 spaceWidth = width / 10;
 drawWidth = 0;
 functionId = self.setInterval("drawhwindow()", 50);
 },
 vwindow: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 spaceHeight = height / 10;
 drawHeight = 0;
 functionId = self.setInterval("drawvwindow()", 50);
 },
 hvwindow: function () {
 context.fillStyle = "#EEEEFF";
 context.fillRect(0, 0, width, height);
 spaceHeight = height / 10;
 spaceWidth = width / 10;
 drawWidth = 0;
 drawHeight = 0;
 functionId = self.setInterval("drawhvwindow()", 50);
 }
 });
 } function drawleftToRight() {
 context.drawImage(image, 0, 0, drawWidth, image.height, 0, 0, drawWidth, image.height);
 drawWidth = drawWidth + 2; 
 if (drawWidth > width) {
 window.clearInterval(functionId);
 }
 } function drawtopToBottom() {
 context.save();
 context.drawImage(image, 0, 0, image.width, drawHeight, 0, 0, image.width, drawHeight);
 drawHeight = drawHeight + 2; 
 if (drawHeight > height) {
 window.clearInterval(functionId);
 }
 context.restore();
 } 
 function drawhcenter() {
 context.save();
 context.drawImage(image, drawLeft, 0, drawWidth, image.height, drawLeft, 0, drawWidth, image.height);
 drawLeft = drawLeft - 1;
 drawWidth = drawWidth + 2; 
 if (drawLeft <= 0) {
 window.clearInterval(functionId);
 }
 context.restore();
 } 
 function drawvcenter() {
 context.save();
 context.drawImage(image, 0, drawTop, image.width, drawHeight, 0, drawTop, image.width, drawHeight);
 drawTop = drawTop - 1;
 drawHeight = drawHeight + 2; 
 if (drawTop <= 0) {
 window.clearInterval(functionId);
 }
 context.restore();
 } function drawhwindow() { 
 for (i = 0; i < 10; i++) {
 context.drawImage(image, 0 + i * spaceWidth, 0, drawWidth, 
 image.height, 0 + i * spaceWidth, 0, drawWidth, image.height);
 }
 drawWidth += 1; 
 if (drawWidth - 1 > spaceWidth) {
 window.clearInterval(functionId);
 }
 } function drawvwindow() {
 context.save();
 context.clearRect(0, 0, width, height); 
 for (i = 0; i < 10; i++) {
 context.drawImage(image, 0, 0 + i * spaceHeight, image.width, 
 drawHeight, 0, 0 + i * spaceHeight, image.width, drawHeight);
 }
 drawHeight += 1; 
 if (drawHeight - 1 > spaceHeight) {
 window.clearInterval(functionId);
 }
 context.restore();
 } function drawhvwindow() {
 context.save();
 context.clearRect(0, 0, width, height); 
 for (i = 0; i < 10; i++) { 
 for (j = 0; j < 10; j++) {
 context.drawImage(image, 0 + j * spaceWidth, 0 + i * 
 spaceHeight, drawWidth, drawHeight, 0 + j * spaceWidth, 0 + i * 
 spaceHeight, drawWidth, drawHeight);
 }
 }
 drawHeight += height / width;
 drawWidth += 1; 
 if (drawHeight > spaceHeight) {
 context.drawImage(image, 0, 0, width, height);
 window.clearInterval(functionId);
 }
 context.restore();
 } </script></head><body>
 <h1>用动画的形式切换图片</h1>
 <canvas id="canvas" width="192px" height="255px"></canvas></body></html>

代码解析

  drawleftToRight():效果为从左向右显示,主要把第四个参数和第八个参数从0逐渐增加到图片的宽度

  drawtopToBottom():效果为从上向下显示,主要把第五个参数和第九个参数从0逐渐增加到图片的高度

  drawhcenter():效果为从中间水平向两边显示,主要把第二、六个参数从图像宽度的一半减小到0,第四、八个参数从0增加到图像宽度

  drawvcenter():效果为从中间向上下两边显示,跟上一个类似

  drawhwindow():效果为水平方向百叶窗,跟drawhcenter方法原理类似,只是这里是从多个地方进行的

  drawvwindow():效果为垂直方面百叶窗,跟drawvcenter方法原理类似,只是这里是从多个地方进行的

  drawhvwindow():效果为百叶窗,是drawhwindow()跟drawvwindow()的组合

  欢迎大家补充和完善。

  由于图片是放在其他网站上,所以加载比较慢,显的不是那么流畅,大家使用时可以换为本地图片,效果更佳。

文档

HTML5编程实战之二-使用动画的形式切换图片代码案例

HTML5编程实战之二-使用动画的形式切换图片代码案例:本文主要用到的知识 本文主要用到了http://www.gxlcms.com/code/7892.html target=_blank
推荐度:
标签: 图片 动画 html5
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top