我是JS / JQuery的新手,我无法弄清楚如何保留这段代码D.R.Y,如果它甚至可能,我都不知道。我正在使用JQuery对图像进行悬停效果。 Box1是div,img_hover_effect是悬停时的叠加。
JS:
$('.box1').hover(function () {
$('.img_hover_effect').fadeIn(500);
}, function () {
$('.img_hover_effect').fadeOut(400);
});
$('.box2').hover(function () {
$('.img_hover_effect_2').fadeIn(500);
}, function () {
$('.img_hover_effect_2').fadeOut(400);
});
$('.box3').hover(function () {
$('.img_hover_effect_3').fadeIn(500);
}, function () {
$('.img_hover_effect_3').fadeOut(400);
});
答案 0 :(得分:2)
使用data
元素上的.box
属性来存储target
元素选择器。
此外,为所有.boxn
元素添加相同的类以在所有元素上绑定event
。
HTML:
<div class="mybox box" data-target=".img_hover_effect"></div>
<div class="mybox box2" data-target=".img_hover_effect_2"></div>
<div class="mybox box3" data-target=".img_hover_effect_3"></div>
使用Javascript:
$('.mybox').hover(function () {
$($(this).data('target')).fadeIn(500);
}, function () {
$($(this).data('target')).fadeOut(400);
});
答案 1 :(得分:1)
您可以使用循环来完成此操作。
循环内部的匿名函数用于防止破坏jQuery事件,请尝试:
for(var i = 1; i <= 3; i++){
(function(num){
$('.box' + num).hover(function() {
$('.img_hover_effect' + (num == 1 ? "" : num)).fadeIn(500)
}, function(){
$('.img_hover_effect' + (num == 1 ? "" : num)).fadeOut(400)
})
})(i)
}
<强> Demo 强>
答案 2 :(得分:0)
怎么样:
function hover(div, overlay) {
$(div).hover(function() {
$(overlay).fadeIn(500);
}, function() {
$(overlay).fadeOut(400);
});
}
然后你可以为每个div和叠加调用它,如下所示:
hover('.box1', '.img_hover_effect');
所以你有一个函数可以用于500ms的fadeIn和400ms的fadeOut。如果你需要不同的fadeIn-和fadeOut-intervalls,你甚至可以用这些作为附加参数来调整函数。
答案 3 :(得分:0)
尝试组合选择器
$(".box1, .box2, .box3").hover(function (e) {
$(".img_hover_effect_" + e.target.className.slice(-1)).fadeIn(500);
}, function (e) {
$(".img_hover_effect_" + e.target.className.slice(-1)).fadeOut(400);
});