2011-04-20 32 views
3

我有一個顯示onclick鏈接的div,我想在div外部單擊鼠標時隱藏(類似於大多數模式框功能) - 問題在於當用戶使用瀏覽器滾動條,被認爲是一個點擊隱藏DIV當使用滾動條時阻止mousedown功能

這是我用它來顯示DIV

$('.trigger').click(function(e){ 
    e.preventDefault(); 
    open_slideout(this); 
}); 

function open_slideout(el){ 
    $(document).unbind('mousedown'); 

    //code here to display the div if its not already shown 

    //close on click-out 
    $(document).bind('mousedown',function(){ 
     $(panel_id).removeClass('active').hide('fast'); 
     $(el).removeClass('active'); 
    }); 
    $('.panel.active').bind('mousedown',function(e){e.stopPropagation();}); 
    $('.trigger').bind('mousedown',function(e){e.stopPropagation();}); 
} 

所以我設置的stopPropagation如果他們點擊活動區域內,但就像我說的,如果他們使用滾動條它會隱藏div

回答

3

這似乎已經完成了招:

$(document.body).bind('mousedown',function(){ 
0
$(window).scroll(function(){ 
    scrolling = true; 
}); 

/*other code */ 
$(document).bind('mousedown',function(){ 
if(!scrolling){ 
     $(panel_id).removeClass('active').hide('fast'); 
     $(el).removeClass('active'); 
} 
    }).bind('mouseup',function(){ scrolling = false; }) 
/*other code */ 
+0

我看到你從這個想法來,但它不工作 - 當滾動事件,因爲滾動變量設置爲true執行(無論是通過js,鼠標滾輪還是瀏覽器滾動條),並且mousedown事件基於過去的滾動獲取變量狀態,而不是當前狀態 – GrandVizier 2011-04-20 20:39:22