原生HTML放大镜

news2024/10/2 20:32:21

该放大区域用背景图片放大

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title></title>
		<style type="text/css">
			body {
				height: 1200px;
				background-color: lightskyblue;
			}

			ul {
				margin: 0;
				padding: 0;
				list-style: none;
			}

			.itemarea {
				position: relative;
				width: 500px;
				height: 680px;
				border: 1px black solid;
				margin: 50px auto;
			}

			.itemarea .pic {
				margin-bottom: 15px;
			}

			.itemarea img {
				width: 500px;
				height: 600px;

			}

			.itemarea .pic .cover {
				position: absolute;
				left: 0;
				top: 0;
				width: 200px;
				height: 200px;
				background-image: url(img/7.png);
				opacity: 0.6;
				display: none;
			}

			.itemarea .list {
				display: flex;

			}

			.itemarea .list li {
				margin: auto;
			}

			.itemarea .list img {
				display: block;
				width: 50px;
				height: 50px;
			}

			.itemarea .detail {
				position: absolute;
				top: 0;
				left: 500px;
				/* 此处为放大2倍,显示框的大小是遮阴框宽高的2倍 */
				width: 400px;
				height: 400px;
				display: none;
				border: 1px black solid;
				background: url(img/1.PNG);
				/* 此处放大2倍,背景图片的宽高是左边显示图片的2倍 */
				background-size: 1000px 1200px;
				/* background-size: 200%; 或者这样写*/

			}

			.itemarea .list .current {
				border: 2px green solid;
			}
		</style>
	</head>
	<body>
		<div class="itemarea">
			<div class="pic">
				<img src="img/1.PNG">
				<div class="cover"></div>
			</div>
			<ul class="list">
				<li><img src="img/1.PNG"></li>
				<li><img src="img/2.PNG"></li>
				<li><img src="img/3.PNG"></li>
				<li><img src="img/4.PNG"></li>
				<li><img src="img/5.PNG"></li>
				<li><img src="img/6.PNG"></li>
			</ul>
			<div class="detail">

			</div>
		</div>
		<script type="text/javascript">
			/* 
		 需求
		 1,鼠标放入图片时候,会动态修改图片地址
		 2,鼠标放入大图,会动态修改右边图片位置
		 2.1显示图片的放大镜,
		 2.2显示右边效果
		 */
			var itemarea = document.querySelector(".itemarea");
			var list = document.querySelector(".list");
			/* 上面的大图片 */
			img = document.querySelector(".pic img");
			/* 所有的图片 */
			imgs = list.querySelectorAll("img");
			/* 主图片展示区域 */
			pic = document.querySelector(".itemarea .pic");
			/* 放大镜 */
			cover = document.querySelector(".cover");
			/* 放大的区域 */
			detail = document.querySelector(".detail");
			/* 监听事件,切换图片src */
			list.addEventListener("mousemove", function(e) {
				if (e.target.tagName == "IMG") {
					img.src = e.target.src;
					detail.style.backgroundImage = "url(" + e.target.src + ")";
					/* 遍历 所有边框都为空*/
					imgs.forEach(function(item) {
						item.className = "";
					})
					/* 选中的改变边框颜色*/
					e.target.className = "current";
				}
			})
			pic.addEventListener("mousemove", function(e) {
				/* 放大镜距离浏览器的距离 */
				var x = e.clientX;
				y = e.clientY;
				/* 图片框距离浏览器的距离 */
				cx = pic.getBoundingClientRect().left;
				cy = pic.getBoundingClientRect().top;
				tx = x - cx - 100;
				ty = y - cy - 100;
				if (tx < 0) {
					tx = 0;
				}
				if (ty < 0) {
					ty = 0;
				}
				/* 显示图片宽-遮阴框的宽 */
				if (tx >300) {
					tx = 300;
				}
				/* 显示图片高-遮阴框的高 */
				if (ty > 400) {
					ty = 400;
				}
				cover.style.left = tx + "px";
				cover.style.top = ty + "px";
				/* 根据遮阴框在盒子的移动距离百分比------对应放映框在大图片的移动距离百分比 */
				/*    tx,ty/遮阴框的极限范围 */
				detail.style.backgroundPosition = tx / 300 * 100 + "%" + ty / 400 * 100 + "%";
			})
			/* 移除隐藏 */
			itemarea.onmouseout = function() {
				cover.style.display = "none";
				detail.style.display = "none"
			}
			itemarea.onmouseover = function() {
				cover.style.display = "block";
				detail.style.display = "block";
			}
		</script>
	</body>
</html>

效果如下:

在这里插入图片描述

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

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

相关文章

Linux - buff和cache的区别

free -h命令可以查看内存的使用情况 [rootzabbix-server ~]# free -htotal used free shared buff/cache available Mem: 1.8G 432M 894M 10M 492M 1.2G Swap: 2.0G 0B 2.0G为什…

抖音小程序实践四:实现小程序分享

有时候我们要把一个小程序分享给别人&#xff0c;去看套餐、买东西之类的&#xff0c;是一个很常见的功能&#xff0c;但是在接入抖音小程序的时候&#xff0c;初始化右上角三个点并没有分享的入口&#xff0c;那看来不是要申请&#xff0c;就是有别的开发的口子了。下面我们一…

《SQL基础》17. InnoDB引擎

InnoDB引擎InnoDB引擎逻辑存储结构架构内存结构磁盘结构后台线程事务原理事务基础redo logundo logMVCC基本概念隐式字段undo log版本链readView原理分析InnoDB引擎 逻辑存储结构 InnoDB的逻辑存储结构如下图所示&#xff1a; 表空间 表空间是InnoDB存储引擎逻辑结构的最高层…

React18 setState是同步还是异步?

相信大家对于react的setState肯定是不陌生了, 这是一个用于更新状态的函数. 但是在之前有一道非常经典的面试题就是关于setState是同步还是异步的问题, 具体可以参考我之前写的一篇文章: 一篇文章彻底理解setState是同步还是异步&#xff01;. 对于react 18之前的版本, 上文说的…

2019年MathorCup数学建模A题数据驱动的城市轨道交通网络优化策略解题全过程文档及程序

2019年第九届MathorCup高校数学建模挑战赛 A题 数据驱动的城市轨道交通网络优化策略 原题再现&#xff1a; 截至 2018 年 12 月 31 日&#xff0c;中国内地累计共有 35 座城市建成并投运城市轨道交通&#xff0c;里程共计 5766.6 公里。进入“十三五”以来&#xff0c;三年累…

Spring Bean实例创建装载过程分析-spring源码学习(2)

随着Spring框架的应用越来越广泛&#xff0c;对Spring Bean的实例创建装载过程的了解就显得尤为重要。本文将围绕这一主题&#xff0c;为大家详细介绍Spring Bean实例创建装载的整个过程&#xff0c;并透彻解析其细节。 时序图 一、Spring Bean实例的创建过程 Spring Bean实例…

Web前端学习:章三 -- JavaScript预热(二)

六五&#xff1a;作用域与function function&#xff1a;函数&#xff0c;不是数学上的函数&#xff0c;与写代码有关 JS中的函数&#xff1a;运用它&#xff0c;起个名字&#xff0c;然后对函数进行调用&#xff0c;即可将函数中的内容执行一遍 1、function 最基本的作用域…

CNCF x Alibaba云原生技术公开课 第五章 应用编排与管理

1、元数据的组成 用来识别资源的具有标识型的标签&#xff1a;Labels key valueselector(筛选/组合资源):多个相等条件&#xff0c;逻辑与的关系; 集合型,in notin 用来描述资源的非标识型的注解&#xff1a;Annotations 扩展资源的spec/status可以包含特殊字符可以结构化也可…

企业管理经典书籍推荐

几乎每一位成功的商业人士都有着良好的阅读习惯。并且他们阅读涉猎的范围也大多与企业管理和领导力有关。而关于企业管理经典书籍&#xff0c;我推荐你看以下这两本。一本是《经理人参阅&#xff1a;企业管理实务》&#xff0c;另一本是《经理人参阅&#xff1a;领导力提升》。…

无刷高速风筒方案介绍--【PCBA方案】

疫情三年过去&#xff0c;春节后&#xff0c;一个新的开始&#xff0c;大家满怀希望畅谈今年好气象。 三年来一波一波的封城、隔离、核酸&#xff0c;经济压抑到了无以复加的地步&#xff0c;也导致了诸多社会问题的出现。消费力被磨平&#xff0c;人们小心翼翼的生活。 常跟…

【第六课】Arcgis中基本操作

一、前言 前面课程已经对Arcgis主页面&#xff0c;相关板块进行介绍&#xff0c;相信大家也有了一定的了解&#xff0c;当然这部分内容其实不需要大家死记硬背&#xff0c;有一个初步印象即可&#xff0c;这一节课程可能更需要掌握&#xff0c;之后会慢慢有实例给大家展现&…

数据结构刷题(二十):17电话号码的字母组合、39组合总和、40组合总和II

一、电话号码的字母组合题目链接思路&#xff1a;回溯三部曲。确定回溯函数参数&#xff1a;题目中给的 digits&#xff0c;还要有一个参数就是int型的index&#xff08;记录遍历第几个数字&#xff0c;就是用来遍历digits的&#xff0c;同时也代表了递归的深度&#xff09;&am…

【牛客刷题专栏】0x10:JZ8 二叉树的下一个结点(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录前言问题…

@Component实现原理

直接从关键代码开始&#xff1a; 直接找到org.springframework.context.support.AbstractApplicationContext#refresh方法&#xff0c;找到invokeBeanFactoryPostProcessors(beanFactory)方法&#xff0c;最终找org.springframework.context.support.PostProcessorRegistratio…

各种各样的锁

1.悲观锁和乐观锁 一个共享数据加了悲观锁&#xff0c;那线程每次想操作这个数据前都会假设其他线程也可能会操作这个数据&#xff0c;所以每次操作前都会上锁&#xff0c;这样其他线程想操作这个数据拿不到锁只能阻塞了。 synchronized 和 ReentrantLock是典型的悲观锁 共享…

Linux学习记录——십사 进程控制(1)

文章目录1、进程创建1、fork函数2、进程终止1、情况分类2、如何理解进程终止3、进程终止的方式3、进程等待1、进程创建 1、fork函数 fork函数从已存在进程中创建一个新进程&#xff0c;新进程为子进程&#xff0c;原进程为父进程。 #include <unistd.h> pid_t fork(vo…

论文阅读:Syntax-Aware Network for Handwritten Mathematical Expression Recognition

论文阅读&#xff1a;Syntax-Aware Network for Handwritten Mathematical Expression Recognition1 主要观点&#xff1a; 1、提出将语法信息纳入编码器-解码器网络的方法。使用一组语法规则&#xff0c;用于将每个表达式的LaTeX标记序列转换为解析树&#xff1b;用深度神经…

【vue create】一.使用vue creat搭建项目

场景&#xff1a;使用vue create脚手架快速搭建vue的项目 前提&#xff1a;需要安装node.js和cnpm以及yarn 并且cnpm需要设置为淘宝镜像&#xff0c;cnpm和yarn安装教程网上很多可以自行搜索 1.使用dos命令安装vue-cli脚手架 //这个是从镜像源下载 cnpm install -g vue/cli 查…

Google三大论文之GFS

Google三大论文之GFS Google GFS&#xff08;Google File System&#xff09; 文件系统&#xff0c;一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS 虽然运行在廉价的普遍硬件设备上&#xff0c;但是它依然了提供灾难冗余的能力&#xff0c;为大量客户机提供了…

接口自动化测试——多套被测环境的切换

文章目录一、意义二、实现目标三、实现方案1、使用环境管理文件2、使用不同的文件管理不同的环境&#xff08;建议使用&#xff09;3、在接口用例中指定path&#xff0c;不指定url4、环境切换a、通过环境变量进行切换b、通过命令行参数进行切换四、代码实现1、通过环境变量进行…