亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

使用css與js生成的唯美炫酷的圖形樹效果

2024-07-11 08:59:00
字體:
來源:轉載
供稿:網友

效果圖如下所示:

在線演示:Here~

給大家分享一個使用css與js生成的唯美炫酷的圖形樹效果,相關代碼如下:

<!doctype html><html lang="en"><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>

總結

以上所述是小編給大家介紹的使用css與js生成的唯美炫酷的圖形樹效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va欧美va国产综合剧情| 久久国产精品免费视频| 亚洲国产成人久久| 日韩精品免费综合视频在线播放| 一区二区三区国产在线观看| 欧美性xxxxx极品| 日韩电视剧在线观看免费网站| 俺去亚洲欧洲欧美日韩| 国产一区二区三区在线免费观看| 久久精品久久久久电影| 欧美高清视频在线观看| 亚洲精品视频网上网址在线观看| 欧美亚洲国产精品| 国产精品偷伦免费视频观看的| 亚洲a在线观看| 亚洲 日韩 国产第一| 91精品国产91久久久久久| 九九久久久久99精品| 2018国产精品视频| 亚洲色图25p| 欧美一级大片在线观看| 成人国产精品久久久| 日韩在线精品视频| 色综合伊人色综合网| 中文字幕欧美精品在线| 亚洲精品欧美一区二区三区| 欧美国产日韩视频| 国产精品私拍pans大尺度在线| 欧美乱人伦中文字幕在线| 国产精品自拍小视频| 国产精品 欧美在线| 亚洲欧美日韩一区二区三区在线| 国产精品无av码在线观看| 久久成人一区二区| 91手机视频在线观看| 午夜欧美不卡精品aaaaa| 成人网欧美在线视频| 久久精品视频导航| 亚洲电影第1页| 国产区亚洲区欧美区| 精品久久中文字幕久久av| 国产精品极品美女在线观看免费| 中文字幕不卡在线视频极品| 欧美日韩一区二区在线| 日韩欧美福利视频| 欧美视频在线观看免费网址| 日本高清久久天堂| 欧美午夜性色大片在线观看| 亚洲小视频在线观看| 亚洲人成在线免费观看| 国产精品视频网址| 91chinesevideo永久地址| 日韩精品久久久久久久玫瑰园| 欧美日产国产成人免费图片| 一区二区三区在线播放欧美| 亚洲视频电影图片偷拍一区| 一夜七次郎国产精品亚洲| 亚洲美女久久久| 91久久嫩草影院一区二区| 欧美三级免费观看| 欧美日韩性视频在线| 欧美天天综合色影久久精品| 日韩中文在线中文网在线观看| 一区二区三区在线播放欧美| 国产亚洲精品久久| 97在线观看视频国产| www.久久撸.com| 亚洲精品一区二区网址| 国产a级全部精品| 97国产suv精品一区二区62| 亚洲女人初尝黑人巨大| 国产精品免费小视频| 欧美亚洲第一页| 亚洲一区中文字幕在线观看| 日韩日本欧美亚洲| 欧美一级淫片aaaaaaa视频| 日产精品久久久一区二区福利| 久久伊人91精品综合网站| 亚洲电影成人av99爱色| 亲爱的老师9免费观看全集电视剧| 欧美性生交大片免网| 日韩电影视频免费| 亚洲国产欧美在线成人app| 国产精品久久久久久久久久久久久| 欧美日韩国产成人高清视频| 高清欧美性猛交xxxx| 欧美日韩中文在线| 77777亚洲午夜久久多人| 91wwwcom在线观看| 亚洲电影第1页| 日产精品久久久一区二区福利| 91亚洲精品久久久久久久久久久久| 久久久国产影院| 有码中文亚洲精品| 中文字幕在线成人| 57pao成人永久免费视频| 国产精品日韩欧美| 国产网站欧美日韩免费精品在线观看| 久久99久久久久久久噜噜| 精品久久久国产| 亚洲成人激情在线| 国产精品美女久久| 亚洲第一av网| 欧美午夜视频在线观看| 91久久精品国产91久久性色| 欧美日韩中文字幕综合视频| 国产一区二区三区视频在线观看| 亚洲第一级黄色片| 成人激情在线观看| 亚洲女人天堂色在线7777| 久久人人爽人人爽人人片亚洲| 成人精品久久一区二区三区| 欧美精品18videos性欧| 国产小视频91| 欧美一级视频在线观看| 日韩福利在线播放| 国模精品一区二区三区色天香| 日韩美女在线播放| 国产精品久久久久999| 国产成人久久久精品一区| 国产精品白嫩美女在线观看| 亚洲精品动漫久久久久| 欧美www在线| 91精品91久久久久久| 欧美激情日韩图片| 国内精品久久久久伊人av| 成人国产精品日本在线| 精品成人国产在线观看男人呻吟| 成人免费午夜电影| 日韩久久精品电影| 欧美老女人在线视频| 亚洲成av人乱码色午夜| 成人av在线亚洲| 欧美视频中文字幕在线| 欧美第一淫aaasss性| 韩曰欧美视频免费观看| 久久精品视频播放| 91免费高清视频| 日韩成人在线电影网| 欧美一级黄色网| 久久免费视频网| 日韩激情av在线免费观看| 日av在线播放中文不卡| 国产精品久久久精品| 欧美日韩免费观看中文| 国产噜噜噜噜噜久久久久久久久| 亚洲第一视频在线观看| 亚洲精品福利免费在线观看| 亚洲电影成人av99爱色| 国产盗摄xxxx视频xxx69| 日本一区二区在线播放| 久久久欧美精品| 日韩经典中文字幕在线观看| 中文字幕欧美精品日韩中文字幕| 国产欧美最新羞羞视频在线观看| 日韩专区在线观看| 欧美精品久久久久久久久久| 91亚洲精品一区| 日韩成人中文电影| 国产精品极品美女在线观看免费| 国产91亚洲精品| 日韩精品高清在线观看| 最近日韩中文字幕中文| 国产精品福利在线观看|