使用css与js生成的唯美炫酷的图形树效果
网站建设 2023-01-28 21:39www.1681989.com免费网站
效果图如下所示
在线演示
给大家分享一个使用css与js生成的唯美炫酷的图形树效果,相关代码如下
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>cloth</title> <style> @import url(http://fonts.googleapis./css?family=Poiret+One); html { overflow: hidden; touch-action: none; content-zoomg: none; } body { position: absolute; marg: 0; paddg: 0; background: #000; width: 100%; height: 100%; } #canvas { width: 100%; height: 100%; background: #000; position: absolute; } #text { position: absolute; left: 0; : 50%; width: 100%; poter-events: none; } #text div { position: absolute; color: #888; left: 0; width: 100%; text-align: center; : -12vm; font-family: 'Poiret One', cursive; font-size: 6vm; } </style> </head> <body> <canvas id="canvas"></canvas> <div id="text"> <div id="clic" nowrap> </div> <script type="text/javascript" src="http://cdn.gbtags./jquery/1.11.1/jquery.m.js"></script> <script> ! function() { "use strict"; // variables var root = null; var hue = 0; var automove = true; var angleX = 0; var angleY = 0; ///////////////////////// var resolution = 1; var maxLevels = 6; var branchLength = 10 resolution; var leafSize = 100; var growSpeed = 2; var maxAngle = 1.2; var freq = 0.3; ///////////////////////// // branch constructor function Branch(parent, level, hue, x, y) { this.parent = parent; this.b1 = null; this.b2 = null; this.b3 = null; this.hue = hue; this.p0 = parent ? parent.p1 : new Pot(x, y, 0); this.p1 = new Pot( x, y, parent === root ? 0 : ( parent ? parent.p1.z + ( level ? Math.random() 10 - 5 : 0 ) : 0 ) ); this.level = level; this.life = 0; this.angle = 0; this.vx = 0; this.vy = 0; } // grow branch Branch.prototype.grow = function() { // z move this.p1.z--; // 3D projection this.p1.project(); // recursively grow children branches this.b1 && this.b1.grow(); this.b2 && this.b2.grow(); // grow if (this.life-- > 1) { this.p1.x += this.vx; this.p1.y += this.vy; } // done - push more children branches if (this.life === 1 && this.level > 0) { this.b1 = newBranch(this); if (Math.random() <= freq) this.b2 = newBranch(this); this.life--; } // cut the tree if (this.p0.z <= -250) { this.parent = null; } // draw the branch var width = resolution (this.level === 1 ? 1 : ((this.level + 1) (this.level + 1)) 0.5 this.p1.scale ); var color = 100 - Math.abs(this.p0.z 0.5); ctx.begPath(); if (this.level) { ctx.leWidth = width; ctx.strokeStyle = "hsl(" + (this.hue % 360) + ", 14%," + color + "%)"; ctx.moveTo(this.p0.xp, this.p0.yp); ctx.leTo(this.p1.xp, this.p1.yp); ctx.stroke(); } else { ctx.globalCompositeOperation = "lighter"; var c = ((this.hue + 180) % 360); ctx.fillStyle = "hsl(" + c + ", 100%, 70%)"; ctx.arc(this.p1.xp, this.p1.yp, width leafSize 0.1, 0, Math.PI 2); ctx.fill(); ctx.begPath(); ctx.fillStyle = "hsl(" + c + ", 60%, 6%)"; ctx.arc(this.p1.xp, this.p1.yp, width leafSize, 0, Math.PI 2); ctx.fill(); ctx.globalCompositeOperation = "source-over"; } } // 3D pot constructor function Pot(x, y, z) { this.x = x; this.y = y; this.z = z; this.scale = 0; this.xp = 0; this.yp = 0; } // 3D pot projection Pot.prototype.project = function() { this.scale = 265 / (265 + this.z); this.xp = canvas.centerX + (this.x - canvas.centerX) this.scale; this.yp = canvas.centerY + (this.y - canvas.centerY) this.scale; } // new branch factory function newBranch(parent) { var branch = new Branch(parent, parent.level - 1, hue, parent.p1.x, parent.p1.y); branch.angle = Math.atan2( parent.p1.y - parent.p0.y, parent.p1.x - parent.p0.x ) + (branch.level ? (Math.random() maxAngle - (maxAngle 0.5)) : 0 ); branch.vx = Math.cos(branch.angle) growSpeed; branch.vy = Math.s(branch.angle) growSpeed; branch.life = branch.level ? Math.round(Math.random() branch.level branchLength) + 1 : 2; return branch; } // animate the tree function tree() { // clear screen ctx.fillStyle = '#000'; ctx.fillRect(0, 0, canvas.width, canvas.height); // poter trail if (poter.moveDistance > 10 resolution) { poter.moveDistance = 0; // ma trunk var branch = new Branch( root, root.level, hue, root.p1.x, root.p1.y ); // add another branch if (Math.random() <= freq) root.b1 = newBranch(root); // new root root = branch; root.p1.x = poter.x; root.p1.y = poter.y; } // crement color hue++; // traverse the tree var trunk = root; while (trunk) { trunk.grow(); trunk = trunk.parent; } } // prepare the canvas var canvas = { elem: document.getElementById('canvas'), resize: function() { this.width = this.elem.width = this.elem.offsetWidth resolution; this.height = this.elem.height = this.elem.offsetHeight resolution; this.centerX = this.width 0.5; this.centerY = this.height 0.5; } } var ctx = canvas.elem.getContext("2d"); wdow.addEventListener('resize', canvas.resize.bd(canvas), false); canvas.resize(); // poter events var poter = { x: 0, y: 0, px: 0, py: 0, moveDistance: 0, move: function(e) { e.preventDefault(); var poter = e.targetTouches ? e.targetTouches[0] : e; // s automove if (automove) { automove = false; document.getElementById("clic").nerHTML = ""; } this.x = poter.clientX resolution; this.y = poter.clientY resolution; this.distance(); // render tree requestAnimationFrame(tree); }, distance: function() { var dx = this.x - this.px; var dy = this.y - this.py; this.moveDistance += Math.sqrt(dx dx + dy dy); // speed limit if (!automove && this.moveDistance > 40) { this.x = this.px + dx 0.1; this.y = this.py + dy 0.1; } this.px = this.x; this.py = this.y; } } wdow.addEventListener("mousemove", poter.move.bd(poter), false); canvas.elem.addEventListener("touchmove", poter.move.bd(poter), false); // auto start ! function auto() { automove && requestAnimationFrame(auto); // lissajou poter.x = canvas.centerX + canvas.centerX Math.cos(angleX += 0.02) 0.20; poter.y = canvas.centerY + canvas.centerY Math.s(angleY += 0.04) 0.25; poter.distance(); // create the first branch if (!root) { root = new Branch(false, maxLevels, hue, poter.x, poter.y); root.p0 = root.p1; root.p0.project(); } // render tree tree(); }(); }(); </script> </body> </html>
以上所述是长沙网络推广给大家介绍的使用css与js生成的唯美炫酷的图形树效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
网站设计
- 静宁会SEO的网站建设公司:全面提升您的网络影
- 提升在线业务的关键:选择最佳的丽水网站建设
- 浙江网站优化发展潜力如何
- 井研专业的网站建设公司:打造您的在线品牌
- 灵山SEO网站建设公司:提升您的在线业务表现
- 蒙城网站建设优化公司:提升您网站表现的理想
- 阳谷企业网站优化:提升线上业务力的关键
- 樟树专业的网站建设公司:打造您在线业务的坚
- 通河百度SEO排名的策略与技巧
- 重庆百度快照排名如何进行精准的客户引流
- 重庆百度快照排名
- 常宁便宜的建站公司:助您轻松打造在线业务
- 巫溪百度网站优化:提升网站曝光率与流量的关
- 湖北整站优化怎么做才能放大客户需求
- 闸北网站建设多少钱?全面解析与预算规划
- 辽宁企业网站优化怎么做电话营销