canvas如何实现github404动态

互联网 18-1-30
这次给大家带来canvas如何实现github404动态,用canvas实现github404动态的注意事项有哪些,下面就是实战案例,一起来看一下。

前几天使用css样式和js致敬了一下github404的类似界面,同时最近又接触了canvas,本着瞎折腾的想法,便借着之前的js的算法,使用canvas来完成了github404的动态效果。

文件资源

文件源码与图片在文章末尾给出

网页的body部分

这里给canvas 定义好宽和高,设为块级元素。这些img 标签是将这些图片加载出来,我们就不用在js中去加载了,再将图片设为不显示 display:none。

<body>      <canvas id="mycanvas" width="1680" height="630"          style="margin:0;display:block">              您的浏览器不支持canvas      </canvas>      <img src="./images/field.png" style="display:none">      <img src="./images/text.png" style="display:none">      <img src="./images/cat.png" style="display:none">      <img src="./images/cat_shadow.png" style="display:none">      <img src="./images/speeder.png" style="display:none">                             <img src="./images/speeder_shadow.png" style="display:none">                 <img src="./images/buliding_1.png" style="display:none">      <img src="./images/building_2.png" style="display:none">    </body>

1.这里我还是新建了一个名为github404的json对象,以对所有的参数和方法进行封装

2.再创建imgData的对象,将所有的img所需的参数传入ps:top和left用于 drawImage() 方法时定位, scale 参数用于计算鼠标移动时对应的图片移动的计算

3.init()方法用来初始化,是与外部的接口

4.画图方法的实现就是用 for in 循环遍历 imgData[],再依次赋值,最后用drawImage()方法绘画,只是在移动的绘图方法中,需要注意使用了ctx.clearRect() 方法先将画布清空。

<script>          var github404 = {              imgData: {//将所有图片的信息用json对象记录                  bg: {                      top: 0,                      left: 110,//top和left用于定位,在画图时使用                      src: './images/field.png',//对应图片路径                      scale: 0.06,//鼠标移动时,该图片所对应移动的比例                  },                  building_2: {                      top: 133,                      left: 1182,                      src: './images/building_2.png',                      scale: 0.05,                  },                  building_1: {                      top: 79,                      left: 884,                      src: './images/buliding_1.png',                      scale: 0.03,                  },                  speeder_shadow: {                      top: 261,                      left: 776,                      src: './images/speeder_shadow.png',                      scale: 0.01,                  },                  cat_shadow: {                      top: 288,                      left: 667,                      src: './images/cat_shadow.png',                      scale: 0.02,                  },                  speeder: {                      top: 146,                      left: 777,                      src: './images/speeder.png',                      scale: 0.01,                  },                  cat: {                      top: 88,                      left: 656,                      src: './images/cat.png',                      scale: 0.05,                  },                  text: {                      top: 70,                      left: 364,                      src: './images/text.png',                      scale: 0.03,                  },              },              rate_w: 0,              rate_h: 0,//偏移的比例              field_width: 1680,              field_height: 370,//背景高度和宽度              canvas: document.querySelector('#mycanvas'),//获得canvas元素                 init: function() {//初始化加载方法                  this.setRateWH();                  this.placeImg();                  this.attachMouseEvent();              },              setRateWH: function() {//计算偏移比的方法                  var window_width = document.body.clientWidth;                  var window_height = document.body.clientHeight;                  this.rate_w = this.field_width/window_width;                  this.rate_h = this.field_height/window_height;              },                 placeImg: function() {//初始化的绘图方法                  let ctx = this.canvas.getContext('2d');//获得画笔                  for(key in this.imgData){//遍历imageData 对象                      var image = new Image();                      var left = this.imgData[key].left;                      var top = this.imgData[key].top;                         image.src = this.imgData[key].src;                      ctx.drawImage(image,left,top,                          image.width,image.height);                  }                 },                 attachMouseEvent: function() {                  var that = this;                  document.body.onmousemove = function(e){                      that.picMove(e.pageX,e.pageY);                  }              },              picMove: function(pageX,pageY) {//鼠标移动时重新画图的方法                  let ctx = this.canvas.getContext('2d');                  ctx.clearRect(0,0,this.canvas.width,this.canvas.height);                  for(key in this.imgData) {                      var image = new Image();                      var offer_w = this.rate_w * pageX * this.imgData[key].scale;                  var offer_h = this.rate_h * pageY * this.imgData[key].scale;                      //定义 left和top,下面画图时给参数定位                      var left = this.field_width/100 - offer_w + this.imgData[key].left;                      var top = this.field_height/100 - offer_h + this.imgData[key].top;                      image.src = this.imgData[key].src;                      ctx.drawImage(image,left,top,                          image.width,image.height);                  }              }          }             window.onload = function() {              //只调用github404的init方法 封装了数据              github404.init();          }      </script>

总结

此次使用canvas来完成这个动态效果,使我更多的了解了canvas的用法。同时使我

对于使用json对象去封装数据和方法,如何组织代码都有了更深的一些了解。

相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

HTML5的下拉框应该如何增加用户体验

H5的文件域FileReader怎样分段读取文件上传到服务器

用H5的WebGL如何在同一个界面做出json和echarts图表

以上就是canvas如何实现github404动态的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 动态
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:移动端h5轮播插件swipe实例详解

相关资讯