马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2021-8-11 11:04 编辑
一直在犹豫,是否介绍Canvas???
在59因涉及jQuery,所以挖了个坑。
而这次呢,是因为涉及JavaScript。
简单的Dom结构下,Js都绕不过去,更别提下面B格这么高的了
So,本帖只做展示分享,有缘在深入学习Canvas。。。(不要问我在何时)
Canvas是HTML5中一项非常非常重要的特性!
重要到可以独立作为一门语言去学习。。。
说的在露骨些,Canvas就是解决:
[b]transition&animation代码太多的尴尬时刻 [/b]
你可以讲Canvas理解为小时候儿玩的翻页动画
当飞速的纸页的翻动时,就行成了动画
Canvas就相当于一个白本子,不停的绘制不同图案后,在极短的时间内连续播放,就形成了动画。
好吧,概念就扯到这里,开始制作一个简单的初雪动画!
先在HTML代码中创建一个canvas的Dom结构
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Canvas</title>
- <style type="text/css">
- </style>
- </head>
- <body>
- <canvas id="firstCanvas" width="999" height="666">大兄弟你的浏览器不支持Canvas!!!</canvas>
- </body>
- </html>
复制代码
啥效果也没有。。。
上面那个提示,纯属娱乐,但也有点用。
只有在你的浏览器真的不支持情况下,才会显示,给你看看Canvas支持哪些浏览器:
好吧,接下来就要加入Js了,在body标签下,创建雪花(如有不适,自行关闭网页)
- <script type="text/javascript">
- var canvas=document.getElementById("firstCanvas");//调用Canvas元素
- var context=canvas.getContext("2d");//返回一个对象
- </script>
复制代码
由于Canvas本身没有绘图能力,只有调用getContext()方法来绘制对象。
后续的制作雪花,都在context中来搞。
创建雪花前,需要创建个数组保存雪花信息
- var particles = [];
- for( var i = 0; i < 666; i++ ) {
- particles.push( {
- x: Math.random()*window.innerWidth,
- y: Math.random()*window.innerHeight,
- vx: (Math.random()*1-.3), //横向随机
- vy: (Math.random()*1-.3),//纵向随机
- size: 1+Math.random()*2,
- color: "#DDD"
- } );
- }
复制代码
用for循环随机生成666个雪花(小球),每个雪花随机出现在屏幕上。
随机位置通过窗口高度,宽度来计算,颜色偏灰#DDD。
现在仍然是看不见滴~
相当于咱们只是创建了666个虚拟描述雪花。
只有在画布中,一个一个的绘制,才能看到哦
- function timeUpdate(e){
- context.clearRect(0, 0, window.innerWidth, window.innerHeight); //第一步先清理画布
- var len = particles.length;
- var particle;
- for( var i = 0; i < len; i++ ) { //循环遍历所有的雪花
- particle = particles[i];
- particle.x += particle.vx;
- particle.y += particle.vy;
- //下面都是边界检查,防止雪花跑出屏幕
- if(particle.x<=0 || particle.x>=window.innerWidth){
- particle.vx *= -1;
- }
- if(particle.y<=0 || particle.y>=window.innerHeight){
- particle.vy *= -1;
- }
- context.fillStyle = particle.color;//设置雪花为上面设置的#DDD
- context.beginPath();//开始绘制
- context.arc(particle.x,particle.y,particle.size,0,Math.PI*1.99,true);//绘制图形
- context.closePath();//停止绘制
- context.fill();//对所有绘制好的图形,进行上色
- }
- }
- setInterval( timeUpdate, 40 );
复制代码
效果图:
没错,善良如我决定从0 0 7 5 - 手把手带你玩儿Canvas 开始填坑。
这位鱼油,如果喜欢本帖子,请订阅 专辑-->( 传送门)( 不喜欢更要订阅 )
官方 Web 课程:
|