html 延长直线,利用HTML5实现绘制3D线条延伸动画特效
特效描述:利用HTML5实现 绘制3D 线条延伸 动画特效。利用HTML5实现雷达地区扫描动画特效
代码结构
1. HTML代码
;(function() {
'use strict';
var c = document.getElementById('c');
var ctx = c.getContext('2d');
var w = c.width = window.innerWidth;
var h = c.height = window.innerHeight;
var cx = w / 2;
var cy = h / 2;
var fl = 1000;
function prj(obj) {
var cz = obj.z + fl;
if(cz === 0) return;
var scl = fl / cz;
obj.p.x = cx + obj.x * scl;
obj.p.y = cy + obj.y * scl;
obj.s = scl;
}
var P = function(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
this.s = 1;
this.cl = 0;
this.p = {
x: 0,
y: 0
};
};
P.prototype = {
constructor: P,
update: function() {
this.z -= 30;
},
render: function(ctx) {
if(this.z <= -fl) return;
ctx.save();
ctx.translate(this.p.x, this.p.y);
ctx.scale(this.s, this.s);
ctx.fillStyle = 'hsla(' + this.cl + ', 100%, 50%, 0.5)';
ctx.beginPath();
ctx.arc(0, 0, 2, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
};
var M = function(x, y, z) {
this.list = [];
this.max = 100;
this.x = x;
this.y = y;
this.z = z;
this.s = 1;
this.p = {
x: 0,
y: 0
};
this.ax = Math.random() * (Math.PI * 2);
this.ay = Math.random() * (Math.PI * 2);
this.rx = Math.random() * 100;
this.ry = Math.random() * 100;
this.cl = Math.random() * 360;
this.cls = Math.random();
};
M.prototype = {
constructor: M,
update: function() {
this.cl += this.cls;
this.ax += Math.random() * 0.1 - 0.02;
this.ay += Math.random() * 0.1 - 0.02;
this.x = Math.cos(this.ax) * 100;
this.y = Math.sin(this.ay) * 100;
this.z += 10;
if(this.z > fl) this.z = fl;
if(this.list.length < this.max) {
if(Math.random() * 100 < 50) {
var pp = new P(this.x, this.y, this.z);
pp.cl = this.cl;
this.list.push(pp);
}
} else {
var pp = this.list.shift();
pp.x = this.x;
pp.y = this.y;
pp.z = this.z;
pp.cl = this.cl;
this.list.push(pp);
}
},
render: function(ctx) {
if(this.z <= -fl) return;
ctx.save();
ctx.translate(this.p.x, this.p.y);
ctx.fillStyle = 'green';
ctx.beginPath();
ctx.arc(0, 0, 2, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
};
function update(mv, list) {
for(var i = 0; i < list.length; i++) {
var p = list[i];
p.update();
prj(p);
p.render(ctx);
}
for(var i = list.length-1; i >= 0; i--) {
var p = list[i];
if(p.z <= -fl) continue;
if(i === list.length - 1) {
ctx.lineWidth = Math.random();
ctx.strokeStyle = 'hsl(' + mv.cl + ', 100%, 50%)';
ctx.beginPath();
ctx.moveTo(p.p.x, p.p.y);
} else {
ctx.lineTo(p.p.x, p.p.y);
}
}
ctx.stroke();
}
var ms = [];
for(var i = 0; i < 10; i++) {
ms.push(new M(
Math.random() * 400 - 200,
Math.random() * 400 - 200,
Math.random() * 400 - 200));
}
requestAnimationFrame(function loop() {
requestAnimationFrame(loop);
ctx.clearRect(0, 0, w, h);
for(var i = 0; i < ms.length; i++) {
var m = ms[i];
m.update();
prj(m);
update(m, m.list);
}
});
})();
html 延长直线,利用HTML5实现绘制3D线条延伸动画特效相关推荐
- 如何用html制作一个动态烟花,利用HTML5实现庆祝2018年烟花动画特效
特效描述:利用HTML5实现庆祝2018年烟花动画特效.利用HTML5实现庆祝2018年烟花动画特效 代码结构 1. HTML代码 2018 var ctx = document.querySelec ...
- html5网站粒子时钟,利用HTML5实现SVG多边形粒子时钟动画特效
特效描述:利用HTML5实现 SVG 多边形 粒子时钟 动画特效.利用HTML5实现SVG多边形粒子时钟动画特效 代码结构 1. 引入JS 2. HTML代码 svg { position: ab ...
- html5 可旋转的三维树形结构,利用HTML5实现勾股树植物生长动画特效
特效描述:利用HTML5实现 勾股树 植物生长 动画特效.利用HTML5实现勾股树植物生长动画特效 代码结构 1. HTML代码 const canvas = document.querySelect ...
- logo像闪电的html编译器,基于Html5 Canvas绘制逼真的闪电动画特效
Canvas绘制闪电动画特效 canvas, body{ padding: 0; margin: 0; overflow: hidden; } var width, height var step = ...
- html 衣服特效,详细介绍HTML5 3D衣服摇摆动画特效如何实现
这又是一款基于HTML5 Canvas的3D动画杰作,它是一个可以随风飘动的3D衣服摇摆动画特效,非常逼真.当我们将鼠标滑过衣服时,衣服将会出现摇摆的动画,点击鼠标时,衣服将会更加剧烈地摆动. 在线演 ...
- html5 canvas酷炫3D背景打开动画特效
html5 canvas酷炫3D背景打开动画特效 点击跳转到演示地址 点击进入资源下载地址
- html5立体照片墙效果,HTML5特效可以 14种jQuery超酷3D网格照片墙动画特效源码
效果图 各位长友大家好, 今天 给大家带来的是14种jQuery超酷3D网格照片墙动画特效源码! 大家可以按照自己的意愿做成 个人喜欢的样子! 想要文件版源码的,请加穷581549454 废话不多说. ...
- html5可折叠面板,纯CSS3炫酷3D折叠面板动画特效
这是一款纯 CSS3 制作的炫酷3D折叠面板动画特效.这个效果使用3D CSS animations 来制作折叠面板的动画,纯CSS,没有使用javascript. HTML结构 折叠面板的html结 ...
- html5列表菜单特效,HTML5 SVG汉堡包菜单按钮分段动画特效
这是一款效果非常炫酷的HTML5 SVG汉堡包菜单按钮分段动画特效.该菜单按钮特效在用户点击汉堡包按钮时,按钮会分割为多段,并旋转变形为关闭按钮的状态.当再次点击该按钮时,它会逆向变形为汉堡包图标. ...
最新文章
- 今晚20:00 | 港科大郑光廷院士详解人工视觉技术发展及应用
- oracle varchar2转date_Oracle基础包之三 DBMS_PIPE
- Oracle里default什么意思,ORACLE中默认值default的使用方法.doc
- Android 第十四课 使用LitePal添加数据(更新数据)
- Maven实战. 3.7NetBeans Maven插件简单使用
- linux下dds软件,【数据库】Linux 单实例环境下实现Oracle数据库和DDS软件的开机自动重启...
- ~~分解质因数法求组合数
- 网站如何集成支付宝!原来要给钱的
- 腾讯网课下载.m3u8下载器流媒体下载
- 利用学生身份“白嫖”-教育优惠
- VR/AR/MR/CR/XR概念及应用
- C#中操作Word(7)—— 如何向Word中插入表格
- nsis升级包_NSIS:制作软件升级安装包
- 惠州东江威立雅的全方位文件安全管理
- 如何在保持营养均衡的同时不长肉
- 力扣每日一题2021-12-24中等题:吃苹果的最大数目
- EXCEL获取今天是今年的第几周
- 查询电话号码归属地的PHP接口(处理过可供前端使用的)
- 科普直播,或将成为金融企业引流获客的渠道
- 各种依赖库(转载地址:https://blog.csdn.net/as89751)