【问题标题】:Hide div at mouse inactiv set to one div在鼠标不活动设置为一个 div 时隐藏 div
【发布时间】:2012-04-04 19:47:58
【问题描述】:

我找到了一个脚本,想稍微修改一下。当用户在某个 div #gallery 上处于非活动状态或处于活动状态时,我试图为 div #menuwrap 设置动画。

现在它在第一次动画后,即使在#gallery 之外仍然会动画。

非常感谢任何帮助!

演示:http://jsfiddle.net/m2FvY/1/

   $('#gallery').mouseover(function() {
        var interval = 1;
       setInterval(function(){            
           if(interval == 5){
               $('#menuwrap').animate({top: '-50px'}, 100); 
               interval = 1;
           }
           interval = interval+1;
            console.log(interval);
        },200); 

        $('#gallery').bind('mousemove keypress', function() {
            $('#menuwrap').animate({top: '0'}, 100); 
            interval = 1;
        }); 
});

【问题讨论】:

    标签: jquery intervals onmousemove


    【解决方案1】:

    JSFIDDLE DEMO

    只要用户在#gallery 上触发 mousemove 或 keypress 事件,延迟计时器就会重置。您还可以在其中添加悬停事件,以确保菜单在悬停在#gallery 上时永远不会隐藏。

        var interval = 1;
    
        function delayCheck()
        {
           if(interval == 5)
           {
               $('#menuwrap').animate({top: '-50px'}, 100);
               interval = 1;
           }
           interval = interval+1; console.log(interval);
        }
    
        $('#gallery').bind('mousemove keypress', function() {
            $('#menuwrap').animate({top: '0'}, 100);
            interval = 1;
    
            // reset the delay timer
            clearInterval(_delay); console.log('reset timer');
            _delay = setInterval(delayCheck, 500);
        });
    
    
        // starts delay timer when page loads
        _delay = setInterval(delayCheck, 500);
    

    回答第 2 部分

    JSFIDDLE DEMO #2

    仅在 #gallery 事件 mousemove 或 keypress 被触发后检查不活动。一旦用户移出#gallery 框,它将终止delayCheck() 并将#menuwrap 设置回顶部:-50px。

        var interval = 1;
        _delay = 0;
    
        function delayCheck()
        {
           if(interval == 5)
           {
               $('#menuwrap').animate({top: '-50px'}, 100);
               interval = 1;
               clearInterval(_delay);
           }
           interval = interval+1;
           console.log(interval);
        }
    
        // turn delayCheck() ON, when mousing to #gallery
        $('#gallery').bind('mousemove keypress', function()
        {
            console.log("mousemove keypress");
    
            $('#menuwrap').animate({top: '0'}, 100);
            interval = 1;
    
            // reset delayCheck
            clearInterval(_delay);
            _delay = setInterval(delayCheck, 500);
        });
    
        // turn delayCheck() OFF, when mousing out of #gallery
        $('#gallery').mouseout(function(){
            console.log("mouseout");
            $('#menuwrap').animate({top: '-50px'}, 100);
            interval = 1;
    
            clearInterval(_delay);
        });
    

    【讨论】:

    • 非常感谢!不知道如何使延迟检查仅在用户在#gallery 上处于非活动状态时触发......你和我在一起吗?我不希望当用户悬停时#menuwrap 仅在用户悬停时才变为-50px #menuwrap #gallery
    • jsfiddle.net/959wF/4 更新了悬停,但它仍然在#gallery 之外显示动画
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2012-01-10
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多