最新公告
  • 欢迎您光临优源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • HTML5 Canvas炫酷3D线条延伸动画特效

    HTML5 Canvas炫酷3D线条延伸动画特效 最后编辑:2021-02-13
    增值服务: 自动发货 使用说明 安装指导 环境配置二次开发BUG修复

    这是一款基于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>
    

    猜你在找

    1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!lyebiz@qq.com
    2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
    3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
    4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!

    优源网 » HTML5 Canvas炫酷3D线条延伸动画特效

    常见问题FAQ

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

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 80027422@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系作者
    • 410会员总数(位)
    • 5207资源总数(个)
    • 77本周发布(个)
    • 0 今日发布(个)
    • 117稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情