js实现动感线条曲线动画效果代码

代码语言:html

所属分类:动画

代码描述:js实现动感线条曲线动画效果代码

代码标签: 线条 曲线 动画 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!doctype html>
<html>

<head>
   
<meta charset="utf-8">
   
<title></title>

   
<style>
        canvas
.drawer {
               
position:fixed;
               
top:0px;
               
left:0px;
               
width:100vw;
               
height:100vh;
       
}
   
</style>

</head>

<body>

   
<div></div>

   
<script>
        'use strict';
       
        var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
       
        function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
       
        function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
       
        function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
       
        var initialise = function initialise() {
          var application = new Application();
          // application.scaleFactor = 2;
          application.clearOnRedraw = Application.FADE;
          application.fadeColour = 'rgba(0,0,0,.03)';
          application.fillColour = 'rgba(30,30,30,1)';
          application.onResize();
          var vfield = new VectorField();
          vfield.scale = 300;
          vfield.amplitude = 40;
          // vfield.debug = true;
       
          application.addActor(vfield);
       
          var maxNum = 1000;
          var num = 0;
       
          var addTracer = function addTracer(position, colour) {
            if (num > maxNum) return;
       
            num++;
       
            var tracer = new BranchTracer(position.x, position.y);
            tracer.field = vfield;
            var momentum = new Vector(Math.random(), Math.random());
            momentum.length = Math.random() * 2;
            tracer.momentum = momentum;
            tracer.friction = 0.97;
       
            if (colour) {
              tracer.colour = colour;
            } else {
              tracer.colour = 'RGBA(' + Math.round(Math.random() * 255) + ',' + 100 + Math.round(Math.random() * 155) + ',255,0.2)';
            }
       
            application.addActor(tracer);
            return tracer;
          };
          var seed = addTracer(new Vector(window.innerWidth / 2, window.innerHeight / 2), 'RGBA(255, 100, 100, 0.8)');
          seed.branchChance = 5;
          seed.friction = 0.985;
          seed.onBranch = addTracer;
       
          setInterval(function () {
            vfield.z = Math.random() * 10000;
          }, 10000);
       
          var stage = application.stage;
          document.body.appendChild(stage);
          application.onPointerMove({ clientX: window.innerWidth / 2, clientY: window.innerHeight / 2 });
          application.render();
          application.animating = true;
       
          // application.runFor(60 * 120);
       
          return;
        };
       
        var Application = function () {
          function Application() {
            _classCallCheck(this, Application);
       
            this.stage = document.createElement('canvas');
       
            this.animate = this.animate.bind(this);
       
            this.onResize = this.onResize.bind(this);
            this.onPointerDown = this.onPointerDown.bind(this);
            this.onPointerup = this.onPointerup.bind(this);
            this.onPointerMove = this.onPointerMove.bind(this);
       
            this.initialiseEvents();
          }
       
          Application.prototype.initialiseEvents = function initialiseEvents() {
            window.addEventListener('resize', this.onResize, false);
            document.addEventListener('pointerdown', this.onPointerDown, false);
            document.addEventListener('pointerup', this.onPointerup, false);
            document.addEventListener('pointermove', this.onPointerMove, false);
          };
       
          Application.prototype.deInitialiseEvents = function deInitialiseEvents() {
            window.removeEventListener('resize', this.onResize, false);
            document.removeEventListener('pointerdown', this.onPointerDown, false);
            document.removeEventListener('pointerup', this.onPointerup, false);
            document.removeEventListener('pointermove', this.onPointerMove, false);
          };
       
          Application.prototype.addActor = function addActor(actor) {
            if (actor instanceof Actor) {
              this.actors.push(actor);
            }
          };
       
          Application.prototype.runFor = function runFor(ticks) {
            var interval = 1 / 60;
            var i = 0;
       
            for (i; i < ticks; i++) {
              this.triggerEvent('application-animate', { now: this.now, then: this.then, interval: interval, application: this });
       
              this.render();
            }
          };
       
          Application.prototype.animate = function animate() {
            this.now = Date.now();
            var interval = this.now - this.then;
       
            this.triggerEvent('application-animate', { now: this.now, then: this.then, interval: interval, application: this });
       
            this.render();
       
            this.then = this.now;
       
            if (this.animating) {
              requestAnimationFrame(this.animate);
            }
          };
       
          Application.prototype.render = function render() {
            var _this = this;
       
            var dims = this.dimensions;
       
            if (this.clearOnRedraw == Application.CLEAR) {
              this.context.clearRect(0, 0, dims.width, dims.height);
            } else if (this.clearOnRedraw == Application.FADE) {
              this.context.fillStyle = this.fadeColour;
              this.context.fillRect(0, 0, dims.width, dims.height);
            }
       
            this.actors.forEach(function (actor) {
              actor.render(_this);
            });
          };
       
          Application.prototype.onResize = function onResize(e) {
            console.log('resize');
            this.dimensions = new Vector(window.innerWidth, window.innerHeight);
          };
       
          Application.prototype.onPointerDown = function onPointerDown(e) {};
       
          Application.prototype.onPointerup = function onPointerup(e) {};
       
          Application.prototype.onPointerMove = function onPointerMove(e) {
            var pointer = new Vector(e.clientX, e.clientY);
            this.triggerEvent('application-pointermove', { pointer: pointer });
          };
       
          Application.prototype.triggerEvent = function triggerEvent(event, data) {
            if (window.CustomEvent) {
              var event = new CustomEvent(event, { detail: data });
            } else {
              var event = document.createEvent('CustomEvent');
              event.initCustomEvent(event, true, true, data);
            }
       
            document.dispatchEvent(event);
          };
       
          _createClass(Application, [{
            key: 'actors',
            get: function get() {
              if (!this._actors) this._actors = [];
       .........完整代码请登录后点击上方下载按钮下载查看

网友评论0