【功能实现】bilibili顶部鼠标跟随效果怎么实现?

我们在电脑端打开b站首页时,总会被顶部【鼠标跟随】的效果所吸引,那他是如何实现的,来研究一下。

b站效果:

分析:

1.监听鼠标的位置,当悬浮到该模块时,图片会随鼠标移动

2.引入图片的样式是动态的,会随鼠标移动而改变

实验:

1.准备好基本图片

背景也添加一个图片

javascript 复制代码
<div class="banner" >
        <img src="../assets/images/nav/castalia.png" alt="Background">
      <img  src="../assets/images/cat.png" alt="Background">
</div>
javascript 复制代码
.banner {
     margin: auto;
      width: 120%;
      height: 400px;
      border-radius: 8px;
      background: url(@/assets/images/backimage4.jpeg) no-repeat;
      background-size: cover;
    }

2.实现监听鼠标位置

引入三个方法,分别监听鼠标移动时的状态

javascript 复制代码
<div class="banner" 
 @mousemove="onMouseMove">

</div>

3.鼠标移动时改变样式

分别为背景和两张图片添加绑定样式

javascript 复制代码
<div class="banner" :style="textStyle" 
 @mousemove="onMouseMove" >
 <img :style="pngStyle1" src="../assets/images/nav/castalia.png" alt="Background">
 <img :style="textStyle" src="../assets/images/cat.png" alt="Background">
 
 </div>

设定样式初始值

javascript 复制代码
const startX = ref(0);
const currentX = ref(0);
const pngStyle = ref({
  transition: 'transform 0.3s',
  transform: 'translate(0px, 0px)',
});
const pngStyle1 = ref({
  transition: 'transform 0.2s',
  transform: 'translate(0px, 0px)',
});
const textStyle = ref({
  transition: 'transform 0.1s',
  transform: 'translate(0px, 0px)',
});

设定方法:

javascript 复制代码
 
const onMouseMove = (event) => {
   currentX.value = event.clientX;//鼠标事件发生时,鼠标指针相对于浏览器窗口的 X 坐标
  const disx = currentX.value - startX.value;//计算鼠标从开始位置到当前位置的水平距离。
  const move = disx / 18;//设定图片应该移动的距离
  const move1 = -disx / 18;
  const move2 = -disx / 14;
  pngStyle.value.transform = `translate(${move}px, 0px)`;
  pngStyle1.value.transform = `translate(${move}px, 0px)`;
  textStyle.value.transform = `translate(${move1}px, 0px)`;
};
 

这样一个基本效果就完成了,可以根据自己想要的效果增加图片,调解移动的距离,移动的方向等。

大家加油!!!

相关推荐
Moment4 分钟前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
xkxnq8 分钟前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
晓得迷路了10 分钟前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
怕浪猫12 分钟前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++13 分钟前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
鹏多多19 分钟前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
哈__22 分钟前
React Native 鸿蒙跨平台开发:Vibration 实现鸿蒙端设备的震动反馈
javascript·react native·react.js
WebGISer_白茶乌龙桃24 分钟前
Cesium实现“悬浮岛”式,三维立体的行政区划
javascript·vue.js·3d·web3·html5·webgl
小Tomkk27 分钟前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
不一样的少年_31 分钟前
产品催: 1 天优化 Vue 官网 SEO?我用这个插件半天搞定(不重构 Nuxt)
前端·javascript·vue.js