【问题标题】:scrolling div using jquery setTimeout & mouseenter & mouseleave使用 jquery setTimeout & mouseenter & mouseleave 滚动 div
【发布时间】:2012-02-15 20:56:30
【问题描述】:

我有一个 div 容器,它贴在页面底部。当鼠标移出 div 时,我希望 div 在 3 秒后下沉。当鼠标移到 div 上时,我希望 div 上升到原来的位置。问题是当鼠标快速移出和移出 div 时,div 会不断向上移动到页面顶部。

   var timer = null;
   var moving_distance = $("#scroller").height()-($(window).height()-$("#slideshow").height());
   $("#scroller").mouseenter(function(event){

    if(timer)
    {
     clearTimeout(timer);

         $("#scroller").animate({top:'-='+moving_distance},1000);

    }

}).mouseleave(function(event){

    if(!timer){

    timer = setTimeout(function(){

        $("#scroller").animate({top:'+='+moving_distance},1000);
    },3000);
    }
}); 

【问题讨论】:

    标签: javascript jquery settimeout mouseenter mouseleave


    【解决方案1】:

    我已经成功地在我想要的动画前面堆叠了一个空动画,而不是使用 setTimeout。

    例如,

     var moving_distance = $("#scroller").height()-($(window).height()-$("#slideshow").height()); 
     var firstEnter = true;
     $("#scroller").mouseenter(function(event){ 
        if (firstEnter)
            firstEnter = false;
        else {
            $("#scroller").stop();
            $("#scroller").animate({top:'+=0', 3000);
            $('#scroller').animate({top:'-='+$('#scroller').top()), 1000);
        }
    }).mouseleave(function(event){ 
        $('#scroller').stop();
        $("#scroller").animate({top:'+=0', 3000);
        $('#scroller').animate({top:'+='+moving_distance), 1000);
    });  
    

    我从您的描述中猜测您希望 div 保持静止,直到鼠标移入 div。然后当鼠标第一次离开时它应该下沉。之后,当鼠标再次回来时,它应该回到原来的位置。我认为这将接近做到这一点。

    HTH

    【讨论】:

    • 抱歉,还是不行。我不希望 div 在页面加载后移动。它应该只在 Mouseleave 事件触发时向上移动。如果没有 timer 变量,当 mouseenter 触发时,div 总是向上移动。
    • 我修改了代码更完整。看看这是否会引发任何想法。
    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多