首先,我已经创建了一个基本的演示,展示了我目前所拥有的here。
其次这是我正在使用的javascript。
var boxes = ["#one","#two","#three","#four"];
boxhover = function(a){
$("#hover").hover(
function(){
$(a).stop(true).delay(250).animate({opacity:1});
},
function(){
$(a).stop(true).delay(250).animate({opacity:0});
}
)
}
for(var i=0; i<boxes.length; i++)
{
boxhover(boxes[i])
}
我希望实现的是让每个盒子一个接一个地悬停,延迟时间为250.我已经尝试为动画功能添加延迟(如上所示)以及setTimeout在for循环中,但没有运气。任何帮助都会很棒。
答案 0 :(得分:3)
您可以将数组索引作为附加参数传递给boxhover
函数,然后对延迟因子执行乘法。
var boxes = ["#one","#two","#three","#four"];
boxhover = function(a, i){
$("#hover").hover(
function(){
$(a).stop(true).delay(250 * i).animate({opacity:1});
},
function(){
$(a).stop(true).delay(250 * i).animate({opacity:0});
}
)
}
for(var i=0; i<boxes.length; i++)
{
boxhover(boxes[i], i)
}
替代解决方案:
为避免在#hover
上绑定多个悬停事件处理程序并且必须维护一组ID,您可以执行以下操作:
$("#hover").on({
'mouseenter': function(e) {
// Animate the box set to visible
animateBoxSet(1);
},
'mouseleave': function(e) {
// Animate the box set to invisible
animateBoxSet(0);
}
});
function animateBoxSet(opacity) {
// For each box
$('.box').each(function (index, element) {
// Set the delay based on the index in the set
var delay = 250 * index;
// Animate it the visibility after the delay
$(element).stop(true).delay(delay).animate({
'opacity': opacity
});
});
}