CANVAS模仿龙卷风特效
大学时候,有一段时间对flash比较感兴趣。去图书馆借了一本很厚很厚的falsh书籍。
翻了几页之后,就再没有往后看过。印象比较深的是作者说他用flash完成了一个龙卷风效果。
一直到现在我也没有看到那个效果。
我也曾经想过实现一下。但是大学时候的技术水平,也支撑不起这个想法。慢慢就忘记了。
偶尔间我看到了离心运动。突然就想到一个写法。
演示地址如下:
http://suohb.com/work/wind2.htm
最终效果图如下:
龙卷风,我们可以看做一个向上旋转的气流。
风本身是不可见的,我们就用某个质点的移动轨迹画出来,表示风。
从上向下俯视,就是这样,一个质点做离心运动的路径。
从侧面看,是这样在,一个质点绕Y轴左右摇摆,摆动越来越大的的运动的路径。
我们就用这个来做为侧视图的效果,来做一个2D的龙卷风。
那么开始代码设计:
我们定义一个点,这个点Y轴上恒定速率运动,X轴上,向这中线方向有一个向心力G。一旦点运动超过这条中线,向心力倒转为-G。
这样就会画出上面侧视图的效果。
然后每个周期都新增一些这样的点,画出轨迹。如图;
基本上这样就已经完成了,我们不需要画出完整的路径,只要画出最新的一段就可以。
当到达一定高度之后,就将这条线慢慢移除出去。就得到最终效果
代码如下:
<!doctype html>
<html>
<head>
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no" />
<style type="text/css">
html{
height: 100%;
}
html,body,ul,li,canvas{
margin: 0;
padding: 0;
}
</style>
</head>
<body bgcolor="#000000">
<canvas id="knife"></canvas>
</body>
<script>
var canvas = document.getElementById("knife");
canvas.style.position = "absolute" ;
canvas.style.top = 0 ;
var w = window.innerWidth ;
var h = window.innerHeight ;
canvas.width = w ;
canvas.height = h ;
var cxt = canvas.getContext("2d");
cxt.strokeStyle = "#FFF" ;
var list = [];
var G = 0.4 ;//向心加速度
var SPEED_Y = -1 ;//向上速度
var centerLine = w/2 ;//龙卷风中线
function addLine(){
var LEN = 2 ;
for(var i = 0 ;i < LEN ; i ++){
list.push({
x:w/2,
y:h/1.3,
g:G,
c:centerLine+2*Math.random(),
sx:(Math.random()-0.5)*4,
sy:SPEED_Y+0.5*(Math.random()-0.5),
len:Math.round(Math.random()*10+5),
list:[{x:w/2,y:h/1.3}]
});
}
}
function step(){
cxt.clearRect(0,0,w,h);
addLine();
var obj ;
for(var i = 0 ; i < list.length; i ++){
obj = list[i] ;
if(obj.y < h/2.5){//如果超过这个高度,就删除一个点
obj.len -- ;
if(obj.len == 0){
list.splice(i,1);
i -- ;
continue ;
}
}
obj.x += obj.sx ;
obj.y += obj.sy ;
obj.sx += obj.g ;
obj.g = obj.x > obj.c ? -G : G ;
obj.list.unshift({x:obj.x,y:obj.y});//记录下质点运动轨迹
obj.list = obj.list.slice(0,obj.len);//仅仅画出其中一段线就好
//画出所有点的连线
cxt.beginPath();
cxt.moveTo(obj.list[0].x,obj.list[0].y);
for(var j = 1 ; j < obj.list.length; j ++){
cxt.lineTo(obj.list[j].x,obj.list[j].y); }
cxt.stroke();
}
requestAnimationFrame(step);
}
requestAnimationFrame(step);
</script>
</html>
更多特效请关注公众号:
CANVAS模仿龙卷风特效的更多相关文章
- HTML5 canvas生成图片马赛克特效插件
HTML5 canvas生成图片马赛克特效插件 简要教程 这是一款使用html5 canvas来将图片制作成马赛克效果的js插件.该插件的灵感来自于美国肖像画家Chuck Close.已经有人使用这个 ...
- Canvas与javaScript特效笔记
第六章 Canvas与javaScript特效笔记 q <canvas>标签的用途 HTML5 canvas 提供了通过 JavaScript 绘制图形的方法,此方法使用简单但功能强 ...
- canvas之背景特效
需具备js基础知识以及canvas相关方法(可查阅相关文档) 下面是一篇有关js与canvas的背景特效 基于面向过程的思维 <!DOCTYPE html> <html> &l ...
- 结合canvas做雨滴特效
雨滴特效 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- canvas星空背景特效+CSS旋转相册学习
今天在看帖子的时候,看到了个有趣的css旋转相册,刚好之前做了一个星空背景dome,这里给大家分享下代码: 旋转相册参考:https://blog.csdn.net/gitchatxiaomi/art ...
- [ html canvas 模仿支付宝刮刮卡效果 ] canvas绘图属性 模仿支付宝刮刮卡效果实例演示
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- canvas模仿微信抢红包功能
1.原理:先创建一张img图片,用filter滤镜制作毛玻璃效果. 2.利用绝对定位,使canvas刚好盖在img上面. 3.利用canvas原生clip函数剪辑一个圆形. 地址:http://san ...
- canvas连线特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- canvas简单下雨特效
前面做了两个简单的效果,这次就来个下雨的效果 思路简单的说一下 随机在屏幕中的位置画雨滴,moveTo(x,y) 雨滴的长度就是lineTo(x,y+len) 每次重新绘制页面,就能达到下雨的效果了 ...
随机推荐
- MyEclipse简介
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)
整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...
- 报表 jasper + ireport5.6
下载 iReport-5.6.0,jdk7,以及众多lib , 这里我提供下资源(我的百度云) 安装好iReport-5.6.0和jdk7, 在安装目录的\etc\ireport.conf,修改其中 ...
- 四张图揭秘中国AI人才现状
本文数据来源:领英<全球AI领域人才报告> 最近有非常多的同学看了之前我们的一些文章和直播之后,多对AI领域跃跃欲试,本文我们结合一份人才报告(我个人感觉这份报告还是比较靠谱的),为大家揭 ...
- Bootstrap框架菜鸟入门教程
Bootstrap菜鸟入门教程 Bootstrap简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简 ...
- 自制OSPF配置实验大全
OSPF综合实验(gns模拟器) 注意点: Ospf实验推荐用gns制作 //图中的交换机可以视觉忽略或缩小成一个点.(^ v^) Ospf 实验拓扑图 目录 OSPF综合实验... 1 Os ...
- dnsmasq一次成功的配置
第一次用这个小软件,感觉还不错,因为没有像bind那样配置起来繁琐,并且我们也不需要去配置很多文件,内外网访问互不干涉. 我是在centos6.5下进行配置的: 先说说自己的理解: dnsmasq先去 ...
- 第五次作业2、请将该code进行代码重构,使之模块化,并易于阅读和维护;
1.请运行下面code,指出其功能: (需附运行结果截图,并用简短文字描述其功能) 显示了人的姓名.年龄 2.请将该code进行代码重构,使之模块化,并易于阅读和维护: 3.观看视频The Exper ...
- 结队编程--基于GUI的四则运算
coding地址 https://git.coding.net/lizhiqiang0x01/GUI-sizeyunsuan.git 李志强 201421123028 连永刚 201421123014 ...
- 24点游戏详细截图介绍以及原型、Alpha、Beta对比
原型设计 图片展示 功能与界面设计 1.登录注册 2.手机号验证 3.24点游戏 4.粉色系女生界面 Alpha 图片展示 功能与界面设计 1.24点游戏 2.背景音乐 3.可查看多种可能的答案 4. ...