2012-10-16 40 views
3

我有兩個事件:一個是onclick,當我點擊菜單時滾動到某個div,另一個在onscroll這個時候「突出顯示」菜單項滾動靠近div。當另一個執行jquery時,「不允許」執行一個事件

我的問題是:我怎麼能「禁止」一個envent的執行,而另一個正在執行。

這裏是我的代碼:

function goToByScroll(id){ 
    var value = $(id).offset().top; 
    var scrl = value - 154; 
    $('html,body').animate({ 
    scrollTop: scrl}, 
    'slow'); 
} 

//scroll menu control 
$("#menu-home ul li a").click(function(e) { 
    e.preventDefault(); 
    $("#menu-home ul li a").removeClass('menu-home-active'); 
    $(this).addClass('menu-home-active'); 
    goToByScroll($(this).attr("href"));  
}); 

//scroll bar control 
$(window).scroll(function() { 
    var scrv = $(this).scrollTop(); 
    var allmenu = $("#menu-home ul li a"); 
    if(scrv == 0){ 
    allmenu.removeClass('menu-home-active'); 
    $('#menu-div1').addClass('menu-home-active'); 
    } 
    if(scrv > 458 && scrv < 478){ 
    allmenu.removeClass('menu-home-active'); 
    $('#menu-div2').addClass('menu-home-active'); 
    } 
    if(scrv > 989 && scrv < 1009){ 
    allmenu.removeClass('menu-home-active'); 
    $('#menu-div3').addClass('menu-home-active'); 
    } 
    if(scrv >= 1324){ 
    allmenu.removeClass('menu-home-active'); 
    $('#menu-div4').addClass('menu-home-active'); 
    } 
}); 

感謝

回答

3

第一個;當滾動事件(或其他方式)時,點擊事件不會觸發。當你看到滾動事件時,點擊事件已經完成。

你應該做的是設置什麼變量上的click事件是這樣的:

function goToByScroll(id) { 
    window.isAutoScrolling = true; 
    var value = $(id).offset().top; 
    var scrl = value - 154; 
    $('html,body').animate({scrollTop: scrl}, 'slow', goToByScrollCompleted); 
} 
function goToByScrollCompleted() { 
    window.isAutoScrolling = false; 
} 

然後添加到滾動事件的開始這樣的:

if(window.isAutoScrolling) return; 

而且,對於註冊goToByScrollCompleted,這可能可以用很多方式完成,但是,因爲我不知道你怎麼做滾動我不能說。

+0

我想我把變量在一個錯誤的地方完成滾動。我使用自動滾動功能更新了代碼。謝謝 –

+0

我已經用新的goToByScroll函數更新了答案 – Alxandr

+0

完美!謝謝 –

1

你可以有全局布爾變量lock,檢查wheter這是假的,如果是的,它設置爲true,執行你的函數。然後重置它。

相關問題