• 首先规划程序逻辑

    • 2 如何用canvas绘制图形
    • 3 怎么实现动画
    • 4 雨滴绘制的原理
      • 41 使用原型定义雨滴对象
      • 42 视觉原理动画实现雨滴下落的绘制
    • 5 绘制雨滴N个不能同时下落
  • 问题一 Canvas宽高设置出现白边
  • 问题二 Canvas具有默认大小 300px150px
  • 问题三 Canvas自适应页面大小如何实现
  • 问题四 雨滴绘制原理
  • 问题五 setIntervalmoveRain100060
  • 问题六 一个函数在没有指定调用主体前它的this永远指向window

1. 首先规划程序逻辑

##1.1 设置canvas款到与浏览器相同
1.1.1: 获取canvas元素
1.1.2: 获取浏览器宽高
1.1.3: 为canvas元素设置宽高
1.1.4:当窗口大小变化时,自动调整canvas大小

1.2. 如何用canvas绘制图形

1.2.1 绘制矩形
1.2.2 绘制圆形
1.2.3 绘制雨滴
1.2.4绘制落地后的水花

1.3 怎么实现动画

1.4 雨滴绘制的原理

1.4.1 使用原型定义雨滴对象

1.4.2 视觉原理,动画实现雨滴下落的绘制

1.5 绘制雨滴N个,不能同时下落

问题一 Canvas宽高设置出现白边

原因:canvas是内联元素,默认display:inline; 白边为行间距。
解决方案:display:block;

问题二 Canvas具有默认大小 300px*150px

问题三 Canvas自适应页面大小如何实现?

参考链接
方案一:CSS设置100%

body{margin:0;}
html,body{width:100%;height:100%;
}
#rain{display:block;background-color:black;width:100%;height:100%;margin:0;}

结果:使用也可以实现自适应大小,但是改变页面大小时,雨滴的大小形状会变形。
原因:
将canvas按img理解,canvas样式宽高改变了,但是canvas自身的宽高却不变。当两者的宽高比例不同时,出现内容拉伸。

自适应是指元素的dispaly size缩放,是CSS布局维度(css layout dimension)自适应。而canvas的width/height属性对应的是画布内的coordinate space,不属于css负责.canvas的显示大小可以由css规则指定,但是其内部元素的像素不对应CSS像素或屏幕物理像素进行缩放显示。
方案二:使用JS获取window宽高,为canvas设置
原理:使用样式的宽高比重新设置画布的宽高比。发生重绘。

//1.1 获取canvas元素,只能用idvar can=document.getElementById("rain");
//1.2 浏览器的宽高存放在windows的全局变量var w=window.innerWidth;var h=window.innerHeight;
//1.3 设置canvas宽高can.width=w;can.height=h;
//1.4 当窗口大小变化时,自动调整canvas大小//监控浏览器宽高变化window.onresize=function(){w=window.innerWidth;h=window.innerHeight;//1.3 设置canvas宽高can.width=w;can.height=h;}

问题四 雨滴绘制原理

视觉原理:同样大小的矩形,从远处看,亮的(偏白)看起来比暗的更大。
绘制:
方案一:绘制不同透明度的矩形进行拼接。
方案二:对于一种rgb的矩形,覆盖层数不等的一种rgba整体页面。
方案二更加便于实现。

问题五 setInterval(moveRain,1000/60);

1. satInterval不写函数本体,
2. 函数体内不能写setInterval
3. 16ms所有的
4. 在第0秒就执行moveRain,隔16ms再执行一次,
5. 然而此时rainArray还没有内容,因为创建雨滴是相隔200ms创建一次
6. 进而移动函数mobeRain中无操作对象
7. 尽量不用setInterval
8. JS发现此语句,插入到栈中,间隔执行,无论其他函数怎样运行
9. 缺点:(1)丢帧 ,当callback函数运行时间太长超过setInterval间隔时(2)运行主体 window this指向问题

问题六 一个函数在没有指定调用主体前,它的this永远指向window。

/*封装框架时,this的指向,上下文,作用域var obj={num:1,add:function(){this.num++;console.log(this.num);/*function(){console.log(this.num);//此处this为window})();//运行obj.add()输出为UNDEFINED)*/(function(){console.log(this.num);}.bind(this))();//运行obj.add()输出为UNDEFINED ;bind(this)之后输出为2),THIS指向}}obj.add();function aaa(){console.log("a"+this);}
function bbb(cb){cb&&cb();console.log("b"+this);
}
bbb.call(obj,aaa);
*/

canvas雨滴绘制总结(三)相关推荐

  1. canvas 雨滴特效

    一.雨滴特效需求 雨滴从窗口顶部随机下落到达底部将呈现波纹逐渐散开变淡直到消失,雨滴特效随窗口变化自适应 二.雨滴实现思路 1. 用面向对象的思维 首先创建canvas画布 ,绘制一个雨滴的初始化形状 ...

  2. html绘图环境,HTML_HTML5 在canvas中绘制文本附效果图,一、绘制文本 在绘图环境中提 - phpStudy...

    HTML5 在canvas中绘制文本附效果图 一.绘制文本 在绘图环境中提供了两种方法在canvas中绘制文本. strokeText(text,x,y) : 在(x,y)处绘制空心的文本. fill ...

  3. 矩形做成翻页的效果html5,HTML5 在canvas中绘制矩形附效果图

    一.绘制矩形 canvas使用原点(0,0)在左上角的坐标系统,x坐标向右递增,y坐标向下递增. 使用绘图环境的矩形绘制函数来绘制矩形. fillRect(x,y,width,height) : 绘制 ...

  4. html5中Canvas、绘制线条模糊、常见绘制工具、绘制基本图形、绘制图片、面向对象的方式绘制图形图片、绘制文本、帧动画绘制

    Canvas容器: canvas标签用来定义图像的容器,必须配合脚本来绘制图像,canvas也运用于游戏开发.注意:canvas绘制图时会出现线条模糊情况,这是因为显示屏像素和canvas中定义的一个 ...

  5. 使用Canvas扩展绘制动态ASP.NET Core Blazor条形图

    目录 介绍 背景 使用代码 步骤1:创建ASP.NET Core Blazor服务器应用程序 运行测试应用程序 步骤2:安装软件包 步骤3:建立模型类别 创建服务类 步骤4:将服务添加到Startup ...

  6. Android中使用SurfaceView和Canvas来绘制动画

    事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...

  7. html5canvas绘制图片源码,HTML5 CANVAS:绘制图片

    HTML5 CANVAS:绘制图片 通过前面的学习,我们现在已经可以在HTML5 canvas中绘制图形和文字,并给它们设置一些样式.我们还可以在中绘制图片.用于在作为绘制源的图片可以是下面的几种元素 ...

  8. canvas用于绘制视频

    canvas相关方法介绍 1.ctx.getImageData(sx, sy, sw, sh):其中sx.sy分别是起点的横纵坐标,sw和sh分别为将要提取的数据对应的矩形图像的宽度和高度:其返回值是 ...

  9. QML <2> Canvas 自定义绘制 网易云歌单封面实现

    QML <2> Canvas 自定义绘制 网易云歌单封面实现 前言 基于QML 实现 网易云歌单封面,参考图如下: 实现图如下: 一.背景图 最底层为Rectangle ,图片用Anima ...

最新文章

  1. Robust PCA 学习笔记
  2. finalshell一直弹出输入密码_Linux 密码忘了怎么办?明明输入的密码是对的为啥一直过不去?...
  3. 吸尘车-真空吸尘车:真空吸尘车
  4. Python 基础知识整理-2
  5. Linux grep命令、Linux cd命令、Linux pwd命令
  6. Facebook发布张量理解库,自动编译高性能机器学习核心
  7. Tensorflow——可视化训练过程
  8. 磨皮ps教程-庞姿姿
  9. 电子商务正在形成共同体经济
  10. Android P使用pm install安装apk报错
  11. html5 文字转换烟花,用HTML5制作烟火效果的教程
  12. 手把手教你做蓝牙聊天应用(二)-设计方案
  13. 《发现你的心灵》——于丹
  14. JZOJ5454. 【NOIP2017提高A组冲刺11.5】仔细的检查 树hash
  15. FreeNOS-kernel目录下boot.S、链接脚本kernel.ld文件分析(四)
  16. ubuntu WPS 提示“系统缺失字体symbol、wingdings、wingdings 2、wingdings 3、webding”的解决方法
  17. 2008年度十大科技突破
  18. Windows11-10原版iso镜像仓库,版本长期更新维护
  19. c语言无符号整型右移,c语言 java 有符号数,无符号数. 左移,右移运算
  20. 记请求图片失败,状态码400

热门文章

  1. Charles抓包使用及常用问题
  2. henauOJ055(猴子吃桃)
  3. c v开发语言,被质疑的 V 语言
  4. Windows实用工具推荐
  5. 一体机怎么修复音频服务器,导航一体机收音机信号不好?最全的自己动手修复教程来了!...
  6. excal怎么设置模板阈值
  7. 网络平台做用户实名认证的好处
  8. canvas图形放大缩小鼠标拖拽
  9. Photoshop液化工具塑造完美的脸型
  10. windows下kafka启动时系统找不到指定的路径(受害者亲测)