首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js动态粒子鼠标吸附

基础概念

JavaScript 动态粒子鼠标吸附是一种常见的网页交互效果,它通过在页面上创建一系列的粒子(通常是圆形),并使这些粒子在鼠标移动时跟随鼠标指针,产生一种吸附的效果。这种效果通常用于增强用户体验,使网页看起来更加生动和有趣。

相关优势

  1. 增强用户体验:动态效果可以使网页更加吸引人,提升用户的互动体验。
  2. 视觉吸引力:粒子效果可以作为一种视觉焦点,引导用户的注意力。
  3. 技术展示:这种效果可以作为前端开发技能的一种展示,体现开发者的创意和技术能力。

类型

  • 简单吸附:粒子简单地跟随鼠标移动。
  • 复杂吸附:粒子根据鼠标的位置和速度有不同的行为,如改变大小、颜色或形状。
  • 交互式吸附:粒子与页面上的其他元素产生交互,如点击粒子触发特定事件。

应用场景

  • 网站首页:作为背景动画,增加视觉冲击力。
  • 登录页面:提供有趣的背景,减少用户的焦虑感。
  • 产品展示页:通过粒子效果突出产品特点。

示例代码

以下是一个简单的JavaScript和HTML5 Canvas实现的动态粒子鼠标吸附效果的示例:

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Particle Mouse Attraction</title>
<style>
  canvas {
    display: block;
    background: #000;
  }
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
  const canvas = document.getElementById('canvas');
  const ctx = canvas.getContext('2d');
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;

  class Particle {
    constructor(x, y) {
      this.x = x;
      this.y = y;
      this.size = Math.random() * 5 + 1;
      this.speedX = Math.random() * 3 - 1.5;
      this.speedY = Math.random() * 3 - 1.5;
    }

    update(mouse) {
      let dx = mouse.x - this.x;
      let dy = mouse.y - this.y;
      let distance = Math.sqrt(dx * dx + dy * dy);
      let forceDirectionX = dx / distance;
      let forceDirectionY = dy / distance;
      let maxDistance = 100;
      let force = (maxDistance - distance) / maxDistance;
      let directionX = forceDirectionX * force * 10;
      let directionY = forceDirectionY * force * 10;

      if (distance < maxDistance) {
        this.x -= directionX;
        this.y -= directionY;
      }

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

      if (this.size > 0.2) this.size -= 0.1;
    }

    draw() {
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
      ctx.fillStyle = '#fff';
      ctx.fill();
    }
  }

  let particles = [];
  let mouse = { x: undefined, y: undefined };

  window.addEventListener('mousemove', function(event) {
    mouse.x = event.x;
    mouse.y = event.y;
  });

  window.addEventListener('resize', function() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
  });

  function init() {
    for (let i = 0; i < 50; i++) {
      let x = Math.random() * canvas.width;
      let y = Math.random() * canvas.height;
      particles.push(new Particle(x, y));
    }
  }

  function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    for (let i = 0; i < particles.length; i++) {
      particles[i].update(mouse);
      particles[i].draw();
      if (particles[i].size <= 0.3) {
        particles.splice(i, 1);
        i--;
      }
    }
    requestAnimationFrame(animate);
  }

  init();
  animate();
</script>
</body>
</html>

可能遇到的问题及解决方法

问题:粒子效果在某些设备上运行缓慢或不流畅。

原因:可能是由于粒子数量过多,或者动画帧率过高导致的性能问题。

解决方法

  1. 减少粒子的数量。
  2. 使用requestAnimationFrame来优化动画性能。
  3. 在低性能设备上降低动画的复杂度。

通过上述方法,可以有效地解决粒子效果在不同设备上的性能问题,确保用户体验的一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

❤️创意网页:HTML5,canvas创作科技感粒子特效(科技感粒子、js鼠标跟随、粒子连线)

这个特效网页将会展示一个动态的、精美的粒子效果,同时会随着鼠标的移动而产生连线效果,增添一份炫酷的科技氛围。我们将使用HTML、CSS和JavaScript来实现这个效果。...动态图展示 静态图展示 图1 图2 视频展示 HTML5粒子连接 项目代码解析 HTML 结构 首先,我们来看一下HTML结构。代码中只有一个元素,这是我们用来绘制粒子特效的画布。...代码的主要功能包括: 创建粒子和连线的类。 初始化粒子数组,并在画布上绘制粒子。 根据鼠标的位置更新粒子的运动状态,并绘制粒子之间的连线。 实现动画效果,使粒子和连线随着时间不断更新。 ​...particle.draw(); } drawConnections(); requestAnimationFrame(animate); } // 监听鼠标移动事件...,根据鼠标位置更新粒子运动状态 document.addEventListener("mousemove", (e) => { const mouseX = e.clientX; const

2.1K10
  • 利用机器学习探索小粒子吸附的结构敏感关系

    Exploring Structure-Sensitive Relations for Small Species Adsorption Using Machine Learning 论文摘要 非均相催化剂表面吸附能的准确预测是预测反应活性和筛选材料的关键...广泛发展的吸附线性比例关系往往准确性不足,并且每次只适用于一种吸附物和一种结合位点类型,这削弱了他们预测结构灵敏度和最佳催化剂结构的能力。...我们揭示了化合物的价态和电子与表面的耦合以及位点类型和配位环境对小分子化合物的吸附起着至关重要的作用。该模型同时预测吸附能和首选位点,并在精度上显著优于线性尺度。...通过使用过渡金属数据训练模型,并将其转化为预测单原子合金吸附能的方法,同时验证了该方法的通用性。

    21320

    js鼠标事件

    页面加载事件(onload),鼠标双击事件(ondbclick) window.onload=function(){                 //绑定元素,执行对应事件 鼠标双击(ondblclick...(){                     alert('我是双击显示的');                 }             } 鼠标摁下(onmousedown)事件(摁下就执行,鼠标无需抬起...}             } 鼠标抬起(onmouseup)事件(摁下后,鼠标回弹才执行)             window.onload=function(){                 ...鼠标移入(onmouseover)事件             window.onload=function(){                 //绑定元素,执行鼠标移入事件   鼠标移入(onmousemove...){                     alert('鼠标移出操作');                 }             } PS:鼠标移动(onmousemove)和鼠标移入(onmouseover

    18.3K40

    Python实现粒子系统效果:创建动态粒子动画

    引言 粒子系统是一种常见的图形学技术,被广泛应用于模拟烟雾、火焰、雨雪等自然现象。在这篇博客中,我们将使用Python创建一个动态的粒子系统效果。...通过利用Pygame库,我们可以实现一个具有视觉吸引力的粒子动画。 准备工作 前置条件 在开始之前,你需要确保你的系统已经安装了Pygame库。...") clock = pygame.time.Clock() 定义粒子类 我们创建一个Particle类来定义粒子的属性和行为: class Particle: def __init__(self...(Particle(x, y)) 主循环 我们在主循环中更新粒子的状态并绘制: running = True while running: for event in pygame.event.get...") clock = pygame.time.Clock() # 粒子类定义 class Particle: def __init__(self, x, y): self.x

    33910

    js 鼠标事件总结

    当监听鼠标事件时,会触发一些事件,我们可以与之交互: mousedown 按下鼠标按钮触发 mouseup 鼠标按钮被释放 click 点击事件 dblclick 双击事件 mousemove 当鼠标移动到元素上时...,鼠标移动 mouseover 当鼠标移动到一个元素或它的一个子元素上时,鼠标悬停。...mouseenter 当鼠标移动到一个元素上时,鼠标进入。类似于mouseover但不冒泡。 mouseout 当鼠标移出元素时,以及当鼠标进入子元素时。...mouseleave 当鼠标移出一个元素时,mouseleave。类似于mouseout但不冒泡。 contextmenu 快捷菜单当快捷菜单打开时,例如用鼠标右键点击 事件重叠。...buttons 按钮(如果有),表示在任何鼠标事件上按下的按钮的数字。 clientX / clientY 无论是否滚动,鼠标指针相对于浏览器窗口的x和y坐标。

    9.2K40

    模拟风粒子效果(​Windy-js )

    我使用 JavaScript 编写了一个脚本,模拟风的粒子效果。这个脚本不仅能够展示风的流动,还可以通过风向和风力参数来改变粒子的运动方向和速度。...1、定义画布 2、引用脚本 js/windy-js.js"> 3、使用 // 测试,更改这些值以调整风向和强度...可以根据天气预报接口,动态改变 windyanimate(windAngle, windStrength)方法的参数,模拟真实风场效果。...你可以自由调整风向和风力参数,观察粒子随之产生的变化。如果你在自己的项目中需要实现类似的功能,不妨尝试一下这个脚本。...详细代码和使用说明,请访问我的GitHub仓库:https://github.com/fiyo/windy-js。 希望这个工具能对你的项目有所帮助!

    45700

    Python教程之粒子运动轨迹动态绘图

    今天我们来讲一下Python中的动态绘图库--matplotlib.animation,以粒子运动轨迹为例来说明如何绘制动态图。   假设按照圆周运动,如下图所示: ?...image-20200829214510346 为了模拟这个运动,我们需要如下信息:粒子的起始位置、速度和旋转方向。因此定义一个通用的Particle类,用于存储粒子的位置及角速度。..._(self, x, y, ang_vel): self.x = x self.y = y self.ang_vel = ang_vel   对于特定粒子...我们可以这样近似计算圆周轨迹:将时间段t分成一系列很小的时间段dt,在这些很小的时段内,粒子沿圆周的切线移动。这样就近似模拟了圆周运动。...粒子运动方向可以按照下面的公式计算: v_x = -y / (x **2 + y **2) ** 0.5 v_y = x / (x **2 + y **2) ** 0.5   计算经过时间t后的粒子位置

    2.5K30
    领券