You can pass the index of the array as an additional parameter to your boxhover function, and then multiply by the delay factor.
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) }
jsfiddle
Alternative solution:
To avoid binding multiple hover event handlers to #hover and having to maintain an array of identifiers, you can do the following:
$("#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 }); }); }
jsfiddle
source share