前端开发 之 12个鼠标交互殊效下【附完备源码】

飞不高  金牌会员 | 昨天 09:35 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 771|帖子 771|积分 2313

前端开发 之 12个鼠标交互殊效下【附完备源码】


  
七:粒子烟花绽放殊效

1.效果展示


2.HTML完备代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>烟花绽放特效</title>
  7. <style>
  8.   * {
  9.     margin: 0;
  10.     padding: 0;
  11.     box-sizing: border-box;
  12.   }
  13.   body, html {
  14.     height: 100%;
  15.     margin: 0;
  16.     display: flex;
  17.     justify-content: center;
  18.     align-items: center;
  19.     background-color: #161816;
  20.     overflow: hidden;
  21.   }
  22.   #explosion-container {
  23.     position: absolute;
  24.     top: 0;
  25.     left: 0;
  26.     width: 100vw;
  27.     height: 100vh;
  28.   }
  29.   .particle {
  30.     position: absolute;
  31.     width: 4px;
  32.     height: 4px;
  33.     background-color: #fff;
  34.     border-radius: 50%;
  35.     opacity: 1;
  36.     pointer-events: none;
  37.   }
  38. </style>
  39. </head>
  40. <body>
  41. <div id="explosion-container"></div>
  42. <script>
  43.   const container = document.getElementById('explosion-container');
  44.   const particleCount = 100;
  45.   const maxSpeed = 5;
  46.   const colors = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff'];
  47.   function random(min, max) {
  48.     return Math.random() * (max - min) + min;
  49.   }
  50.   function getRandomColor() {
  51.     const randomIndex = Math.floor(Math.random() * colors.length);
  52.     return colors[randomIndex];
  53.   }
  54.   function createParticle(startX, startY) {
  55.     const particle = document.createElement('div');
  56.     particle.classList.add('particle');
  57.     const halfSize = random(2, 6) / 2;
  58.     particle.style.width = `${2 * halfSize}px`;
  59.     particle.style.height = `${2 * halfSize}px`;
  60.     particle.style.backgroundColor = getRandomColor();
  61.     const speedX = random(-maxSpeed, maxSpeed);
  62.     const speedY = random(-maxSpeed, maxSpeed);
  63.     let x = startX;
  64.     let y = startY;
  65.     let angle = random(0, 2 * Math.PI);
  66.     function update() {
  67.       x += speedX;
  68.       y += speedY;
  69.       angle += 0.1;
  70.       particle.style.transform = `translate3d(${x}px, ${y}px, 0) rotate(${angle}rad)`;
  71.       if (x < -50 || x > window.innerWidth + 50 || y < -50 || y > window.innerHeight + 50) {
  72.         particle.remove();
  73.       } else {
  74.         requestAnimationFrame(update);
  75.       }
  76.     }
  77.     update();
  78.     container.appendChild(particle);
  79.   }
  80.   function createExplosion(x, y) {
  81.     for (let i = 0; i < particleCount; i++) {
  82.       createParticle(x, y);
  83.     }
  84.   }
  85.   document.addEventListener('click', (event) => {
  86.     createExplosion(event.clientX, event.clientY);
  87.   });
  88. </script>
  89. </body>
  90. </html>
复制代码
八:彩球开释殊效

1.效果展示


2.HTML完备代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>彩球释放特效</title>
  7.     <style>
  8. body, html {
  9.     margin: 0;
  10.     padding: 0;
  11.     width: 100%;
  12.     height: 100%;
  13.     overflow: hidden;
  14. }
  15. #particleCanvas {
  16.     display: block;
  17.     width: 100%;
  18.     height: 100%;
  19.     background: #000;
  20. }
  21.     </style>
  22. </head>
  23. <body>
  24.     <canvas id="particleCanvas"></canvas>
  25. </body>
  26. <script>
  27. const canvas = document.getElementById('particleCanvas');
  28. const ctx = canvas.getContext('2d');
  29. canvas.width = window.innerWidth;
  30. canvas.height = window.innerHeight;
  31. const particlesArray = [];
  32. const numberOfParticles = 100;
  33. const mouse = {
  34.     x: undefined,
  35.     y: undefined,
  36. };
  37. class Particle {
  38.     constructor() {
  39.         this.x = canvas.width / 2;
  40.         this.y = canvas.height / 2;
  41.         this.size = Math.random() * 5 + 1;
  42.         this.speedX = Math.random() * 3 - 1.5;
  43.         this.speedY = Math.random() * 3 - 1.5;
  44.         this.color = 'hsl(' + Math.floor(Math.random() * 360) + ', 100%, 50%)';
  45.     }
  46.     update() {
  47.         this.x += this.speedX;
  48.         this.y += this.speedY;
  49.         if (this.x > canvas.width || this.x < 0) this.speedX *= -1;
  50.         if (this.y > canvas.height || this.y < 0) this.speedY *= -1;
  51.         this.draw();
  52.     }
  53.     draw() {
  54.         ctx.fillStyle = this.color;
  55.         ctx.beginPath();
  56.         ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
  57.         ctx.closePath();
  58.         ctx.fill();
  59.     }
  60. }
  61. function init() {
  62.     for (let i = 0; i < numberOfParticles; i++) {
  63.         particlesArray.push(new Particle());
  64.     }
  65. }
  66. function animate() {
  67.     ctx.clearRect(0, 0, canvas.width, canvas.height);
  68.     for (let particle of particlesArray) {
  69.         particle.update();
  70.     }
  71.     requestAnimationFrame(animate);
  72. }
  73. window.addEventListener('resize', function() {
  74.     canvas.width = window.innerWidth;
  75.     canvas.height = window.innerHeight;
  76. });
  77. window.addEventListener('mousemove', function(event) {
  78.     mouse.x = event.x;
  79.     mouse.y = event.y;
  80.     for (let particle of particlesArray) {
  81.         particle.x = mouse.x;
  82.         particle.y = mouse.y;
  83.     }
  84. });
  85. window.addEventListener('mouseout', function() {
  86.     mouse.x = undefined;
  87.     mouse.y = undefined;
  88. });
  89. init();
  90. animate();
  91. </script>
  92. </html>
复制代码
九:雨滴掉落殊效

1.效果展示


2.HTML完备代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>雨滴掉落特效</title>
  5.   <meta name="Generator" content="EditPlus">
  6.   <meta charset="UTF-8">
  7.   <style>
  8.     body, html {
  9.       width: 100%;
  10.       height: 100%;
  11.       margin: 0;
  12.       padding: 0;
  13.       overflow: hidden;
  14.     }
  15.     canvas {
  16.       position: absolute;
  17.       left: 0;
  18.       top: 0;
  19.       width: 100%;
  20.       height: 100%;
  21.     }
  22.   </style>
  23. </head>
  24. <body>
  25.   <canvas id="canvas-club"></canvas>
  26.   <div class="overlay"></div>
  27.   <script>
  28.     var c = document.getElementById("canvas-club");
  29.     var ctx = c.getContext("2d");
  30.     var w = c.width = window.innerWidth;
  31.     var h = c.height = window.innerHeight;
  32.     var clearColor = 'rgba(0, 0, 0, .1)';
  33.     var max = 30;
  34.     var drops = [];
  35.     var mouseX = 0;
  36.     var mouseY = 0;
  37.     function random(min, max) {
  38.       return Math.random() * (max - min) + min;
  39.     }
  40.     function O() {}
  41.     O.prototype = {
  42.       init: function(x, y) {
  43.         this.x = x;
  44.         this.y = y;
  45.         this.color = 'hsl(180, 100%, 50%)';
  46.         this.w = 2;
  47.         this.h = 1;
  48.         this.vy = random(4, 5);
  49.         this.vw = 3;
  50.         this.vh = 1;
  51.         this.size = 2;
  52.         this.hit = random(h * .8, h * .9);
  53.         this.a = 1;
  54.         this.va = 0.96;
  55.       },
  56.       draw: function() {
  57.         if (this.y > this.hit) {
  58.           ctx.beginPath();
  59.           ctx.moveTo(this.x, this.y - this.h / 2);
  60.           ctx.bezierCurveTo(
  61.             this.x + this.w / 2, this.y - this.h / 2,
  62.             this.x + this.w / 2, this.y + this.h / 2,
  63.             this.x, this.y + this.h / 2);
  64.           ctx.bezierCurveTo(
  65.             this.x - this.w / 2, this.y + this.h / 2,
  66.             this.x - this.w / 2, this.y - this.h / 2,
  67.             this.x, this.y - this.h / 2);
  68.           ctx.strokeStyle = 'hsla(180, 100%, 50%, ' + this.a + ')';
  69.           ctx.stroke();
  70.           ctx.closePath();
  71.         } else {
  72.           ctx.fillStyle = this.color;
  73.           ctx.fillRect(this.x, this.y, this.size, this.size * 5);
  74.         }
  75.         this.update();
  76.       },
  77.       update: function() {
  78.         if (this.y < this.hit) {
  79.           this.y += this.vy;
  80.         } else {
  81.           if (this.a > 0.03) {
  82.             this.w += this.vw;
  83.             this.h += this.vh;
  84.             if (this.w > 100) {
  85.               this.a *= this.va;
  86.               this.vw *= 0.98;
  87.               this.vh *= 0.98;
  88.             }
  89.           } else {
  90.             this.a = 0;
  91.           }
  92.         }
  93.       }
  94.     }
  95.     function resize() {
  96.       w = c.width = window.innerWidth;
  97.       h = c.height = window.innerHeight;
  98.     }
  99.     function anim() {
  100.       ctx.fillStyle = clearColor;
  101.       ctx.fillRect(0, 0, w, h);
  102.       for (var i = drops.length - 1; i >= 0; i--) {
  103.         drops[i].draw();
  104.         if (drops[i].a <= 0.03) {
  105.           drops.splice(i, 1);
  106.         }
  107.       }
  108.       requestAnimationFrame(anim);
  109.     }
  110.     function onMouseMove(e) {
  111.       mouseX = e.clientX;
  112.       mouseY = e.clientY;
  113.       createRainDrop(mouseX, mouseY);
  114.     }
  115.     function createRainDrop(x, y) {
  116.       for (var i = 0; i < drops.length; i++) {
  117.         if (drops[i].y === 0) {
  118.           drops[i].init(x, y);
  119.           return;
  120.         }
  121.       }
  122.       var o = new O();
  123.       o.init(x, y);
  124.       drops.push(o);
  125.       if (drops.length > max) {
  126.         drops.shift();
  127.       }
  128.     }
  129.     window.addEventListener("resize", resize);
  130.     window.addEventListener("mousemove", onMouseMove);
  131.     anim();
  132.   </script>
  133. </body>
  134. </html>
复制代码
十:一叶莲滑动殊效

1.效果展示


2.HTML完备代码

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>一叶莲滑动特效</title>
  5. <meta charset="UTF-8">
  6. <style>
  7.     html, body {
  8.         width: 100%;
  9.         height: 100%;
  10.         margin: 0;
  11.         padding: 0;
  12.         overflow: hidden;
  13.         cursor: none;
  14.     }
  15.     .container {
  16.         width: 100%;
  17.         height: 100%;
  18.         margin: 0;
  19.         padding: 0;
  20.         background-image: linear-gradient(to right, rgba(154, 89, 168, 0.67), rgba(255, 30, 0, 0.67), rgba(0, 255, 153, 0.67));
  21.     }
  22.     .cursor {
  23.         position: absolute;
  24.         width: 20px;
  25.         height: 20px;
  26.         background: rgba(255, 255, 255, 0.8);
  27.         border-radius: 50%;
  28.         pointer-events: none;
  29.         transform: translate(-50%, -50%);
  30.         transition: transform 0.1s, opacity 0.1s;
  31.     }
  32. </style>
  33. <script src="jquery-3.7.1.min.js"></script>
  34. </head>
  35. <body>
  36.     <div id="jsi-cherry-container" class="container"></div>
  37.     <div id="cursor" class="cursor"></div>
  38.     <script>
  39.         var RENDERER = {
  40.             cherries: [],
  41.             mouse: { x: 0, y: 0 },
  42.             init: function () {
  43.                 this.setParameters();
  44.                 this.bindEvents();
  45.                 this.animate();
  46.             },
  47.             setParameters: function () {
  48.                 this.$container = $('#jsi-cherry-container');
  49.                 this.width = this.$container.width();
  50.                 this.height = this.$container.height();
  51.                 this.context = $('<canvas />').attr({ width: this.width, height: this.height }).appendTo(this.$container).get(0).getContext('2d');
  52.                 this.$cursor = $('#cursor');
  53.             },
  54.             bindEvents: function () {
  55.                 $(document).on('mousemove', (e) => {
  56.                     this.mouse.x = e.pageX;
  57.                     this.mouse.y = e.pageY;
  58.                 });
  59.                 $(document).on('mouseout', () => {
  60.                     this.mouse.x = -100;
  61.                     this.mouse.y = -100;
  62.                 });
  63.                 window.addEventListener('resize', () => {
  64.                     this.width = this.$container.width();
  65.                     this.height = this.$container.height();
  66.                     this.context.canvas.width = this.width;
  67.                     this.context.canvas.height = this.height;
  68.                 });
  69.             },
  70.             createCherry: function (x, y) {
  71.                 var cherry = new CHERRY_BLOSSOM(this, x, y);
  72.                 this.cherries.push(cherry);
  73.             },
  74.             animate: function () {
  75.                 requestAnimationFrame(this.animate.bind(this));
  76.                 this.context.clearRect(0, 0, this.width, this.height);
  77.                 this.cherries.forEach((cherry, index) => {
  78.                     cherry.update();
  79.                     cherry.render(this.context);
  80.                     if (cherry.opacity <= 0) {
  81.                         this.cherries.splice(index, 1);
  82.                     }
  83.                 });
  84.                 this.$cursor.css({
  85.                     left: this.mouse.x,
  86.                     top: this.mouse.y,
  87.                     opacity: this.cherries.length > 0 ? 0 : 1
  88.                 });
  89.             }
  90.         };
  91.         var CHERRY_BLOSSOM = function (renderer, x, y) {
  92.             this.renderer = renderer;
  93.             this.x = x;
  94.             this.y = y;
  95.             this.size = Math.random() * 10 + 10;
  96.             this.angle = Math.random() * Math.PI * 2;
  97.             this.speed = Math.random() * 0.5 + 0.5;
  98.             this.opacity = 1;
  99.             this.life = 100 + Math.random() * 100;
  100.         };
  101.         CHERRY_BLOSSOM.prototype = {
  102.             update: function () {
  103.                 this.x += Math.cos(this.angle) * this.speed;
  104.                 this.y += Math.sin(this.angle) * this.speed;
  105.                 this.opacity -= 0.02;
  106.                 this.size *= 0.98;
  107.                 this.life--;
  108.             },
  109.             render: function (context) {
  110.                 context.save();
  111.                 context.globalAlpha = this.opacity;
  112.                 context.fillStyle = 'hsl(330, 70%, 50%)';
  113.                 context.translate(this.x, this.y);
  114.                 context.scale(this.size / 20, this.size / 20);
  115.                 context.beginPath();
  116.                 context.moveTo(0, 40);
  117.                 context.bezierCurveTo(-60, 20, -10, -60, 0, -20);
  118.                 context.bezierCurveTo(10, -60, 60, 20, 0, 40);
  119.                 context.fill();
  120.                 context.restore();
  121.             }
  122.         };
  123.         $(function () {
  124.             RENDERER.init();
  125.             setInterval(() => {
  126.                 RENDERER.createCherry(RENDERER.mouse.x, RENDERER.mouse.y);
  127.             }, 50);
  128.         });
  129.     </script>
  130. </body>
  131. </html>
复制代码
十一:彩球配景滑动交互殊效

1.效果展示


2.HTML完备代码

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>彩球背景滑动交互特效</title>
  5. <meta charset="UTF-8">
  6. <style>
  7.     html, body {
  8.         width: 100%;
  9.         height: 100%;
  10.         margin: 0;
  11.         padding: 0;
  12.         overflow: hidden;
  13.         cursor: none;
  14.     }
  15.     .container {
  16.         width: 100%;
  17.         height: 100%;
  18.         background-image: linear-gradient(to right, rgba(154, 89, 168, 0.67), rgba(255, 30, 0, 0.67), rgba(0, 255, 153, 0.67));
  19.     }
  20.     .cursor {
  21.         position: absolute;
  22.         width: 20px;
  23.         height: 20px;
  24.         border-radius: 50%;
  25.         background: rgba(255, 255, 255, 0.7);
  26.         box-shadow: 0 0 10px rgba(255, 255, 255, 0.9);
  27.         pointer-events: none;
  28.         z-index: 1000;
  29.     }
  30. </style>
  31. <script type="text/javascript" src="jquery-3.7.1.min.js"></script>
  32. </head>
  33. <body>
  34. <div id="jsi-cherry-container" class="container"></div>
  35. <div id="cursor" class="cursor"></div>
  36. <script>
  37.     var RENDERER = {
  38.         INIT_CHERRY_BLOSSOM_COUNT: 50,
  39.         MAX_ADDING_INTERVAL: 10,
  40.         cherries: [],
  41.         mouse: { x: 0, y: 0 },
  42.         init: function () {
  43.             this.setParameters();
  44.             this.reconstructMethods();
  45.             this.createCherries();
  46.             this.bindEvents();
  47.             this.render();
  48.         },
  49.         setParameters: function () {
  50.             this.$container = $('#jsi-cherry-container');
  51.             this.width = this.$container.width();
  52.             this.height = this.$container.height();
  53.             this.context = $('<canvas />').attr({ width: this.width, height: this.height }).appendTo(this.$container).get(0).getContext('2d');
  54.             this.maxAddingInterval = Math.round(this.MAX_ADDING_INTERVAL * 1000 / this.width);
  55.             this.addingInterval = this.maxAddingInterval;
  56.         },
  57.         reconstructMethods: function () {
  58.             this.render = this.render.bind(this);
  59.             this.onMouseMove = this.onMouseMove.bind(this);
  60.         },
  61.         bindEvents: function () {
  62.             $(window).on('mousemove', this.onMouseMove);
  63.         },
  64.         createCherries: function () {
  65.             for (var i = 0, length = Math.round(this.INIT_CHERRY_BLOSSOM_COUNT * this.width / 1000); i < length; i++) {
  66.                 this.cherries.push(new CHERRY_BLOSSOM(this));
  67.             }
  68.         },
  69.         onMouseMove: function (e) {
  70.             this.mouse.x = e.pageX;
  71.             this.mouse.y = e.pageY;
  72.         },
  73.         render: function () {
  74.             requestAnimationFrame(this.render);
  75.             this.context.clearRect(0, 0, this.width, this.height);
  76.             $('#cursor').css({ left: this.mouse.x - 10 + 'px', top: this.mouse.y - 10 + 'px' });
  77.             this.cherries.sort(function (cherry1, cherry2) {
  78.                 return cherry1.z - cherry2.z;
  79.             });
  80.             for (var i = this.cherries.length - 1; i >= 0; i--) {
  81.                 if (!this.cherries[i].render(this.context, this.mouse)) {
  82.                     this.cherries.splice(i, 1);
  83.                 }
  84.             }
  85.             if (--this.addingInterval == 0) {
  86.                 this.addingInterval = this.maxAddingInterval;
  87.                 this.cherries.push(new CHERRY_BLOSSOM(this));
  88.             }
  89.         }
  90.     };
  91.     var CHERRY_BLOSSOM = function (renderer) {
  92.         this.renderer = renderer;
  93.         this.init();
  94.     };
  95.     CHERRY_BLOSSOM.prototype = {
  96.         FOCUS_POSITION: 300,
  97.         FAR_LIMIT: 600,
  98.         init: function () {
  99.             this.x = this.getRandomValue(-this.renderer.width, this.renderer.width);
  100.             this.y = this.getRandomValue(0, this.renderer.height);
  101.             this.z = this.getRandomValue(0, this.FAR_LIMIT);
  102.             this.vx = this.getRandomValue(-1, 1);
  103.             this.vy = this.getRandomValue(-1, 1);
  104.             this.theta = this.getRandomValue(0, Math.PI * 2);
  105.             this.phi = this.getRandomValue(0, Math.PI * 2);
  106.             this.size = this.getRandomValue(2, 5);
  107.             this.color = 'hsl(' + Math.floor(Math.random() * 360) + ', 100%, 50%)';
  108.         },
  109.         getRandomValue: function (min, max) {
  110.             return min + (max - min) * Math.random();
  111.         },
  112.         getAxis: function (mouse) {
  113.             var rate = this.FOCUS_POSITION / (this.z + this.FOCUS_POSITION),
  114.                 x = this.renderer.width / 2 + (this.x - mouse.x) * rate,
  115.                 y = this.renderer.height / 2 - (this.y - mouse.y) * rate;
  116.             return { rate: rate, x: x, y: y };
  117.         },
  118.         render: function (context, mouse) {
  119.             var axis = this.getAxis(mouse);
  120.             context.save();
  121.             context.fillStyle = this.color;
  122.             context.translate(axis.x, axis.y);
  123.             context.rotate(this.theta);
  124.             context.scale(axis.rate * this.size, axis.rate * this.size);
  125.             context.beginPath();
  126.             context.moveTo(0, 0);
  127.             context.arc(0, 0, 10, 0, Math.PI * 2, false);
  128.             context.fill();
  129.             context.restore();
  130.             this.x += this.vx;
  131.             this.y += this.vy;
  132.             this.theta += 0.01;
  133.             return this.z > -this.FOCUS_POSITION && this.z < this.FAR_LIMIT && this.x < this.renderer.width * 1.5 && this.x > -this.renderer.width * 0.5;
  134.         }
  135.     };
  136.     $(function () {
  137.         RENDERER.init();
  138.     });
  139. </script>
  140. </body>
  141. </html>
复制代码
十二:雨滴散落交互殊效

1.效果展示


2.HTML完备代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>雨滴散落特效</title>
  5.   <meta name="Generator" content="EditPlus">
  6.   <meta charset="UTF-8">
  7.   <style>
  8.     body, html {
  9.       width: 100%;
  10.       height: 100%;
  11.       margin: 0;
  12.       padding: 0;
  13.       overflow: hidden;
  14.     }
  15.     canvas {
  16.       position: absolute;
  17.       left: 0;
  18.       top: 0;
  19.       width: 100%;
  20.       height: 100%;
  21.     }
  22.   </style>
  23. </head>
  24. <body>
  25.   <canvas id="canvas-club"></canvas>
  26.   <div class="overlay"></div>
  27.   <script>
  28.     var c = document.getElementById("canvas-club");
  29.     var ctx = c.getContext("2d");
  30.     var w = c.width = window.innerWidth;
  31.     var h = c.height = window.innerHeight;
  32.     var clearColor = 'rgba(0, 0, 0, .1)';
  33.     var max = 30;
  34.     var drops = [];
  35.     var mouseX = 0;
  36.     var mouseY = 0;
  37.     function random(min, max) {
  38.       return Math.random() * (max - min) + min;
  39.     }
  40.     function O() {}
  41.     O.prototype = {
  42.       init: function(x, y) {
  43.         this.x = x;
  44.         this.y = y;
  45.         this.color = 'hsl(180, 100%, 50%)';
  46.         this.w = 2;
  47.         this.h = 1;
  48.         this.vy = random(4, 5);
  49.         this.vw = 3;
  50.         this.vh = 1;
  51.         this.size = 2;
  52.         this.hit = random(h * .8, h * .9);
  53.         this.a = 1;
  54.         this.va = .96;
  55.       },
  56.       draw: function() {
  57.         if (this.y > this.hit) {
  58.           ctx.beginPath();
  59.           ctx.moveTo(this.x, this.y - this.h / 2);
  60.           ctx.bezierCurveTo(
  61.             this.x + this.w / 2, this.y - this.h / 2,
  62.             this.x + this.w / 2, this.y + this.h / 2,
  63.             this.x, this.y + this.h / 2);
  64.           ctx.bezierCurveTo(
  65.             this.x - this.w / 2, this.y + this.h / 2,
  66.             this.x - this.w / 2, this.y - this.h / 2,
  67.             this.x, this.y - this.h / 2);
  68.           ctx.strokeStyle = 'hsla(180, 100%, 50%, ' + this.a + ')';
  69.           ctx.stroke();
  70.           ctx.closePath();
  71.         } else {
  72.           ctx.fillStyle = this.color;
  73.           ctx.fillRect(this.x, this.y, this.size, this.size * 5);
  74.         }
  75.         this.update();
  76.       },
  77.       update: function() {
  78.         if (this.y < this.hit) {
  79.           this.y += this.vy;
  80.         } else {
  81.           if (this.a > .03) {
  82.             this.w += this.vw;
  83.             this.h += this.vh;
  84.             if (this.w > 100) {
  85.               this.a *= this.va;
  86.               this.vw *= .98;
  87.               this.vh *= .98;
  88.             }
  89.           } else {
  90.             this.init(random(0, w), 0);
  91.           }
  92.         }
  93.       }
  94.     }
  95.     function resize() {
  96.       w = c.width = window.innerWidth;
  97.       h = c.height = window.innerHeight;
  98.     }
  99.     function anim() {
  100.       ctx.fillStyle = clearColor;
  101.       ctx.fillRect(0, 0, w, h);
  102.       for (var i in drops) {
  103.         drops[i].draw();
  104.       }
  105.       requestAnimationFrame(anim);
  106.     }
  107.     function onMouseMove(e) {
  108.       mouseX = e.clientX;
  109.       mouseY = e.clientY;
  110.       createRainDrop(mouseX, mouseY);
  111.     }
  112.     function createRainDrop(x, y) {
  113.       for (var i = 0; i < drops.length; i++) {
  114.         if (drops[i].y === 0) {
  115.           drops[i].init(x, y);
  116.           return;
  117.         }
  118.       }
  119.       var o = new O();
  120.       o.init(x, y);
  121.       drops.push(o);
  122.       if (drops.length > max) {
  123.         drops.shift();
  124.       }
  125.     }
  126.     window.addEventListener("resize", resize);
  127.     window.addEventListener("mousemove", onMouseMove);
  128.     anim();
  129.   </script>
  130. </body>
  131. </html>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表