组件基础结构
结尾有完整代码可直接复制使用
- 目的:封装图片预览组件,实现鼠标悬停切换效果
-
落地代码:
<template> <div class="goods-image"> <div class="middle"> <img :src="images[currIndex]" alt=""> </div> <ul class="small"> <li v-for="(img,i) in images" :key="img" :class="{active:i===currIndex}"> <img @mouseenter="currIndex=i" :src="img" alt=""> </li> </ul> </div> </template> <script> import { ref } from 'vue' export default { name: 'GoodsImage', props: { images: { type: Array, default: () => [] } }, setup (props) { const currIndex = ref(0) return { currIndex } } } </script> <style scoped lang="less"> .goods-image { width: 480px; height: 400px; position: relative; display: flex; .middle { width: 400px; height: 400px; background: #f5f5f5; } .small { width: 80px; li { width: 68px; height: 68px; margin-left: 12px; margin-bottom: 15px; cursor: pointer; &:hover,&.active { border: 2px solid @xtxColor; } } } } </style>
图片放大镜
- 目的:实现图片放大镜功能
-
步骤:
- 首先准备大图容器和遮罩容器
- 然后使用
@vueuse/core
的useMouseInElement
方法获取基于元素的偏移量 - 计算出 遮罩容器定位与大容