vue3实现商品图片放大镜效果(芋道源码yudao-cloud 二开笔记)

devtools/2024/10/21 10:10:00/
今天开发一个防某商城的商品图片放大镜,鼠标移动到图片位置时,右侧出现一个已放大的图片效果。

示例如下:
在这里插入图片描述

下图的图片的放大效果和小图的切换封装成了组件PicShow.vue,可根据需求自行修改,如下:

在这里插入图片描述

第一步:组件代码使用
javascript"><template><div><!-- 大图、轮播图、放大镜 --><PicShow :images="imgList"/></div>
</template>
<script setup lang="ts">
const state = ref(['https://static.iocoder.cn/mall/a79f5d2ea6bf0c3c11b2127332dfe2df.jpg','https://static.iocoder.cn/mall/a79f5d2ea6bf0c3c11b2127332dfe2df.jpg','https://static.iocoder.cn/mall/a79f5d2ea6bf0c3c11b2127332dfe2df.jpg','https://static.iocoder.cn/mall/a79f5d2ea6bf0c3c11b2127332dfe2df.jpg'
])
</script >
vue_26">第二步:PicShow.vue组件代码,代码不多也比较简单,但写起来似乎并不太容易(感兴趣的朋友可以仔细看下代码注释)
javascript"><script lang="ts" setup>
import {ref, computed} from 'vue'
import {useMouseInElement} from '@vueuse/core'/*获取父组件的传值*/
defineProps<{images: string[]
}>()
// 当前显示的图片索引
let active = ref(0)
// ref 获取 DOM 元素的位置
const target = ref(null)
// isisOutside为 true 的时候代表鼠标未进入目标元素,为 false 时代表鼠标进入目标元素
const {elementX, elementY, isOutside} = useMouseInElement(target)
// 遮罩半透明图在商品大图中的坐标位置
const position = computed(() => {let x = elementX.value - 70let y = elementY.value - 70if (x <= 0) x = 0if (x >= 175) x = 175if (y <= 0) y = 0if (y >= 175) y = 175return {x, y}
})
</script>
<template><div class="product-image"><!-- 右侧的图片放大效果 --><divclass="large" :style="[{ backgroundImage: `url(${images[active]})`,backgroundPosition: `-${position.x * 2}px -${position.y * 2}px`}]" v-show="!isOutside"></div><div ref="target" class="middle"><!-- 主图 --><img :src="images[active]" alt=""/><!-- 悬浮于主图上方跟着鼠标移动的遮罩层 --><div class="layer" v-show="!isOutside" :style="{ left: `${position.x}px`, top: `${position.y}px` }"></div></div><!-- 下方的小轮播图 --><ul class="small"><li v-for="(item, index) in images" :key="item" :class="{ active: index === active }" @mouseenter="active = index"><img :src="item" alt=""/></li></ul></div>
</template><style lang="scss" scoped>
.product-image {position: relative;z-index: 500;.large {position: absolute;top: 0;left: 360px;width: 500px;height: 500px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);background-repeat: no-repeat;background-size: 170% 170%;background-color: #f8f8f8;}.middle {width: 350px;height: 350px;background: #f5f5f5;position: relative;cursor: move;.layer {width: 175px;height: 175px;background: rgba(0, 0, 0, 0.2);left: 0;top: 0;position: absolute;}img{width: 350px;height: 350px;}}.small {width: 342px;display: flex;margin-top: 5px;padding: 8px 8px;overflow-x: auto;margin-left: -8px;li {width: 64px;height: 64px;cursor: pointer;list-style: none;box-shadow: 0px 0px 8px #ccc;margin-left: 5px;img{width: 64px;height: 64px;}}}ul{margin: 0;}ul li:first-child{margin-left: 0 !important;}
}
</style>
ok了。。。。。。

http://www.ppmy.cn/devtools/89261.html

相关文章

打卡第31天------贪心算法

每天抓紧时间刷题,争取尽快上岸,不能再耽误一分一秒了,2024年已经过去大半年了。这个算法编程题是我的痛点。要尽快弥补。 卡尔在讲算法题的时候,思路比较清晰,通俗易懂,以前看见算法题就害怕,因为啥都不会,看懵了,跟了一个月了,每天坚持刷题,偶尔会回顾思路,也会…

【Java】迭代器Iterator遍历集合。

迭代器注意的点&#xff1a; 1.报错NoSuchElementException2.迭代器遍历完毕&#xff0c;指针不会复位3.循环中只能使用一次next方法4.迭代器遍历时&#xff0c;不能使用集合的方法进行增加或者删除.只能使用迭代器进行删除&#xff0c;但是无法通过迭代器进行添加。但是&…

【自用】在conda下安装不同的cuda版本(本次为cuda11.7)

参考博客&#xff1a; [1]虚拟环境conda安装cuda11.7和cudnn和pytorch [2]conda环境下安装nvcc -V [3]解决 nvcc -V 显示的cuda版本不正确 #查看当前cuda情况 nvcc -V#查看cudatoolkit的可安装版本 conda search cudatoolkit --info#安装cudatoolkit conda install cudato…

练习实践 web中间件httpd-id:2-编译安装-web登录认证设置

参考来源&#xff1a; 用编译的方式安装apache httpd服务 编译安装过程记录 1.下载准备环境&#xff1a; yum -y install gcc gcc-c make pcre pcre-devel gd-devel openssl-devel zlib zlib-devel apr-*根据之前的操作文档和实际安装经验&#xff0c;提前将所需依赖项安装…

pxe实验

一、1.创建全新rhel7主机 2.开启主机图形 init 5 3.配置网络可用 4.关闭dhcp功能 /root/anaconda-ks.cfg:此文件是在系统安装好后自动生成的&#xff0c;记录了系统在安装过程中的所有设定 dnf install system-config-kickstart #安装图形化生…

【数据结构】栈的概念、结构和实现详解

本文来介绍一下数据结构中的栈&#xff0c;以及如何用C语言去实现。 1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入和删除元素的操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。 栈中元素遵循后进先出…

数据湖和数据仓库核心概念与对比

随着近几年数据湖概念的兴起&#xff0c;业界对于数据仓库和数据湖的对比甚至争论就一直不断。有人说数据湖是下一代大数据平台&#xff0c;各大云厂商也在纷纷的提出自己的数据湖解决方案&#xff0c;一些云数仓产品也增加了和数据湖联动的特性。但是数据仓库和数据湖的区别到…

探索人工智能技术的发展导致知识崩溃危险的可能性

概述 本文分析了人工智能&#xff08;AI&#xff09;技术的发展在缩小人类知识库方面的潜力。 作者认为&#xff0c;如果大语言模型&#xff08;LLMs&#xff09;等人工智能技术迅速发展&#xff0c;人工智能生成的内容成为人类接触的大部分信息&#xff0c;那么长尾知识&…