项目中图片放大镜效果(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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W