您现在的位置是:主页 > news > 榆林市住房和城市建设局网站/百度一下就一个
榆林市住房和城市建设局网站/百度一下就一个
admin2025/5/19 1:41:00【news】
简介榆林市住房和城市建设局网站,百度一下就一个,域名备案 填写网站信息吗,微信小程序开发教程官方文档最近做的项目里面有涉及到canvas,虽然之前有学习过canvas,不过好久没使用,慢慢有些生疏了。下面就来说说canvas的一些基本功能,以及最后完成的一个炫酷小demo,虽然难度不大,不过比较有趣,既熟悉…
榆林市住房和城市建设局网站,百度一下就一个,域名备案 填写网站信息吗,微信小程序开发教程官方文档最近做的项目里面有涉及到canvas,虽然之前有学习过canvas,不过好久没使用,慢慢有些生疏了。下面就来说说canvas的一些基本功能,以及最后完成的一个炫酷小demo,虽然难度不大,不过比较有趣,既熟悉…
最近做的项目里面有涉及到canvas,虽然之前有学习过canvas,不过好久没使用,慢慢有些生疏了。下面就来说说canvas的一些基本功能,以及最后完成的一个炫酷小demo,虽然难度不大,不过比较有趣,既熟悉了canvas,又得到了很多乐趣,何乐而不为呢。
首先我们需要在html里面写一对canvas标签,id为canvas
<canvas id="canvas" style="display:block;margin:50px auto;"> 当前浏览器不支持Canvas,请更换浏览器再打开 </canvas>canvas标签内的文字,在支持canvas画布的浏览器中不会显示,如果浏览器不支持canvas,就会做出简单的提示,当然我们也可以在js中进行判断。另外,canvas的宽和高最好不要在css中进行设置,可以写成内联样式,也可以在js中进行定义,这里我们在js中定义。
有了canvas标签,我们就可以在js中获取canvas和context对象了,代码如下
var canvas=document.getElementById("canvas"); var context=canvas.getContext("2d");这样我们就可以通过context对象,在canvas画布上进行图像绘制了。
下面来说说我们的炫酷小demo,是一个通过canvas绘制的小球组成的倒计时时钟,还有一些动画效果
首先我们创建一个名为click.js的文件,在html先引入click.js文件,该文件为一个三维数组,用一个数组来存放几个二维数字矩阵,这几个矩阵对应数字0到9,还有一个冒号,如下
//绘制数字的三维数组矩阵, var digit=[[[0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,1,1,0,0]],//0的二维数组点阵 [[0,0,0,1,1,0,0], [0,1,1,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [1,1,1,1,1,1,1]],//1 [[0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,1,1,0,0,0], [0,1,1,0,0,0,0], [1,1,0,0,0,1,1], [1,1,1,1,1,1,1]],//2 [[1,1,1,1,1,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,0,0,1,1,0], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0]],//3 [[0,0,0,0,1,1,0], [0,0,0,1,1,1,0], [0,0,1,1,1,1,0], [0,1,1,0,1,1,0], [1,1,0,0,1,1,0], [1,1,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,1,1,1,1]],//4 [[1,1,1,1,1,1,1], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0]],//5 [[0,0,0,0,1,1,0], [0,0,1,1,0,0,0], [0,1,1,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0]],//6 [[1,1,1,1,1,1,1], [1,1,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,0,1,1,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0]],//7 [[0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0]],//8 [[0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,1,1,0,0,0,0]],//9 [[0,0,0,0], [0,0,0,0], [0,1,1,0], [0,1,1,0], [0,0,0,0], [0,0,0,0], [0,1,1,0], [0,1,1,0], [0,0,0,0], [0,0,0,0]]//: ];
有了这个数组,我们就可以用canvas绘制时钟了,首先定义一些变量及常量,绘制小球的时候会用到
var WINDOW_WIDTH=1024; //画布的宽度 var WINDOW_HEIGHT=600; //画布的高度 var RADIUS=8; //小球的半径 var MARGIN_TOP=60; //每一个数字距离画布顶端的距离 var MARGIN_LEFT=30; //第一个数字距离画布左边距的距离 const endTime=new Date(2016,7,4,15,30,00); //倒计时的截止时间 var curShowTimeSeconds=0; //当前显示的秒数定义完这些量以后,我们就可以开始写主题函数了
window.onload=function(){var canvas=document.getElementById("canvas"); var context=canvas.getContext("2d"); canvas.width=WINDOW_WIDTH; canvas.height=WINDOW_WIDTH; curShowTimeSeconds=getCurrentShowTimeSeconds(); setInterval(function(){render(context); update(); },50) }其中,getCurrentShowTimeSeconds()函数用来获取当前显示的秒数,render()为负责绘制小球的函数,update()为更新显示的函数,每次改变小球位置重新绘制好后,还要更新显示才可以。
function getCurrentShowTimeSeconds(){var curTime=new Date(); var ret=endTime.getTime()-curTime.getTime(); //设定的截止时间与当前时间的毫秒数差值 ret=Math.round(ret/1000); return ret>=0?ret:0; }
function update(){//更新显示的时间,产生时间变化的动画 var nextShowTimeSeconds=getCurrentShowTimeSeconds(); var nextHours=parseInt(nextShowTimeSeconds/3600); var nextMinutes=parseInt((nextShowTimeSeconds-nextHours*3600)/60); var nextSeconds=nextShowTimeSeconds%60; var curHours=parseInt(curShowTimeSeconds/3600); var curMinutes=parseInt((curShowTimeSeconds-curHours*3600)/60); var curSeconds=curShowTimeSeconds%60; //只比较秒即可,因为每50毫秒就比较一次 if(nextSeconds!=curSeconds){curShowTimeSeconds=nextShowTimeSeconds; } }
function render(cxt){//每一次更新画面,都要先清除画布,否则会叠加 cxt.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT); var hours=parseInt(curShowTimeSeconds/3600); var minutes=parseInt((curShowTimeSeconds-hours*3600)/60); var seconds=curShowTimeSeconds%60; //绘制数字的函数 renderDigit(MARGIN_LEFT,MARGIN_TOP,parseInt(hours/10),cxt); //绘制小时得第一个数字 renderDigit(MARGIN_LEFT+15*(RADIUS+1),MARGIN_TOP,parseInt(hours%10),cxt); //绘制小时的第二个数字,14*(RADIUS+1)为一个数字的宽度 renderDigit(MARGIN_LEFT+30*(RADIUS+1),MARGIN_TOP,10,cxt); //绘制冒号 renderDigit(MARGIN_LEFT+39*(RADIUS+1),MARGIN_TOP,parseInt(minutes/10),cxt); //绘制分钟的第一个数字 renderDigit(MARGIN_LEFT+54*(RADIUS+1),MARGIN_TOP,parseInt(minutes%10),cxt); //绘制分钟的第二个数字 renderDigit(MARGIN_LEFT+69*(RADIUS+1),MARGIN_TOP,10,cxt); //绘制冒号 renderDigit(MARGIN_LEFT+78*(RADIUS+1),MARGIN_TOP,parseInt(seconds/10),cxt); //绘制秒钟的第一个数字 renderDigit(MARGIN_LEFT+93*(RADIUS+1),MARGIN_TOP,parseInt(seconds%10),cxt); //绘制秒钟的第二个数字 }在上面的render()函数中,又用到了renderDigit()方法,这个方法负责绘制一个数字或者冒号,需要传入四个参数,第一个参数为绘制起点的x坐标,第二个参数为y坐标,第三个参数为要绘制的图形,0到9代表各自的数字,10代表冒号。第四个参数为context对象,renderDigit()函数如下:
function renderDigit(x,y,num,cxt){cxt.fillStyle="rgb(0,102,153)"; //两重循环遍历二位数组,值为1的地方就绘制一个圆形 for(var i=0;i<digit[num].length;i++){for(var j=0;j<digit[num][i].length;j++){if(digit[num][i][j]==1){cxt.beginPath(); cxt.arc(x+j*2*(RADIUS+1)+(RADIUS+1),y+i*2*(RADIUS+1)+(RADIUS+1),RADIUS,0,2*Math.PI); cxt.closePath(); cxt.fill(); }}} }至此我们就完成了用canvas绘制一个简单倒计时时钟的逻辑,只需将上述代码放在一起即可,完成后的效果如下图