views:

16

answers:

1

I am slowly learning how to modify and write jQuery from scratch and have been trying to modify some pre-written code, which simply makes an image opacity: 1 and all other images in the same HTML element opacity: 0.2.

When I use fadeTo and I move across the images fast it will stop doing the animation and hang for a while until it fixes itself. Could anyone advise on this situation.

Sorry for being a bit vauge :)

Here is the code:

$(window).load(function(){
var spotlight = {
     // the opacity of the "transparent" images - change it if you like
    opacity : 0.2,

    /*the vars bellow are for width and height of the images so we can make
    the <li> same size */
    imgWidth : $('#portfolio ul li').find('img').width(),
    imgHeight : $('#portfolio ul li').find('img').height()

};

//set the width and height of the list items same as the images
$('#portfolio ul li').css({ 'width' : spotlight.imgWidth, 'height' : spotlight.imgHeight });

//when mouse over the list item...
$('#portfolio ul li').hover(function(){

    //...find the image inside of it and add active class to it and change opacity to 1 (no transparency)
    $(this).find('img').addClass('active').fadeTo('fast', 1);

    //get the other list items and change the opacity of the images inside it to the one we have set in the spotlight array
    $(this).siblings('li').find('img').fadeTo('fast', 0.2);

    //when mouse leave...
}, function(){

    //... find the image inside of the list item we just left and remove the active class
    $(this).find('img').removeClass('active');

});

//when mouse leaves the unordered list...
$('#portfolio ul').bind('mouseleave',function(){
    //find the images and change the opacity to 1 (fully visible)
    $(this).find('img').fadeTo('fast', 1);
});

});

A: 

Use the hoverIntent plugin. It allows you to set a small configurable delay after which the hover is triggered and not just if you move your mouse over elements really fast.

Moin Zaman