VUE:实现随鼠标移动旋转的3D卡片
一、效果展示
二、实现原理
1.通过 @mousemove获取鼠标位置,再计算应有的旋转角度
2.通过perspective() rotateY() rotateX()实现旋转
三、代码展示
<template>
<div class="page">
<div
class="card"
@mousemove="handleMouseMove($event)"
@mouseleave="handleMouseLeave($event)"
ref="cardRef"
>
<div class="box1">{{ position.x }},{{ position.y }}</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, reactive } from "vue";
const cardRef = ref();
const position = reactive({ x: 0, y: 0 });
const handleMouseMove = (e: any) => {
position.x = e.offsetX;
position.y = e.offsetY;
let roX = position.x / 9 - 15;
let roY = -((position.y / 230) * 14 - 7);
cardRef.value.style.transform = `perspective(400px) rotateY(${roX}deg) rotateX(${roY}deg)`;
};
const handleMouseLeave = (e: any) => {
setTimeout(() => {
cardRef.value.style.transform =
" perspective(400px) rotateY(0deg) rotateX(0deg)";
}, 100);
};
</script>
<style scoped lang="less">
.card {
width: 270px;
height: 400px;
background-color: #605656;
border-radius: 15px;
padding: 5px;
background-image: url("../../assets/img/zhulin1.jpg");
background-size: 100% 100%;
background-repeat: no-repeat;
box-shadow: rgba(rgb(0, 0, 0), 0.66) 0 30px 60px 0, inset #333 0 0 0 5px,
inset rgba(rgb(255, 255, 255), 0.5) 0 0 0 6px;
}
.card:hover {
border: 2px solid #ffffff;
}
.box1 {
width: 100%;
height: 100%;
border: 1px solid #ffffff;
border-radius: 15px;
}
</style>