
更多>
最新下载
24小时阅读排行榜
- 1 小红书蒲公英入口快速定位_小红书蒲公英官网链接分享
- 2 中暑了有什么症状?怎么办?
- 3 Linux搜索文件命令find常用参数
- 4 Java中final类和final方法使用注意事项
- 5 拷贝漫画ios官网入口 拷贝漫画ios官网进入网站
- 6 你的设备遇到问题需要重启win10
- 7 win10系统语言怎么修改成中文_系统显示语言更改与中文语言包安装
- 8 解决React中map渲染组件beforeunload事件的数据捕获问题
- 9 PHP源码session管理机制_PHP源码session管理机制讲解
- 10 WhatsApp深色模式切换指南-WhatsApp界面设置中文官网教程
- 11 Go 方法定义与结构体分离的优势
- 12 使用 scipy.integrate.quad 积分指示函数:陷阱与解决方案
- 13 DescriptAI如何编辑民间故事音频_DescriptAI编辑民间故事音频全面操作教程
- 14 phpcms上传附件大小限制修改
- 15 JS 深拷贝实现方案对比 - 处理循环引用的结构化克隆算法解析
更多>
最新教程
-
- Node.js 教程
- 2547 2025-08-28
-
- CSS3 教程
- 229529 2025-08-27
-
- Rust 教程
- 3023 2025-08-27
-
- Vue 教程
- 3708 2025-08-22
-
- PostgreSQL 教程
- 3860 2025-08-21
-
- Git 教程
- 3099 2025-08-21
css3+HTML5 Canvas炫酷3D线条延伸动画特效
js代码
<script> ;(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); } }); })(); </script>
这是一款基于HTML5 Canvas绘制的炫酷3D线条延伸动画特效,多彩颜色变幻,非常漂亮!


本站所有资源都是由网友投搞发布,或转载各大下载站,请自行检测软件的完整性!本站所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!如有侵权请联系我们删除下架,联系方式:admin@php.cn