jQuery是一个快速、简洁的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互。在HTML列表上实现动态鼠标悬停效果是一种常见的交互方式,可以增强用户体验。
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
.list-item {
padding: 10px;
margin: 5px;
background-color: #f0f0f0;
transition: all 0.3s ease;
}
</style>
</head>
<body>
<ul id="myList">
<li class="list-item">项目1</li>
<li class="list-item">项目2</li>
<li class="list-item">项目3</li>
</ul>
<script>
$(document).ready(function() {
$(".list-item").hover(
function() { // 鼠标进入
$(this).css({
"background-color": "#e0e0e0",
"transform": "scale(1.05)"
});
},
function() { // 鼠标离开
$(this).css({
"background-color": "#f0f0f0",
"transform": "scale(1)"
});
}
);
});
</script>
</body>
</html>
$(document).ready(function() {
// 动态添加列表项
$("#addItem").click(function() {
var newItem = $("<li class='list-item'>新项目</li>");
$("#myList").append(newItem);
// 对新添加的项应用悬停效果
applyHoverEffect(newItem);
});
// 初始应用悬停效果
applyHoverEffect($(".list-item"));
function applyHoverEffect(element) {
element.hover(
function() {
$(this).css({
"background-color": "#d0d0d0",
"font-weight": "bold"
});
},
function() {
$(this).css({
"background-color": "#f0f0f0",
"font-weight": "normal"
});
}
);
}
});
原因:直接绑定的事件只对初始存在的元素有效
解决方案:使用事件委托或单独为新元素绑定事件
// 使用事件委托
$(document).ready(function() {
$("#myList").on("mouseenter", ".list-item", function() {
$(this).css("background-color", "#e0e0e0");
}).on("mouseleave", ".list-item", function() {
$(this).css("background-color", "#f0f0f0");
});
});
原因:为每个列表项单独绑定事件处理程序
解决方案:使用事件委托或限制同时应用的悬停效果数量
// 优化性能的事件委托方式
$(document).on({
mouseenter: function() {
$(this).addClass("hover-effect");
},
mouseleave: function() {
$(this).removeClass("hover-effect");
}
}, ".list-item");
$(document).ready(function() {
var hoverTimer;
$(".list-item").hover(
function() {
var $this = $(this);
hoverTimer = setTimeout(function() {
$this.css("background-color", "#e0e0e0");
}, 300); // 延迟300毫秒
},
function() {
clearTimeout(hoverTimer);
$(this).css("background-color", "#f0f0f0");
}
);
});
<ul id="productList">
<li class="product-item" data-desc="这是产品1的详细描述">产品1</li>
<li class="product-item" data-desc="这是产品2的详细描述">产品2</li>
</ul>
<div id="productDesc"></div>
<script>
$(document).ready(function() {
$(".product-item").hover(
function() {
var desc = $(this).data("desc");
$("#productDesc").text(desc).show();
},
function() {
$("#productDesc").hide();
}
);
});
</script>
没有搜到相关的文章