我在vue项目中要怎么做,才可以让一张图片拥有跟我鼠标的视差效果
时间: 2024-03-03 07:47:54 浏览: 71
在 Vue 项目中实现视差效果,可以使用 CSS 属性 `transform` 和 `mousemove` 事件来实现。具体步骤如下:
1. 在 Vue 组件中添加一张图片,并设置其样式为 `position: absolute`,并且设置其初始位置。
2. 在组件的 `mounted()` 钩子函数中,使用 `addEventListener()` 方法监听 `mousemove` 事件。
3. 在 `mousemove` 事件处理函数中,获取鼠标的位置,并将其转化为图片要移动的距离。
4. 使用 CSS3 中的 `transform` 属性,将图片以 `translateX()` 和 `translateY()` 的方式进行平移,并设置平移的距离为鼠标位置的一部分,以实现视差效果。
下面是示例代码:
```html
<template>
<div class="parallax">
<img class="parallax__img" src="./your-image.jpg" alt="Your Image">
</div>
</template>
<script>
export default {
mounted() {
this.parallax();
},
methods: {
parallax() {
const parallaxImg = document.querySelector('.parallax__img');
const parallax = document.querySelector('.parallax');
const moveParallaxImg = (e) => {
const mouseX = e.clientX;
const mouseY = e.clientY;
const offsetX = -((mouseX / parallax.offsetWidth) * 20);
const offsetY = -((mouseY / parallax.offsetHeight) * 20);
parallaxImg.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
};
parallax.addEventListener('mousemove', moveParallaxImg);
}
}
};
</script>
<style scoped>
.parallax {
position: relative;
width: 100%;
height: 100%;
}
.parallax__img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform: translate(0, 0);
transition: transform .3s ease-out;
}
</style>
```
在上面的代码中,我设置了图片最大移动距离为 `20px`,你可以根据你的需要调整这个值。同时,注意要将 `mousemove` 事件处理函数绑定到组件的实例上,以保证在组件销毁时可以正确地解绑事件。
阅读全文