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