我建立了一個尋呼機,我目前擺弄周圍,以禁用每個設備上滾動,如果移動菜單打開。一個尋呼機禁用滾動
我給內容包裝器一類的.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')
}
您可能想要考慮正確地阻止JavaScript中的滾動事件。 document.addEventListener('scroll',function(event){event.preventDefault(); return;},false)。當菜單打開/關閉時,您可以添加和刪除它。 – skyline3000
@ skyline3000我以爲,那個不能設置回默認的preventDefault ?! – Sam94
那麼,您將創建一個函數來執行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