Question

I made a little jquery script, when the mouse is over a div .frame, it is slidetoggleing two divs: .contentTop and .contentBottom It's working well but I have some issues when I'm applying the script to 2 divs, first when I'm moving really fast the mouse from one div .frame to the other one it mess the script, then when the mouse is over .frame I would like .contentBottom to be over the other.frame

my css are:

    .frame{
    background-color: #FFFFFF;
    position:relative;
    width:40%;
}


.contentTop { 
    position:absolute;
    display:none;
    background-color: #FFFFFF;
}

.contentBottom { 
    position:absolute;
    background-color: #FFFFFF;
    display: none;
}

and my jquery:

$(document).on('mouseenter', '.frame', function() {
    var el = $(this);
    var hauteur = el.height();
    var largeur = el.width();
    contentBottom = el.children(".contentBottom");
    contentTop = el.children(".contentTop");
    contentTop.css({"bottom":hauteur,"width":largeur}); 
    contentTop.html('top top top top');
    contentBottom.html('bottom bottom bottom bottom<br>bottom bottom bottom bottom<br>bottom bottom bottom bottom<br>bottom bottom bottom bottom<br>');
    contentBottom.css({"top":hauteur,"width":largeur});
    contentBottom.stop(true, true).slideToggle(300);
    contentTop.stop(true, true).slideToggle(300);   
}).on('mouseleave','.frame', function() {
    var el = $(this);
    contentBottom = el.children(".contentBottom");
    contentTop = el.children(".contentTop");
    contentTop.stop(true, true).slideToggle(300, function(){
        contentTop.html('');
    });
    contentBottom.stop(true, true).slideToggle(300, function(){
        contentBottom.html('');
    });
});

I made a jsfiddle here: http://jsfiddle.net/malamine_kebe/2ANkq/2/

Was it helpful?

Solution

All you need: LIVE DEMO

$(document).on('mouseenter mouseleave', '.frame', function( e ) {

    var $el=$(this),
        h = $el.height(),
        w = $el.width(),
        $bott = $el.find(".contentBottom"),
        $top  = $el.find(".contentTop"),
        mEnt  = e.type == "mouseenter"; // boolean

    // this
    $el.stop().animate({borderRadius: mEnt? 0 : 3 });

    // top
    $top.css({bottom: h, width: w, zIndex:1})
        .html('top top top top')
        .stop().slideToggle(function(){
             $(this).css({zIndex:0});
        });

    // bottom    
    $bott.css({top: h, width: w,  zIndex:1})
         .html('bottom bottom bottom bottom<br>bottom bottom bottom bottom<br>bottom bottom bottom bottom<br>bottom bottom bottom bottom<br>')
         .stop().slideToggle(function(){
             $(this).css({zIndex:0});
         });

});

Note: .stop() method, and mEnt boolean variable and it's use with Conditional Operator statement ? ifTrue : ifFalse

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top