图像放大效果示例【JavaScript】

news2024/11/14 2:04:53

实现效果:

当鼠标悬停在小图(缩略图)上时,大图(预览图)会随之更新为相应的小图,并高亮当前悬浮的小图的父元素。

 代码:

1. HTML部分

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<title>图像放大效果示例</title>
		<link rel="stylesheet" href="styles.css">
	</head>
	<body>
		<div>
			<img src="./image/image1.jpg" id="bigImg" alt="大图展示">
			<ul>
				<li class="active">
					<img src="./image/image1.jpg" alt="小图1" class="smallImg">
				</li>
				<li>
					<img src="./image/image2.jpg" alt="小图2" class="smallImg">
				</li>
				<li>
					<img src="./image/image3.jpg" alt="小图3" class="smallImg">
				</li>
				<li>
					<img src="./image/image4.jpg" alt="小图4" class="smallImg">
				</li>
				<li>
					<img src="./image/image5.jpg" alt="小图5" class="smallImg">
				</li>
			</ul>
		</div>

		<script src="script.js"></script>
	</body>
</html>

2. CSS部分

			* {
				padding: 0;
				margin: 0;
			}

			body {
				background-color: #f5f5f5;
				text-align: center;
			}

			#bigImg {
				width: 300px;
				height: 300px;
				border: 2px solid #ccc;
				margin-bottom: 20px;
			}

			ul {
				list-style: none;
				overflow: hidden;
				padding: 0;
			}

			ul li {
				float: left;
				width: 60px;
				height: 60px;
				margin: 10px;
				border: 2px solid #fff;
				cursor: pointer;
			}

			ul li.active {
				border-color: red;
			}

			ul li img {
				width: 100%;
				height: 100%;
			}

 3. js部分

        注:采用方式一 或 方式二 中的一种方式即可。

方式一:
var bigImg = document.getElementById('bigImg');
var smallImgs = document.getElementsByClassName("smallImg");

for (var i = 0; i < smallImgs.length; i++) {
	smallImgs[i].onmouseover = function() {
		// 清除所有li的active类
		var liElements = document.querySelectorAll('ul li');
		for (var j = 0; j < liElements.length; j++) {
			liElements[j].classList.remove('active');
		}

		// 修改大图的src属性
		var smallImgSrc = this.getAttribute('src');
		bigImg.setAttribute('src', smallImgSrc);

		// 为当前悬浮的img父li添加active类
		this.parentNode.classList.add('active');
	}
}
代码解析:

1. 变量定义:

  • bigImg: 通过 document.getElementById('bigImg') 获取 ID 为 bigImg 的元素,通常是一个用于显示大图的 <img> 标签。
  • smallImgs: 通过 document.getElementsByClassName("smallImg") 获取所有类名为 smallImg 的元素,通常是小图片的 <img> 标签集合。

2. 循环遍历小图片:

for (var i = 0; i < smallImgs.length; i++) {
  • 使用 for 循环遍历每一个小图片。

3. 鼠标悬停事件:

smallImgs[i].onmouseover = function() {
  • 为每个小图片绑定 onmouseover 事件,当鼠标悬停在小图片上时,执行以下代码:

4. 清除所有 li 的 active 类:

var liElements = document.querySelectorAll('ul li');
for (var j = 0; j < liElements.length; j++) {
    liElements[j].classList.remove('active');
}
  • 通过 document.querySelectorAll('ul li') 获取所有 ul 内的 li 元素,并遍历它们,移除每个 li 的 active 类,确保只有当前的图片有高亮效果。

5. 更新大图的 src 属性:

var smallImgSrc = this.getAttribute('src');
bigImg.setAttribute('src', smallImgSrc);
  • 获取当前悬停小图片的 src 属性,然后将大图的 src 属性更新为该小图片的 src,以便显示对应的图片。

6. 为当前悬浮的 img 的父 li 添加 active 类:

this.parentNode.classList.add('active');
  • 获取当前小图片的父元素(通常是 li),并为其添加 active 类,以突出显示当前选中的小图片。

方式二:
var bigImg = document.getElementById('bigImg');
var smallImgs = document.querySelectorAll('ul li img');

smallImgs.forEach(function(smallImg) {
	smallImg.onmouseover = function() {
		// 清除所有li的active类
		document.querySelectorAll('ul li').forEach(function(li) {
			li.classList.remove('active');
		});

		// 修改大图的src属性
		var smallImgSrc = this.getAttribute('src');
		bigImg.setAttribute('src', smallImgSrc);

		// 为当前悬浮的img父li添加active类
		this.parentNode.classList.add('active');
	}
});
代码解析:

1. 获取元素

var bigImg = document.getElementById('bigImg');
var smallImgs = document.querySelectorAll('ul li img');
  • bigImg:获取大图的元素,假设这个元素的 ID 是 bigImg
  • smallImgs:获取所有小图的元素,这些元素是位于一个无序列表 <ul> 中的列表项 <li> 内的图片 <img>

2. 对小图应用事件监听

smallImgs.forEach(function(smallImg) {
    smallImg.onmouseover = function() {
  • 通过 forEach 遍历所有的小图(smallImgs)。
  • 对于每一个小图,设置 onmouseover 事件,即当鼠标悬停在小图上时触发的函数。

3. 清除所有 li 的 active 类

document.querySelectorAll('ul li').forEach(function(li) {
    li.classList.remove('active');
});
  • 在鼠标悬停时,先清除所有列表项(li)的 active 类名,确保只保留当前被悬停的图像的样式。

4. 修改大图的 src 属性

var smallImgSrc = this.getAttribute('src');
bigImg.setAttribute('src', smallImgSrc);
  • this 代表当前悬浮的小图对象。通过 getAttribute('src') 获取当前小图的 src 属性。
  • 将获取到的小图的 src 赋值给大图的 src,从而实现大图更新。

5. 为当前悬浮的 <img> 的父 <li> 添加 active 类

this.parentNode.classList.add('active');
  • 获取当前小图的父元素(即 <li>),并为其添加 active 类,以便可以通过 CSS 对该元素进行特殊的样式处理,比如高亮显示。

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

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

相关文章

Nginx简介;Nginx安装

一&#xff0c;Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在BSD-like 协议下发行。是一个高性能的HTTP和反向代理web服务器 &#xff0c;同时也提供了IMAP/POP3/SMTP服务。 其特点是占有内存少…

OpenCV特征检测(8)检测图像中圆形的函数HoughCircles()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在灰度图像中使用霍夫变换查找圆形。 该函数使用霍夫变换的一种修改版本在灰度图像中查找圆形。 例子&#xff1a; #include <opencv2/imgp…

【解密 Kotlin 扩展函数】扩展函数的创建(十六)

导读大纲 1.1 为第三方的类添加方法: 扩展函数 1.1 为第三方的类添加方法: 扩展函数 Kotlin 的主题之一是与现有代码的平滑集成 即使是纯 Kotlin 项目,也是构建在 Java 库之上的 如 JDK、Android 框架和其他第三方框架 而当你将 Kotlin 集成到 Java 项目中时 你还要处理尚未或不…

Ubuntu清理内存导致的一系列错误及解决方法

文章目录 火狐浏览器和pycharm消失打不开 安不上 卸不掉后记 火狐浏览器和pycharm消失 打不开 安不上 卸不掉 清理内存后&#xff0c;火狐和pycharm的图标都消失了&#xff0c;在终端输入Firefox显示无法打开 应当先snap install firefox&#xff0c;然而snap install firefo…

【排序算法】插入排序_直接插入排序、希尔排序

文章目录 直接插入排序直接插入排序的基本思想直接插入排序的过程插入排序算法的C代码举例分析插入排序的复杂度分析插入排序的优点 希尔排序希尔排序&#xff08;Shell Sort&#xff09;详解希尔排序的步骤&#xff1a;希尔排序的过程示例&#xff1a;希尔排序的C语言实现举例…

啥?Bing搜索古早BUG至今未改?

首先&#xff0c;大家先看下面的一个数学公式。 Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)∫0∞​tz−1e−tdt. 看不懂&#xff1f;没关系&#xff0c;因为我也看不懂 这不是谈论的重点。 当你把鼠标光标移到公式的最开头&…

netflix是什么样的企业文化

netflix是什么样的企业文化 Netflix的企业文化以其“自由与责任”而闻名&#xff0c;这种文化理念在业界被广泛誉为管理的“黄金法则”。《奈飞文化手册》自2009年面世以来&#xff0c;便迅速成为全球企业管理的典范&#xff0c;吸引了超过1500万次的在线阅读与下载。Netflix的…

【C++篇】引领C++模板初体验:泛型编程的力量与妙用

文章目录 C模板编程前言第一章: 初始模板与函数模版1.1 什么是泛型编程&#xff1f;1.1.1 为什么要有泛型编程&#xff1f;1.1.1 泛型编程的优势 1.2 函数模板的基础1.2.1 什么是函数模板&#xff1f;1.2.2 函数模板的定义格式1.2.3 示例&#xff1a;通用的交换函数输出示例&am…

【网络】高级IO——Reactor版TCP服务器

目录 1.什么是Reactor 1.1.餐厅里的Reactor模式 2.Reactor的由来 2.1.单 Reactor 单进程 / 线程 2.2.单 Reactor 多线程 / 多进程 2.3.多 Reactor 多进程 / 线程 3.实现单 Reactor 单进程版本的TCP服务器 3.1.Connection类 3.2.TcpServer类 3.3.Connection的真正用处 …

深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏

文章目录 0. 前言1.发展现状2.行车功能中难点问题及解决思路问题1&#xff1a;车道居中辅助&#xff0c;画龙&#xff0c;蛇行问题。问题2&#xff1a;外界环境扰动以及传感器信息缺失下的横向控制难点问题3&#xff1a;大坡度平稳停车 3. 泊车功能中难点问题及解决思路问题1&a…

Spring AOP - 配置文件方式实现

目录 AOP基础概念 示例1&#xff1a;模拟在com.text包及子包项下所有类名称以ServiceImpl结尾的类的所有方法执行前、执行后、执行正常后返回值、执行过程中出异常的情况 示例2&#xff1a;统计com.text包及子包项下所有类名称以DaoImpl结尾的类的所有方法执行时长情况 AOP基…

汽车总线之---- CAN FD总线

CAN FD 最高可支持8M/s的通信速率&#xff0c;从传统CAN到CAN FD的转换是很容易实施和推广的。 CAN FD报文的帧&#xff1a;标准帧&#xff0c;扩展帧 CAN FD 标准帧结构 CAN FD 报文的标准帧与CAN 报文的标准帧的区别 CAN FD 报文的标准帧与CAN FD报文的扩展帧的区别&…

lsof可以查看当前系统中正在被使用的文件,包括动态库

lsof的英文是 list open files lsof打印结果的最后一列是Name&#xff0c;表示正在被使用或打开的文件名或动态库名 lsof直接回车&#xff0c;会显示很多&#xff0c;可以配合more命令查看 一个文件或动态库可能被多个进程打开&#xff0c;lsof会显示多行 lsof | more -1…

uniapp小程序持续获取用户位置信息,后台位置获取

做一个小程序持续获取用户位置信息的功能&#xff0c;即使小程序切换到后台也能继续获取&#xff0c;getLocation这个api只有小程序在前台才能获取位置&#xff0c;所以不用这个 先申请一个腾讯地图key 在uniapp项目配置源码视图里加上这个代码 先获取权限&#xff0c;再开启…

[项目:微服务即时通讯系统客户端(基于C++QT)]三,左侧界面搭建

三&#xff0c;左侧界面搭建 一&#xff0c;导入 先把MainWidget类做成“单例类” 采用的是单例模式&#xff0c;让某一个类&#xff0c;在指定进程中只有唯一的实例 先看一下MainWidget的框架 QWidget//这部分是头文件保护宏&#xff0c;确保该头文件只被包含一次&#x…

240922-chromadb的基本使用

A. 背景介绍 ChromaDB 是一个较新的开源向量数据库&#xff0c;专为高效的嵌入存储和检索而设计。与其他向量数据库相比&#xff0c;ChromaDB 更加专注于轻量化、简单性和与机器学习模型的无缝集成。它的核心目标是帮助开发者轻松管理和使用高维嵌入向量&#xff0c;特别是与生…

【软件工程】数据流图和数据字典

一、数据流图 3.符号 分析结果 二、数据字典 例题 选择题

使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库

【任务】 登陆Linux服务器&#xff0c;以MySQL分布式存储方式安装并部署如图所示的三群组、四机构、 七节点的星形组网拓扑区块链系统。其中&#xff0c;三群组名称分别为group1、group2和group3&#xff0c; 四个机构名称为agencyA、agencyB、agencyC、agencyD。p2p_port、cha…

Python | Leetcode Python题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def levelOrder(self, root: Node) -> List[List[int]]:if not root:return []ans list()q deque([root])while q:cnt len(q)level list()for _ in range(cnt):cur q.popleft()level.append(cur.val)for child in c…

爬虫过程 | 蜘蛛程序爬取数据流程(初学者适用)

蜘蛛程序&#xff08;也称网络爬虫&#xff0c;是搜索引擎的重要组成部分&#xff09; 主要功能&#xff1a;遍历互联网&#xff0c;抓取网站信息并建立索引&#xff0c;便于用户在搜索引擎中检索到最新的网页内容工作原理&#xff1a;从初始网站页面的URL开始&#xff0c;发送…