鼠标点击粒子爆炸炫彩动画效果
代码语言:html
所属分类:背景
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!doctype html> <html> <head> <meta charset="utf-8"> <title>H5点击网页彩色粒子爆炸特效</title> <style> * { margin: 0; padding: 0; } body { width: 100vw; min-height: 100vh; font-family: 'Inconsolata', monospace; overflow: hidden; } #canvas { display: block; cursor: pointer; } .hint { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; opacity: 0; visibility: hidden; -webkit-animation: fade-in 1s ease-out 1s forwards, fade-out 1s ease-out 5s forwards; animation: fade-in 1s ease-out 1s forwards, fade-out 1s ease-out 5s forwards; } .hint > h1 { font-size: 32px; color: #fff; } @-webkit-keyframes fade-in { 0% { opacity: 0; visibility: hidden; } 100% { opacity: 1; visibility: visible; } } @keyframes fade-in { 0% { opacity: 0; visibility: hidden; } 100% { opacity: 1; visibility: visible; } } @-webkit-keyframes fade-out { 0% { opacity: 1; visibility: visible; } 100% { opacity: 0; visibility: hidden; } } @keyframes fade-out { 0% { opacity: 1; visibility: visible; } 100% { opacity: 0; visibility: hidden; } } </style> </head> <body> <canvas id="canvas"></canvas> <div class="hint" id="hint"> <h1>Click.</h1> </div> <script> 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 _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}var getRandom = function getRandom(min, max) { return Math.random() * (max - min) + min; }; var getRandomInt = function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; }; var getRandomColor = function getRandomColor() { var colors = [ 'rgba(231, 76, 60, 1)', // red 'rgba(241, 196, 15, 1)', // yellow 'rgba(46, 204, 113, 1)', // green 'rgba(52, 152, 219, 1)', // blue 'rgba(155, 89, 182, 1)' // purple ]; return colors[getRandomInt(0, colors.length)]; }; // Particle var Particle = function () { function Particle(system, x, y) {_classCallCheck(this, Particle); this.system = system; this.universe = this.system.world.universe; this.x = x; this.y = y; this.color = getRandomColor(); this.life = 1; this.aging = getRandom(0.99, 0.999); // 0.99, 0.999 || 0.999, 0.9999 this.r = getRandomInt(8, 16); this.speed = getRandom(3, 8); this.velocity = [ getRandom(-this.speed, this.speed), getRandom(-this.speed, this.speed)]; }_createClass(Particle, [{ key: 'update', value: function update( dt) { this.life *= this.aging; if ( this.r < 0.1 || this.life === 0 || this.x + this.r < 0 || this.x - this.r > this.universe.width || this.y + this.r < 0 || this.y - this.r > this.universe.height) { this.system.removeObject(this); } this.r *= this.life; this.x += this.velocity[0]; this.y += this.velocity[1]; } }, { key: 'render', value: function render( ctx) { // Main circle ctx.fillStyle = this.color; ctx.beginPath(); ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI, false); ctx.fill(); ctx.closePath(); var r = this.color.match(/([0-9]+)/g)[0]; var g = this.color.match(/([0-9]+)/g)[1]; var b = this.color.match(/([0-9]+)/g)[2]; // Gradient var spread = 1.5; var gradient = ctx.createRadialGradient( this.x, this.y, this.r, this.x, this.y, this.r * spread); gradient.addColorStop(0, 'rgba(.........完整代码请登录后点击上方下载按钮下载查看
网友评论0