vue3封装放大镜组件的实例代码

组件基础结构

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

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

vue3封装放大镜组件的实例代码_第1张图片

落地代码:




图片放大镜

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

vue3封装放大镜组件的实例代码_第2张图片

步骤:

  • 首先准备大图容器和遮罩容器
  • 然后使用@vueuse/core的useMouseInElement方法获取基于元素的偏移量
  • 计算出 遮罩容器定位与大容器背景定位  暴露出数据给模板使用

落地代码:




安装vueuse

npm i @vueuse/[email protected]

目前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封装放大镜组件的文章就介绍到这了,更多相关vue3封装放大镜组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(vue3封装放大镜组件的实例代码)