2011-06-30 196 views
3

有沒有辦法阻止在Android瀏覽器中滾動呈現的HTML頁面?以下不會出現在Android瀏覽器上的頁面滾動產生任何影響:防止在Android瀏覽器中滾動

var preventDefault = function(e) { 
    e.preventDefault(); 
    return false; 
}; 
document.addEventListener('touchmove',preventDefault,false); 
document.body.addEventListener('touchmove',preventDefault,true); 
window.addEventListener('touchmove',preventDefault,true); 

(我試過用鼓泡和關閉)

在我看來像Android這樣的Webkit使得「窗口「與文檔長度相同,因此滾動是在瀏覽器本身上完成的,而不是在文檔主體或DOM窗口對象上進行。奇怪的是,這正是iOS上的webkit所做的,但上面的代碼仍然有效。

回答

5

回答我自己的問題。

問題最終導致您需要捕獲並壓制ontouchstart以及以阻止瀏覽器滾動。這在iOS中絕對是不同的,但它在兩個平臺上的功能仍然相同。

實際的代碼,我結束了使用看起來有點像這樣:

var preventDefault = function(e){ 
    e.preventDefault(); 
}; 
var touchstart = function(e) { 
    document.addEventListener('touchstart', preventDefault,false); 
    document.addEventListener('touchmove', preventDefault,false); 
    /*do other stuff*/ 
}; 
var touchend = function(e) { 
    document.removeEventListener('touchstart', preventDefault,false); 
    document.removeEventListener('touchmove', preventDefault,false); 
}; 

element.addEventListener('touchstart', touchstart, false); 
element.addEventListener('touchend', touchend, false); 
+0

在這種情況下,什麼是「元素」? – Thys

+0

@MrThys,對不起。我實在不記得它是什麼,但我認爲它可能是文檔體,儘管它可能是一個'div'。我也不記得這是否與這個問題有關,但我也發現你必須應用一個「點擊」處理程序來防止事件發生衝突。我最終用'onclick =「void(0)」'寫出了某些'div'。 – Andrew