JavaScript实现鼠标移动粒子跟随效果

yizhihongxing

下面是讲解“JavaScript实现鼠标移动粒子跟随效果”的完整攻略。

确定目标

首先我们需要明确我们的目标:实现鼠标移动时页面上的粒子跟随鼠标移动。这种效果会增加页面的趣味性和互动性,让用户更有参与感。

分析思路

实现鼠标移动粒子跟随效果,需要做以下几个步骤:

  1. 创建画布和粒子;
  2. 监听鼠标移动事件;
  3. 计算鼠标和粒子之间的距离和角度;
  4. 将粒子移动到鼠标所在位置;
  5. 可以增加随机颜色、大小、形状以及透明度等额外属性;

代码实现

下面是一个简单的实现示例:

<canvas id="canvas"></canvas>

<script>
    // 获取画布和画笔
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');

    // 设置画布尺寸和颜色
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    context.fillStyle = '#000';
    context.fillRect(0, 0, canvas.width, canvas.height);

    // 定义粒子
    var particles = [];
    var particleCount = 100;

    for (var i = 0; i < particleCount; i++) {
        // 初始化随机粒子
        particles.push({
            x: Math.random() * canvas.width,
            y: Math.random() * canvas.height,
            size: Math.random() * 5 + 1,
            speedX: Math.random() * 5 - 2.5,
            speedY: Math.random() * 5 - 2.5,
            color: '#' + Math.random().toString(16).slice(2, 8),
            angle: Math.random() * 360
        });
    }

    // 监听鼠标移动事件
    canvas.addEventListener('mousemove', function (event) {
        // 更新所有粒子
        particles.forEach(function (particle) {
            // 计算鼠标和粒子之间的距离和角度
            var dx = event.clientX - particle.x;
            var dy = event.clientY - particle.y;
            particle.angle = Math.atan2(dy, dx);
            var distance = Math.sqrt(dx * dx + dy * dy);

            // 将粒子移动到鼠标所在位置
            if (distance < 100) {
                particle.speedX = Math.cos(particle.angle) * 5;
                particle.speedY = Math.sin(particle.angle) * 5;
            } else {
                particle.speedX += particle.speedX / 20;
                particle.speedY += particle.speedY / 20;
            }

            particle.x += particle.speedX;
            particle.y += particle.speedY;

            // 粒子到达画布边缘时反弹
            if (particle.x < 0) {
                particle.x = canvas.width;
            } else if (particle.x > canvas.width) {
                particle.x = 0;
            }

            if (particle.y < 0) {
                particle.y = canvas.height;
            } else if (particle.y > canvas.height) {
                particle.y = 0;
            }
        });

        // 清除画布并绘制所有粒子
        context.fillStyle = '#000';
        context.fillRect(0, 0, canvas.width, canvas.height);
        particles.forEach(function (particle) {
            context.beginPath();
            context.fillStyle = particle.color;
            context.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
            context.fill();
        });
    });
</script>

在这个实现中,我们首先创建了一个画布和粒子数组。接着在初始化每一个随机粒子时,我们随机化了粒子的位置、大小、颜色、速度和角度。然后我们监听了鼠标移动事件,并在事件回调中更新了所有粒子。

在粒子移动的过程中,我们首先计算了鼠标和粒子之间的距离和角度,然后根据距离的大小决定粒子的速度,最终将粒子移动到鼠标所在位置。在粒子到达画布边缘时,我们实现了反弹效果,让粒子在画布中来回运动。

其他示例

除了上面的示例,还有其他一些实现鼠标移动粒子跟随效果的示例:

  1. 实现了粒子的融合效果,让粒子在移动时能够产生更加自然的效果:https://codepen.io/rctngle/pen/VKjxJp
  2. 实现了星星跟随鼠标的效果,可以应用于多种场景:https://codepen.io/rstorms90/pen/ZjxxWz

总之,实现鼠标移动粒子跟随效果需要从基础的绘图和事件监听开始,并根据自己的需求进行个性化的改造和调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现鼠标移动粒子跟随效果 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Vue elementUI实现免密登陆与号码绑定功能

    下面是详细的Vue elementUI实现免密登陆与号码绑定功能的攻略: 简介 Vue elementUI是常用的前端框架之一,它有完善的组件库,可以方便地实现各种功能。本次攻略将讲解如何使用Vue elementUI实现免密登陆与号码绑定功能。 免密登陆功能 前提条件 需要做到以下几点: 用户在第一次使用时填写并提交了手机号码; 站点后端需要可以将用户手机…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript function函数种类

    浅谈JavaScript function函数种类 在JavaScript中,函数是一种非常重要的概念。函数就是一段代码块,可以被多次调用。JavaScript中的函数又可以分为多种类型,下面我们将详细介绍这些类型。 1. 函数声明 函数声明是最常见的函数类型。它是使用function关键字定义的一个函数。函数声明的基本语法如下: function func…

    JavaScript 2023年5月27日
    00
  • jquery根据锚点offset值实现动画切换

    想要实现根据锚点offset值实现动画切换的效果,需要经过以下步骤: 1. 监测锚点的click事件 首先,我们需要为锚点(a标签)添加click事件的监听。当用户点击锚点时,我们可以获取到被点击锚点的href属性值,即所要跳转到的锚点的标识符,例如#section1。 示例代码: $(document).on(‘click’, ‘a’, function …

    JavaScript 2023年6月10日
    00
  • javascript中break,continue和return语句用法小结

    接下来我将为你详细讲解“JavaScript中break,continue和return语句用法小结”。 1. break语句 在循环结构中,break语句可以让程序停止当前循环并跳出循环结构。在for循环和while循环中,break语句的使用方法相同。 示例1 下面的示例演示如何在for循环中使用break语句,当循环到i为2时,停止循环并跳出循环结构。…

    JavaScript 2023年5月28日
    00
  • JS逻辑运算符短路操作实例分析

    JS逻辑运算符短路操作是指在使用逻辑运算符 && 和 || 时,如果第一个条件可以决定整个表达式的结果,则不再执行后续的条件判断,直接返回结果。这样就可以通过少写一些代码和避免一些不必要的计算,提高代码的运行效率。 下面分别给出 && 和 || 的两个具体实例来说明: 逻辑运算符 && 的短路操作实例分析 le…

    JavaScript 2023年5月28日
    00
  • Qiankun Sentry 监控异常上报无法自动区分项目解决

    完整攻略如下: Qiankun Sentry 监控异常上报无法自动区分项目解决 问题描述 在使用 Qiankun 进行微前端架构开发时,可能会出现 Sentry 监控异常上报无法自动区分项目的问题。具体表现为:在一个微应用抛出异常,异常信息被上报到了主应用的 Sentry 中,而无法定位到哪个微应用抛出了异常。 原因分析 这个问题的根本原因是 Sentry …

    JavaScript 2023年5月28日
    00
  • js判断是否为数组的函数: isArray()

    要判断一个变量是否为数组,我们可以使用JavaScript中的isArray()函数。以下是关于该函数的详细攻略: 语法 Array.isArray(obj) 参数 obj:必需。 检测该对象是否是数组。 返回值 如果 obj 是数组返回 true,否则返回 false。 示例一 const arr = [1, 2, 3]; console.log(Arra…

    JavaScript 2023年5月27日
    00
  • JavaScript通过Date-Mask将日期转换成字符串的方法

    当我们需要将JS中的日期对象转换成字符串时,我们可以使用Date-Mask库。下面是详细的步骤。 1. 引入Date-Mask库 首先,在HTML文件中引入Date-Mask库,可以通过以下的代码将库引入到页面中: <script src="https://cdnjs.cloudflare.com/ajax/libs/date-mask/2.…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部