2016-07-29 127 views
0

我建立了一個尋呼機,我目前擺弄周圍,以禁用每個設備上滾動,如果移動菜單打開。一個尋呼機禁用滾動

我給內容包裝器一類的.no-scrolling如果單擊漢堡包菜單按鈕。這個類有以下類型:

.no-scrolling { 
    position: fixed; 
    overflow: hidden; 
} 

這種運作良好,桌面和移動(觸摸)設備,但如果類被激活不幸的是,頁面跳轉到頁面的最頂端。那麼,我明白,爲什麼會發生這種情況,但我不知道解決方法。

如果用戶已經滾動到,比方說,在頁面的一半,然後決定打開菜單,頁面不需要跳轉到頂部,但要留在這個確切位置。

你會如何做到這一點?


編輯

由於對skyline3000的建議,我加了防止違約。不幸的是,這個代碼並不像它應該的那樣工作。 在我的iPhone和我的iPad(專業版)上它可以正常工作,但在我的MacBook上卻不行...

有什麼問題嗎?

function animateToggle(click, move) { 

    $('.hamburger-menu').on(click, function() { 

    // some code to add an overlay and animate the button 

    if (prevent === true) { 
     $('html').unbind(move).on(move, function() { 
     prevent = false; 
     }); 
    } 
    else { 
     $('html').on(move, function(e){ 
     e.preventDefault(); 
     prevent = true; 
     }); 
    } 
    var prevent = false; 

    }); 

} // animateToggle() 

if (touchscreen === true) { 
    animateToggle('touchend', 'touchmove'); 
} 
else if (touchscreen === false) { 
    animateToggle('click', 'mousemove') 
} 
+0

您可能想要考慮正確地阻止JavaScript中的滾動事件。 document.addEventListener('scroll',function(event){event.preventDefault(); return;},false)。當菜單打開/關閉時,您可以添加和刪除它。 – skyline3000

+0

@ skyline3000我以爲,那個不能設置回默認的preventDefault ?! – Sam94

+0

那麼,您將創建一個函數來執行preventDefault,然後根據需要添加和刪除事件偵聽器:'function preventDefault(event){event.preventDefault(); }'...然後當菜單打開時,您可以執行'document.addEventListener('scroll',preventDefault,false);'當菜單關閉時'document.removeEventListener('scroll',preventDefault,false);'See我的其他(有點)相關答案之一:http://stackoverflow.com/questions/7488336/re-enabling-touchmove-eventlistener-iphone-app-with-phone-gap/7490418#7490418 – skyline3000

回答

0

您是否嘗試過沒有此「位置:固定」的測試?因爲只是「溢出:隱藏」足以「鎖定」的頁面,它是

+0

在桌面設備上就足夠了,但不幸的是,您可以在觸摸設備上滾動:/ – Sam94

0

設置位置爲「固定」跳轉到頂部,因爲你尚未設定任何頂部/底部的值,因此默認情況下它們是「0」 。

爲了防止這種情況,你應該保存你的設置滾動之前的位置偏移,並將其設置爲最高,例如「$(文件)。單擊」

var ftop = $(window).scrollTop(); 
$('').css({position: 'fixed', top: ftop + 'px'}); 
0

應用代碼

.no-scrolling { 
    overflow: hidden; 
} 

添加到Window元素,而不是點擊容器。我不認爲你需要這個位置:固定。