html实现商品图片放大镜,html图片放大镜预览

news2024/11/24 5:53:45

效果

在这里插入图片描述

实现

复制粘贴,修改图片路径即可使用

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>商品图片放大镜</title>
	</head>
	<style>
		body {
			margin: 0;
			padding: 0;
		}
		
		#app {
			padding: 10px;
			position: relative;
		}
		/** 默认图片*/
		
		.img-box {
			position: relative;
			left: 10px;
			top: 150px;
			width: 300px;
			text-align: center;
			border: 1px solid #83b4ff;
			border-radius: 4px;
			overflow: hidden;
			cursor: zoom-in;
		}
		
		.img1 {
			width: 100%;
		}
		
		.img-select {
			width: 100px;
			height: 100px;
			position: absolute;
			left: 0;
			top: 0;
			background: #00ff6633;
			border-radius: 4px;
			display: none;
		}
		/** 临时放大图片*/
		
		.img-temp-box {
			position: absolute;
			left: 500px;
			top: 100px;
			width: 400px;
			height: 400px;
			display: none;
			overflow: hidden;
		}
		
		.img2 {
			width: 200%;
			position: absolute;
			left: 0;
			top: 0;
		}
	</style>

	<body>
		<div id="app">
			<div class="img-box">
				<img src="image/2.jpeg" class="img1" />
				<div class="img-select"></div>
			</div>
			<div class="img-temp-box">
				<img src="image/2.jpeg" class="img2" />
			</div>
		</div>
	</body>
	<script>
		/**
		 * @author yyq
		 * @blogger myf
		 */
		var imgBox = document.querySelector('.img-box');
		var imgSelect = document.querySelector('.img-select');
		var imgTempBox = document.querySelector('.img-temp-box');
		var img2 = document.querySelector('.img2');

		// 鼠标移入
		imgBox.onmouseenter = function() {
			imgSelect.style.display = 'block';
			imgTempBox.style.display = 'block';
			imgTempBox.style.left = (img.left + 400) + "px";
			imgTempBox.style.top = (img.top - 50) + "px";
			console.log("移入")
		}

		// 鼠标移除
		imgBox.onmouseleave = function() {
			imgSelect.style.display = 'none';
			imgTempBox.style.display = 'none';
			console.log("移除")
		}

		// 鼠标放上
		imgBox.onmousemove = function() {

			var img = getElementOffset(imgBox);

			var x = event.clientX - img.left;
			var y = event.clientY - img.top;

			console.log("xy轴:", x, '-----', y);

			var imgSelectX = x - imgSelect.offsetWidth / 2
			var imgSelectY = y - imgSelect.offsetHeight / 2

			if(imgSelectX < 0) {
				imgSelectX = 0;
			} else if(imgSelectX > imgBox.offsetWidth - imgSelect.offsetWidth) {
				imgSelectX = imgBox.offsetWidth - imgSelect.offsetWidth
			}

			if(imgSelectY < 0) {
				imgSelectY = 0;
			} else if(imgSelectY > imgBox.offsetHeight - imgSelect.offsetHeight) {
				imgSelectY = imgBox.offsetHeight - imgSelect.offsetHeight
			}

			// 小图里的小框
			imgSelect.style.left = imgSelectX + 'px';
			imgSelect.style.top = imgSelectY + 'px';

			var b = (img2.offsetHeight - imgTempBox.offsetHeight) / (imgBox.offsetHeight - imgSelect.offsetHeight)

			// 临时框里的大图片
			img2.style.left = -imgSelectX * b + "px"
			img2.style.top = -imgSelectY * b + "px"

		}

		/**
		 * 返回元素距离浏览器边框的位置(防止元素位置被父级限制)
		 * @param {Object} element
		 */
		function getElementOffset(element) {    
			var left = element.offsetLeft; // 当前元素左边距
			var top = element.offsetTop; // 当前元素上边距
			var parent = element.offsetParent; // 当前元素的父级元素
			while(parent !== null) {      
				left += parent.offsetLeft; // 累加左边距
				top += parent.offsetTop; // 累加上边距
				parent = parent.offsetParent; // 依次获取父元素
			}
			return {
				'left': left,
				'top': top
			};  
		}
	</script>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue的网吧管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

国际货币汇率 API 数据接口

国际货币汇率 API 数据接口 支持多种货币对&#xff0c;每日精准汇率&#xff0c;多币种支持。 1. 产品功能 支持多种货币汇率查询&#xff1b;支持部分加密货币汇率查询&#xff1b;数据为每日更新汇率数据&#xff1b;可一次查询源货币代码对应所有目标货币汇率&#xff1b…

无涯教程-Perl - getppid函数

描述 该函数返回父进程的进程ID。 语法 以下是此函数的简单语法- getppid返回值 该函数返回父进程的进程ID。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$ppidgetppid();print "Parent Process ID $ppid\n";执行上述代码后,将产生以下输出- Paren…

多模态模型评价

论文1 【Evaluating Object Hallucination in Large Vision-Language Models】 这篇文章主要是评价视觉-语言模型中出现“幻觉”的评价。论文中是这样定义幻觉的 we find that LVLMs suffer from the hallucination problem, i.e., they tend to generate objects that are in…

哪个类包含clone方法?是Cloneable还是Object?

在Java中&#xff0c;clone方法是定义在Object类中的。所有的Java类都继承自Object类&#xff0c;因此每个Java对象都继承了clone方法。然而&#xff0c;要成功地使用clone方法&#xff0c;需要满足一些条件&#xff0c;其中之一是被克隆的类必须实现Cloneable接口。 虽然clone…

途乐证券-光伏、储能板块拉升 德业股份、固德威等大幅走高

光伏、储能等新能源板块10日盘中震荡上扬&#xff0c;截至发稿&#xff0c;德业股份涨近8%&#xff0c;锦浪科技、固德威、阿特斯等涨逾6%&#xff0c;禾迈股份、昱能科技涨近4%。 消息面上&#xff0c;据中关村储能产业技术联盟计算&#xff0c;2021年至2023年上半年&#xff…

无涯教程-Perl - glob函数

描述 此函数返回与EXPR匹配的文件的列表,这些文件将由标准Bourne shell进行扩展。如果EXPR未指定路径,请使用当前目录。如果省略EXPR,则使用$_的值。 从Perl 5.6开始,扩展是在内部完成的,而不是使用外部脚本。扩展遵循csh(以及任何派生形式,包括tcsh和bash)的扩展方式,其翻译…

【雕爷学编程】Arduino动手做(08)---湿敏电阻传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

示波器带宽和采样率

示波器带宽概念定义&#xff1a; 在示波器的输入端加相同幅值的正弦波&#xff0c;幅度衰减至-3dB&#xff08;70.7%&#xff09;时的频率点就是示波器的带宽。 如果我们用100MHz带宽的示波器测量&#xff1a;幅值为1V &#xff0c;频率为100MHz 的正弦波时&#xff0c;实际得到…

Java基础篇--对象和类

目录 对象&#xff08;Object&#xff09; 类&#xff08;Class&#xff09; 构造方法 创建对象 访问对象的成员 总结 在面向对象中&#xff0c;为了做到让程序对事物的描述与事物在现实中的形态保持一致&#xff0c;面向对象思想中提出了两个概念&#xff0c;即类和对象…

基于jeecg-boot的flowable流程增加部门经理审批功能

因为之前没有在流程设计器里增加部门经理审批,所以这次增加这个功能 界面如下: 同时可以对于多名部门经理可以进行多实例配置,如下图: 一、前端实现 主要修改userTask.vue文件。 <template><div style="margin-top: 16px"><el-row><h4&…

Vue3的自定义指令,项目中的运用

目录 一、什么是自定义指令 1. 定义 2. 什么时候使用自定义指定 二、Vue3中的自定义指令 1.全局自定义指令 2. 组件自定义指令 三、指令钩子 1. 钩子 2. 钩子参数 四、自定义指令的常见用法 1.添加事件监听 2.操作DOM 一、什么是自定义指令 1. 定义 自定义指令是一…

k8s pod启动报错: no route to host

k8s pod kuboard启动报错 查看pod命令 kubectl get pods -A kubectl get pods --all-namespaces查看报错pod日志 命令&#xff1a; kubectl logs -f -n namespace nametime"2023-08-09T13:40:3608:00" levelerror msg"不能获取 AgentEndpointsGet \"http:/…

ssm学院党员管理系统源码和论文PPT

ssm学院党员管理系统源码和论文PPT002 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 选题意义、价值和目标&#xff1a; 随着鄂尔多斯应用技术学院招生规模的不断扩大&…

【玩转pandas系列】pandas加载数据,分箱操作和时间序列,绘制图形

知识目录 前言一、加载数据1 - 加载CSV文件2 - 加载Excel文件3 - 加载数据库数据 二、分箱1 - 等宽分箱2 - 等频分箱 三、时间序列1 - Timestamp和Period的创建2 - 索引和切片3 - 属性和移动4 - 频率转换5 - 数据聚合 四、pandas绘制图形1 - 折线图2 - 柱状图3 - 直方图4 - 饼图…

【Mysql】数据库基础与基本操作

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

仓库出库入库都有哪些流程?详解仓库出入库管理规范

仓库出入库管理是指对仓库中物品的进出情况进行有效管理和跟踪&#xff0c;以确保库存的准确性、安全性和高效性。这是企业供应链管理的重要环节之一&#xff0c;涉及到物流、库存控制、订单处理和数据记录等方面。 阅读本文您将了解&#xff1a;一个完整的仓库出入库管理流程…

湘大 XTU OJ 1308 比赛 题解:循环结束的临界点+朴素模拟

一、链接 比赛 二、题目 题目描述 有n个人要进行比赛&#xff0c;比赛规则如下&#xff1a; 假设每轮比赛的人是m&#xff0c;取最大的k&#xff0c;k2^t且k≤m。这k个人每2人举行一场比赛&#xff0c;胜利者进入一下轮&#xff0c;失败者被淘汰。余下的m-k个人&#xff0…

GDB 里uint64位数据值

今天一来组长就让我查一个问题&#xff0c;说是我们的接口返回的数据需要赋值为-1&#xff0c;返回给上层调用。结果我一看代码&#xff0c;代码里就是写死了赋值 -1 的&#xff0c;但他说实际返回的好像不是 -1&#xff0c;所以只能让我gdb 跟踪一下了。本来想用 window 下的计…