• 正文概述
  • 售后服务
  • <!doctype html>
    <html>
    <head>
    <meta charset=\”utf-8\”>
    <title>不要失去你的彩虹</title>

    <style>
    canvas {
      position: absolute;
      top: 0;
      left: 0;
    }
    </style>

    </head>
    <body>

    <canvas id=c></canvas>

    <script>
    let w = c.width = window.innerWidth;
    let h = c.height = window.innerHeight;

    const ctx = c.getContext(\’2d\’);
    const opts = {
        hexLength: 30,
        lenFn: ({ len, t }) =>
          len + Math.sin(t),
        radFn: ({ rad, len, t, excitement }) =>
          rad + (excitement + opts.propFn({ len, t }))*2 / 4,
        propFn: ({ len, t }) => 
          len / opts.hexLength / 10 – t,
        excitementFn: ({ len, t }) =>
           Math.sin(opts.propFn({ len, t }))**2,
        colorFn: ({ rad, excitement, t }) => 
          `hsl(${rad / Math.TAU * 360 + t}, ${excitement * 100}%, ${20 + excitement * 50}%)`,
        timeStep: .01,
        randomJig: 8,
      
        repaintColor: \’rgba(0,0,0,.1)\’
      };
    let tick = 0;

    Math.TAU = 6.28318530717958647692;

    const vertices = [];
    class Vertex {
      constructor({ x, y }) {
        this.len = Math.sqrt(x*x + y*y);
        this.rad = Math.acos(x / this.len) * (y > 0 ? 1 : -1) + .13;
        this.prevPoint = { x, y };
      }
      
      step() {
        const excitement = opts.excitementFn({ len: this.len, t: tick });
        const param = { 
          len: this.len,
          rad: this.rad,
          t: tick,
          excitement
        };
        const nextLen = opts.lenFn(param);
        const nextRad = opts.radFn(param);
        const color = opts.colorFn(param);
        
        ctx.strokeStyle = color;
        ctx.lineWidth = excitement + .2;
        ctx.beginPath();
        ctx.moveTo(this.prevPoint.x, this.prevPoint.y);
        this.prevPoint.x = nextLen * Math.cos(nextRad) + 
          Math.random() * (1-excitement)**2 * opts.randomJig * 2 – opts.randomJig;
        this.prevPoint.y = nextLen * Math.sin(nextRad) +
          Math.random() * (1-excitement)**2 * opts.randomJig * 2 – opts.randomJig;
        ctx.lineTo(this.prevPoint.x, this.prevPoint.y);
        ctx.stroke();
      }
      
      static gen() {
        vertices.length = 0; 
        const hexCos = Math.cos(Math.TAU / 12) * opts.hexLength;
        const hexSin = Math.sin(Math.TAU / 12) * opts.hexLength;

      
        let alternanceX = false;
        for(let x = 0; x < w; x += hexCos) {
          let alternance = alternanceX = !alternanceX;
          for(let y = 0; y < h; y += hexSin + opts.hexLength) {
            alternance = !alternance;
            vertices.push(new Vertex({
              x: x – w / 2,
              y: y + alternance * hexSin – h / 2
            }))
          }
        }
        
      }
    }

    Vertex.gen();

    ctx.fillStyle = \’#222\’;
    ctx.fillRect(0, 0, w, h);
    const anim = () => {
      window.requestAnimationFrame(anim);
      
      tick += opts.timeStep;
      
      ctx.fillStyle = opts.repaintColor;
      ctx.fillRect(0, 0, w, h);
      
      ctx.translate(w/2, h/2);
      vertices.forEach((vertex) => vertex.step());
      ctx.translate(-w/2, -h/2);
    }
    anim();

    window.addEventListener(\’resize\’, () => {
      w = c.width = window.innerWidth;
      h = c.height = window.innerHeight;
      
      Vertex.gen();
      tick = 0;
      ctx.fillStyle = \’#222\’;
      ctx.fillRect(0, 0, w, h);
    })
    </script>

    </body>

    </html>

    这是一个HTML5+Canvas的黑洞特效,需要的朋友可以直接下载使用,更多特效代码尽在PHP中文网。

    HTML5+Canvas的黑洞特效 网页特效 第1张

    青柠资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"www.qnziyw.cn",如遇到无法解压的请联系管理员!


    青柠资源网 » HTML5+Canvas的黑洞特效

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们。
    找不到素材资源介绍文章里的示例图片?
    对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单

    发表回复