项目中图片放大镜效果(Vue3的写法)

2023-11-21 10:30

本文主要是介绍项目中图片放大镜效果(Vue3的写法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果

代码落地

<template><div class="goods-image"><!-- 大图容器 --><divclass="large":style="[{backgroundImage: `url(${imageList[curId]})`,backgroundPositionX: position.backgroundPositionX,backgroundPositionY: position.backgroundPositionY,},]"v-if="isShow"></div><div class="middle" ref="target"><img :src="imageList[curId]" alt="" /><!-- 蒙层容器 --><div class="layer" :style="{ left: left + 'px', top: top + 'px' }" v-if="isShow"></div></div><ul class="small"><liv-for="(img, i) in imageList":key="i"@mouseenter="curId = i":class="{ active: curId === i }"><img :src="img" alt="" /></li></ul></div>
</template><script>
import { reactive, ref, watch } from 'vue'
import { useMouseInElement } from '@vueuse/core'
export default {name: 'GoodsImage',props: {imageList: {type: Array,default: () => {return []}}},setup () {const curId = ref(0)const target = ref(null)// elementX: 鼠标距离左侧的偏移值// elementY:表表距离顶部的偏移值// isOutside: 是否在容器外部  外部true  内部 falseconst { elementX, elementY, isOutside } = useMouseInElement(target)const left = ref(0) // 滑块距离左侧的距离const top = ref(0) // 滑块距离顶部的距离const isShow = ref(false) // 显示大图和蒙层图的显示和隐藏const position = reactive({ // 大图显示的位置,默认是0backgroundPositionX: 0,backgroundPositionY: 0})watch(// 监听的对象[elementX, elementY, isOutside],() => {if (elementX.value < 100) {// 左侧最小距离left.value = 0}if (elementX.value > 300) {left.value = 200}if (elementX.value > 100 && elementX.value < 300) {left.value = elementX.value - 100}if (elementY.value < 100) {// 左侧最小距离top.value = 0}if (elementY.value > 300) {top.value = 200}if (elementY.value > 100 && elementY.value < 300) {top.value = elementY.value - 100}// 控制背景图移动// 1. 蒙层移动的方向和大图背景移动的方向是相反的// 2. 蒙层和大图由于面积大小是1:2的 蒙层每移动一个像素  大图移动俩个像素// backgrondPosition:x,y;position.backgroundPositionX = -left.value * 2 + 'px'position.backgroundPositionY = -top.value * 2 + 'px'// 当isOutside的值发生变化的时候,立刻取反赋值给isShow// isOutside: 是否在容器外部  外部true  内部 falseisShow.value = !isOutside.value},{})return {curId,target,left,top,position,isShow}}
}
</script>

 

这篇关于项目中图片放大镜效果(Vue3的写法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401757

相关文章

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex