
在网页交互设计中,鼠标悬停(mouseover)时图片切换、鼠标移开(mouseout)时恢复原始图片是一种常见的需求。这不仅能提升用户体验,还能在有限的空间内展示更多信息。本教程将指导您如何使用jquery和原生javascript实现这一功能,特别关注如何智能地获取并恢复原始图片src,避免硬编码带来的维护难题。
首先,我们需要一个清晰的HTML结构来承载图片和触发切换的元素。通常,我们会有一个主图片显示区域和一些“热点”链接,每个热点链接都关联一个要切换的图片SRC和要显示的文本。
<div class="col-12 text-center">
<h3>标题</h3>
<div class="name-wrapper">
<span id="name1" class="some-name opacity-0">名称 1</span>
<span id="name2" class="some-name opacity-0">名称 2</span>
</div>
</div>
<div class="col-12">
<div class="img-set">
<img src="images/2023/some-img.jpg" alt="原始图片" />
</div>
<div class="hotspots">
<a href="#" data-target="name1">测试1</a>
<a href="#" data-target="name2">测试2</a>
</div>
</div>在这个结构中:
当鼠标悬停在.hotspots a元素上时,我们需要执行以下操作:
以下是使用jQuery实现的mouseover事件处理函数:
$(".hotspots a").mouseover(function() {
// 1. 获取要切换的图片SRC
var newSrc = $(this).attr('data-src');
// 2. 更新主图片的SRC
$(".img-set img").attr("src", newSrc);
// 3. 获取要显示的文本ID
var targetId = $(this).data("target");
// 4. 移除隐藏类,显示文本
$("#" + targetId).removeClass("opacity-0");
});鼠标移开时,我们需要将图片恢复到其原始状态,并隐藏相关文本。这里的挑战在于如何获取原始图片的SRC,而无需在mouseout事件处理函数中硬编码其路径。
一些开发者可能会尝试在DOM加载完成后立即获取原始SRC,并将其存储在一个变量中,然后在mouseout事件中使用。例如:
$(document).ready(function() {
// 尝试获取原始SRC,但可能出错
var originalImgSrc = document.getElementsByClassName(".img-set img").getAttribute("src");
// ... mouseover 事件 ...
$(".hotspots a").mouseout(function() {
// 使用存储的原始SRC
$('.img-set img').attr("src", originalImgSrc);
// ... 隐藏文本 ...
});
});上述代码中的var originalImgSrc = document.getElementsByClassName(".img-set img").getAttribute("src");是错误的。
错误原因:
由于上述错误,originalImgSrc变量将不会正确获取到图片SRC,很可能为undefined或导致运行时错误,从而使mouseout功能失效。
为了正确获取原始图片SRC并使其在mouseout事件中可用,我们需要:
以下是修正后的mouseout事件处理函数,结合了正确的原始SRC获取方式:
$(document).ready(function() {
// 在DOM加载完成后,使用正确的选择器获取原始图片SRC
// 方式一:使用 jQuery 选择器
var originalImgSrc = $(".img-set img").attr("src");
// 方式二:使用原生 JavaScript 的 querySelector
// var originalImgSrc = document.querySelector(".img-set img").getAttribute("src");
$(".hotspots a").mouseover(function() {
var newSrc = $(this).attr('data-src');
$(".img-set img").attr("src", newSrc);
var targetId = $(this).data("target");
$("#" + targetId).removeClass("opacity-0");
});
$(".hotspots a").mouseout(function() {
// 恢复到之前存储的原始图片SRC
$('.img-set img').attr("src", originalImgSrc);
// 隐藏相关文本
var targetId = $(this).data("target");
$("#" + targetId).addClass("opacity-0");
});
});通过将originalImgSrc变量定义在$(document).ready()内部但所有事件处理函数外部,它就成为了一个局部变量,可以被mouseover和mouseout事件处理函数访问,从而解决了作用域和数据持久性问题。
将上述HTML结构和JavaScript代码整合,得到一个完整的、可运行的示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>鼠标悬停图片切换与恢复</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
body { font-family: Arial, sans-serif; display: flex; flex-direction: column; align-items: center; margin-top: 50px; }
.col-12 { width: 80%; max-width: 600px; margin-bottom: 20px; text-align: center; }
.img-set img { max-width: 100%; height: auto; border: 1px solid #ccc; }
.hotspots { margin-top: 20px; }
.hotspots a { display: inline-block; margin: 0 10px; padding: 8px 15px; background-color: #007bff; color: white; text-decoration: none; border-radius: 5px; transition: background-color 0.3s ease; }
.hotspots a:hover { background-color: #0056b3; }
.name-wrapper { margin-top: 10px; }
.some-name { font-size: 1.2em; font-weight: bold; color: #333; transition: opacity 0.3s ease; }
.opacity-0 { opacity: 0; } /* 初始隐藏 */
</style>
</head>
<body>
<div class="col-12 text-center">
<h3>产品展示</h3>
<div class="name-wrapper">
<span id="name1" class="some-name opacity-0">产品A详情</span>
<span id="name2" class="some-name opacity-0">产品B详情</span>
</div>
</div>
<div class="col-12">
<div class="img-set">
<img src="https://via.placeholder.com/600x400/FF0000/FFFFFF?text=Original_Image" alt="原始图片" />
</div>
<div class="hotspots">
<a href="#" data-target="name1">查看产品A</a>
<a href="#" data-target="name2">查看产品B</a>
</div>
</div>
<script>
$(document).ready(function() {
// 在DOM加载完成后,获取原始图片SRC并存储
var originalImgSrc = $(".img-set img").attr("src");
// 鼠标悬停事件
$(".hotspots a").mouseover(function() {
var newSrc = $(this).attr('data-src');
$(".img-set img").attr("src", newSrc);
var targetId = $(this).data("target");
$("#" + targetId).removeClass("opacity-0");
});
// 鼠标移开事件
$(".hotspots a").mouseout(function() {
// 恢复到原始图片SRC
$('.img-set img').attr("src", originalImgSrc);
// 隐藏相关文本
var targetId = $(this).data("target");
$("#" + targetId).addClass("opacity-0");
});
});
</script>
</body>
</html>通过本教程,我们学习了如何利用jQuery和原生JavaScript实现鼠标悬停图片切换及智能恢复原始图片的功能。关键在于理解如何正确地在DOM加载时捕获并存储原始图片SRC,并在mouseout事件中利用它,从而避免了硬编码,提升了代码的可维护性和可扩展性。掌握这些技术,您将能更灵活地创建动态且用户友好的网页交互效果。
以上就是实现鼠标悬停图片切换与智能恢复原始SRC的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号