问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么样使用css与js生成图形树效果

发布网友 发布时间:2022-04-20 07:09

我来回答

1个回答

热心网友 时间:2022-04-22 03:03

<!doctype html> <html> <head>   <meta charset="UTF-8">   <title>cloth</title>   <style>     @import url(http://fonts.googleapis.com/css?family=Poiret+One); html {   overflow: hidden;   touch-action: none;   content-zooming: none; } body {   position: absolute;   margin: 0;   padding: 0;   background: #000;   width: 100%;   height: 100%; } #canvas {   width: 100%;   height: 100%;   background: #000;   position: absolute; } #text {   position: absolute;   left: 0;   top: 50%;   width: 100%;   pointer-events: none; } #text div {   position: absolute;   color: #888;   left: 0;   width: 100%;   text-align: center;   top: -12vmin;   font-family: 'Poiret One', cursive;   font-size: 6vmin; }      </style> </head> <body>   <canvas id="canvas"></canvas> <div id="text">   <div id="clic" nowrap> </div> <script type="text/javascript" src="http://cdn.gbtags.com/jquery/1.11.1/jquery.min.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 Point(x, y, 0);     this.p1 = new Point(       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.beginPath();     if (this.level) {       ctx.lineWidth = width;       ctx.strokeStyle = "hsl(" + (this.hue % 360) + ", 14%," + color + "%)";       ctx.moveTo(this.p0.xp, this.p0.yp);       ctx.lineTo(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.beginPath();       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 point constructor   function Point(x, y, z) {     this.x = x;     this.y = y;     this.z = z;     this.scale = 0;     this.xp = 0;     this.yp = 0;   }   // 3D point projection   Point.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.sin(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);     // pointer trail     if (pointer.moveDistance > 10 * resolution) {       pointer.moveDistance = 0;       // main 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 = pointer.x;       root.p1.y = pointer.y;     }     // increment 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");   window.addEventListener('resize', canvas.resize.bind(canvas), false);   canvas.resize();   // pointer events   var pointer = {     x: 0,     y: 0,     px: 0,     py: 0,     moveDistance: 0,     move: function(e) {       e.preventDefault();       var pointer = e.targetTouches ? e.targetTouches[0] : e;       // stop automove       if (automove) {         automove = false;         document.getElementById("clic").innerHTML = "";       }       this.x = pointer.clientX * resolution;       this.y = pointer.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;     }   }   window.addEventListener("mousemove", pointer.move.bind(pointer), false);   canvas.elem.addEventListener("touchmove", pointer.move.bind(pointer), false);   // auto start   ! function auto() {     automove && requestAnimationFrame(auto);     // lissajou     pointer.x = canvas.centerX + canvas.centerX * Math.cos(angleX += 0.02) * 0.20;     pointer.y = canvas.centerY + canvas.centerY * Math.sin(angleY += 0.04) * 0.25;     pointer.distance();     // create the first branch     if (!root) {       root = new Branch(false, maxLevels, hue, pointer.x, pointer.y);       root.p0 = root.p1;       root.p0.project();     }     // render tree     tree();   }(); }();   </script> </body> </html>

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何让孩子爱上营养早餐? 牟mou姓与牟mu姓的区别 mou是什么 “MOU”指什么? 如何在EXCEL中表示“大于等于”? vivi是什么 可以直接洗冷水澡吗 室友一开wifi共享大师我的共享大师就不能用怎么回事? 共享大师电脑连不上共享大师电脑版 lol里面的ad、ap、adc都是什么意思啊?详细说明一下,还有其他的专业术语... PS处理好的图片用DW如何生成CSS格式 如何利用CSS实现各种几何图形形状 css中是怎么自己生成矢量图标的 如何基于纯CSS创建各种图形形状 大学英语视听说软件在哪儿下载? 大学英语视听说口语考试,是要临场发挥吗? 大学视听说教程和综合教程是一起考试的吗? 大部分人视听说都是抄的答案吧? 英语视听说 英文 新视野大学英语“视听说教程3”和“听说教程3”有什麽... 视听说用的是什么语音识别软件啊 新世纪大学英语视听说教程1的听力原文和答案是什么? 视听说是不是2没刷完刷不了3? 英语新闻访谈视听说是什么 大学英语选课是选读写译还是视听说?我是学法学的,... 视听说心得论文800字 谁能给我解释一下大学英语视听说是什么梗 视听说该怎么做才最高效,收获最大? 英语影视视听说这门课程都主要讲些什么东西啊?谢了! 大学英语视听说教程的内容简介 做css页面,应该怎么切图生成HTML? 制作网页时用css画图形好还是用图片好,具体有什么... 如何利用CSS实现各种几何图形形状效果 怎样用css制作三角形图形,且不影响后边div的背景图 如何使用html和js,css代码生成柱状图和饼状图 怎么用itellij idea图形化创建css 在css中如何写出多边形的图形来 有一张jpg的网页图片,怎么生成css样式表 css 里有没有快捷键可以快速生成第二张图里的代码 div+css 可以图形化操作 在css里怎么写这个图形? 如何用css做出像qq空间效果一样的飘动的图片 有没有用图片自动生成DIV+CSS的网页的工具 求助Altium Designer中IN5819二极管和稳压芯片TPS7... 利用LDO芯片TPS7A45XX系列芯片,如何产生小于1V的... 推荐几款大型单机游戏(FPS、TPS我最钟爱) TPS54360能否并接2路输出? 有什么好玩的冷门单机游戏ACT RAC AVG FPS TPS RPG... what is a tps report 是什么意思 福尼斯焊接TPS4000 脉冲频率怎么调节?现在的脉冲...