千家信息网

vue3如何封装放大镜组件

发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,这篇文章将为大家详细讲解有关vue3如何封装放大镜组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。组件基础结构结尾有完整代码可直接复制使用目的:封装图片预览组件,
千家信息网最后更新 2024年09月30日vue3如何封装放大镜组件

这篇文章将为大家详细讲解有关vue3如何封装放大镜组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

组件基础结构

结尾有完整代码可直接复制使用

目的:封装图片预览组件,实现鼠标悬停切换效果

落地代码:

图片放大镜

目的:实现图片放大镜功能

步骤:

  • 首先准备大图容器和遮罩容器

  • 然后使用@vueuse/core的useMouseInElement方法获取基于元素的偏移量

  • 计算出 遮罩容器定位与大容器背景定位 暴露出数据给模板使用

落地代码:

安装vueuse

npm i @vueuse/core@5.3.0

目前5.3.0版本相对稳定

vueuse提供的监听进入指定范围方法的基本使用

import { useMouseInElement } from '@vueuse/core'const { elementX, elementY, isOutside } = useMouseInElement(target)

方法的参数target表示被监听的DOM对象;返回值elementX, elementY表示被监听的DOM的左上角的位置信息left和top;isOutside表示是否在DOM的范围内,true表示在范围之外。false表示范围内。

功能实现

setup () {// 被监听的区域const target = ref(null)// 控制遮罩层和预览图的显示和隐藏const isShow = ref(false)// 定义遮罩的坐标const position = reactive({ left: 0, top: 0})// 右侧预览大图的坐标const bgPosition = reactive({ backgroundPositionX: 0, backgroundPositionY: 0})return { position, bgPosition, target, isShow }}
const { elementX, elementY, isOutside } = useMouseInElement(target)  // 基于侦听器侦听值的变化  watch([elementX, elementY, isOutside], () => {    // 通过标志位控制显示和隐藏    isShow.value = !isOutside.value    if (isOutside.value) return    // X方向坐标范围控制    if (elementX.value < 100) {      // 左侧      position.left = 0    } else if (elementX.value > 300) {      // 右侧      position.left = 200    } else {      // 中间      position.left = elementX.value - 100    }    // Y方向坐标范围控制    if (elementY.value < 100) {      position.top = 0    } else if (elementY.value > 300) {      position.top = 200    } else {      position.top = elementY.value - 100    }    // 计算预览大图的移动的距离    bgPosition.backgroundPositionX = -position.left * 2 + 'px'    bgPosition.backgroundPositionY = -position.top * 2 + 'px'    // 计算遮罩层的位置    position.left = position.left + 'px'    position.top = position.top + 'px'  })

完整代码

关于"vue3如何封装放大镜组件"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0