You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:页面光标跟随气泡的波动/脉动效果实现方案

实现跟随光标波动的气泡渐变效果

核心思路

目标页面的波动/脉动效果,本质是让径向渐变的范围(半径)做周期性缩放变化,同时保持跟随光标位置。我们可以通过CSS变量结合CSS动画,或JS动态计算波动值实现,比单纯静态渐变多了「动态缩放」的维度。

改造后的完整实现代码

基于你的现有代码修改,同时保留光标跟随与脉动效果:

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='radial-gradient'></div>

CSS

body{
  background-color: black;
  margin: 0;
}
.radial-gradient {
  position:fixed;
  top:0;
  left:0;
  height:100%;
  width:100%;
  background: #202020;
  /* 用CSS变量存储光标位置和波动半径 */
  background: radial-gradient(
    var(--pulse-size) at var(--mouse-x) var(--mouse-y), 
    rgba(52, 152, 219, 0.8), 
    transparent 70%, 
    #202020
  );
  /* 平滑过渡,让光标移动和波动更自然 */
  transition: background 0.1s ease-out;
}
/* 脉动动画:通过修改变量实现半径缩放 */
@keyframes pulse {
  0%, 100% { --pulse-size: 15vmax; }
  50% { --pulse-size: 25vmax; }
}
.radial-gradient {
  animation: pulse 2s ease-in-out infinite;
}

JavaScript

$(document).mousemove(function(event) {
  const windowWidth = $(window).width();
  const windowHeight = $(window).height();
  
  // 保留小数让光标移动更平滑
  const mouseXpercentage = (event.pageX / windowWidth * 100).toFixed(2);
  const mouseYpercentage = (event.pageY / windowHeight * 100).toFixed(2);
  
  // 更新CSS变量控制渐变位置
  $('.radial-gradient').css({
    '--mouse-x': `${mouseXpercentage}%`,
    '--mouse-y': `${mouseYpercentage}%`
  });
});

关键细节解释

  • CSS变量拆分控制:把光标位置和渐变半径抽为独立变量,让JS负责控制位置、CSS负责动画逻辑,代码更易维护。
  • 脉动动画逻辑:通过@keyframes循环修改--pulse-size,让渐变半径在15vmax到25vmax之间缩放;vmax单位自适应窗口大小,保证不同设备效果一致。
  • 平滑过渡处理:给background属性加过渡效果,避免光标移动时渐变位置跳变。
  • 颜色层次优化:增加透明过渡层,让气泡边缘更柔和,贴近目标页面的视觉效果。

进阶弹性跟随优化(可选)

如果想要更贴近原页面的「弹性滞后」效果,可以给光标位置加缓动计算:

// 初始化缓动变量
let targetX = 50, targetY = 50;
let currentX = 50, currentY = 50;

$(document).mousemove(function(event) {
  const windowWidth = $(window).width();
  const windowHeight = $(window).height();
  targetX = (event.pageX / windowWidth * 100);
  targetY = (event.pageY / windowHeight * 100);
});

// 用requestAnimationFrame实现平滑缓动
function updatePosition() {
  // 缓动系数,越小越平滑
  const easeFactor = 0.1;
  currentX += (targetX - currentX) * easeFactor;
  currentY += (targetY - currentY) * easeFactor;
  
  $('.radial-gradient').css({
    '--mouse-x': `${currentX.toFixed(2)}%`,
    '--mouse-y': `${currentY.toFixed(2)}%`
  });
  requestAnimationFrame(updatePosition);
}
updatePosition();

内容的提问来源于stack exchange,提问作者Alotofproblemshere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:46:08