Vue3---放大镜的实现

news/2024/7/3 13:55:19

1. 通过小图切换大图实现:

思路:维护一个数组图片列表, 鼠标划入小图记录当前小图下标值,通过下标值
在数组中取对应图片 ,显示到大图位置
2. 放大镜效果实现------滑块跟随鼠标移动
useMouseInElement | VueUse
思路: 获取到当前的 鼠标在盒子内的相对位置 vueUse提供的 useMouseInElement ),
制滑块跟随鼠标移动(left/top)
1. 有效移动范围内的计算逻辑
横向:100 < elementX < 300, left = elementX - 小滑块宽度一半
纵向: 100 < elementY < 300, top = elementY - 小滑块高度一半
2. 边界距离控制
横向:elementX > 300 left = 200 elementX < 100 left = 0
纵向:elementY > 300 top = 200 elementY < 100 top = 0
3. 放大镜效果实现 - 大图效果实现
思路:大图的移动方向和滑块移动方向相反,且数值为2倍
4. 放大镜效果实现 - 鼠标移入控制显隐
思路:鼠标移入盒子(isOutside),滑块和大图才显示(v-show)
<script setup>
import {ref, watch} from "vue";
import {useMouseInElement} from '@vueuse/core'

// 图片列表
const imageList = [
    "https://yanxuan-item.nosdn.127.net/d917c92e663c5ed0bb577c7ded73e4ec.png",
    "https://yanxuan-item.nosdn.127.net/e801b9572f0b0c02a52952b01adab967.jpg",
    "https://yanxuan-item.nosdn.127.net/b52c447ad472d51adbdde1a83f550ac2.jpg",
    "https://yanxuan-item.nosdn.127.net/f93243224dc37674dfca5874fe089c60.jpg",
    "https://yanxuan-item.nosdn.127.net/f881cfe7de9a576aaeea6ee0d1d24823.jpg"
]

// 小图切换大图显示
const activeindex = ref(0)
const enterhandler = (i) => {
    activeindex.value = i
}

// 获取鼠标相对位置
const target = ref(null)
const {elementX, elementY, isOutside} = useMouseInElement(target)

// 控制滑块跟踪数百哦移动(监听elementX/Y变化,一旦变化,重新设置left/top)
const left = ref(0)
const top = ref(0)
const positionX = ref(0)
const positionY = ref(0)
watch([elementX, elementY], () => {
    console.log('xy变化了')
    
    //如果鼠标没有在盒子里面,直接不执行后面的逻辑
    if(isOutside.value) return
    // console.log('后续逻辑执行了')
    
    // 有效范围内控制滑块距离
    // 横向
    if (elementX.value > 100 && elementX.value < 300) {
        left.value = elementX.value - 100
    }
    // 纵向
    if (elementY.value > 100 && elementY.value < 300) {
        top.value = elementY.value - 100
    }
    // 边界处理
    if (elementX.value > 300) {
        left.value = 200
    }
    if (elementX.value < 100) {
        left.value = 0
    }
    if (elementY.value > 300) {
        top.value = 200
    }
    if (elementY.value < 100) {
        top.value = 0
    }
    // 控制大图显示
    positionX.value = -left.value * 2
    positionY.value = -top.value * 2

})
</script>


<template>
  {{ elementX }}-------{{ elementY }}-------{{ isOutside }}
    <div class="goods-image">
        <!-- 左侧大图-->
        <div class="middle" ref="target">
            <img :src="imageList[activeindex]" alt=""/>
            <!-- 蒙层小滑块 -->
            <div class="layer" v-show="!isOutside" :style="{ left: `${left}px`, top: `${top}px` }"></div>
        </div>
        <!-- 小图列表 -->
        <ul class="small">
            <li v-for="(img, i) in imageList" :key="i" @mouseenter="enterhandler(i)"
                :class="{ active:i === activeindex }">
                <img :src="img" alt=""/>
            </li>
        </ul>
        <!-- 放大镜大图 -->
        <div class="large" :style="[
      {
        backgroundImage: `url(${imageList[0]})`,
        backgroundPositionX: `${positionX}px`,
        backgroundPositionY: `${positionY}px`,
      },
   ]"  v-show="!isOutside" ></div>

    </div>
</template>


http://www.niftyadmin.cn/n/3654443.html

相关文章

(二)Java游戏部署在Linux平台仿真器上(Motorola)

准备软件&#xff1a;&#xff11;。下载 Motorola Java ME SDK v6.4 for Linux OS Products (http://developer.motorola.com/docstools/sdks/linux64/)安装软件&#xff1a;&#xff11;。解压缩linux_64_SDK.zip, 例如,解压缩后的文件放在c:/java/Motorola目录下&#xff12…

银行卡换芯时代 EMV迁移冷思考及建议

摘要&#xff1a;如果能在2015年初完成银行磁条卡换“芯”&#xff0c;我国每年需要换芯的磁条卡与发行的新卡数量总和将达到7亿张左右。如此一来&#xff0c;这是否真的预示着IC卡时代的来临?在《卡技术与安全》2010年12月刊(总第114期)&#xff0c;本刊记者对中国银联董事、…

握奇携手北京一卡通推SD卡 发力移动支付市场

http://news.rfidworld.com.cn/2011_08/8c036890106a4a83.html 摘要&#xff1a;2011年8月18日&#xff0c;北京——北京市政交通一卡通公司联合全球领先数据安全解决方案供应商握奇数据、北京亿阳汇智通股份有限公司于日前共同推出最新移动支付产品——“e乐通”。该产品采用握…

(三)Java游戏部署在Symbian平台仿真器上(Nokia)

准备软件&#xff1a;&#xff11;。下载 Series 80 Platform SDKs (http://forum.nokia.com/main/resources/tools_and_sdks/index.html#java), 这个SDK包括两部分&#xff0c;我们只需要下载MIDP部分&#xff02;Series 80 Developers Platform 2.0 SDK for Symbian OS, for …

美三大运营商拟投资1亿与谷歌竞争移动支付

8月30日消息&#xff0c;据匿名知情人士于当地时间本周一透露&#xff0c;美国三大移动运营商Verizon Wireless、AT&T和T- Mobile美国计划对它们的合资企业Isis公司投资1亿多美元&#xff0c;让用户通过手机支付购物款。Isis是一家为消费者提供使用手机支付服务的公司&…

移动支付:十年做不大的蛋糕迎来转折点

引言&#xff1a;首款中国银联移动支付智能手机HTC惊艳S715e即将上市&#xff0c;Google、Apple、NOKIA等公司纷纷表示将在下一代智能手机中积极布局NFC&#xff0c;移动支付正在快速启航。然中国两种标准的争执是否已尘埃落定&#xff1f;年内中国品牌手机有多少可支持NFC功能…

(五)Java游戏部署在Windows Mobile平台仿真器(Microsoft)

前面几种平台,都可以集成到NetBeans IDE开发环境中. 很遗憾的是, 目前NetBeans还没办法集成Windows Mobile平台的仿真器. 可以采用不同于前面平台的方式&#xff0c;把Java程序部署在Windows Mobile平台的仿真器上&#xff0e;准备软件&#xff1a;&#xff11;。下载&#xff…