2015-11-10 8 views
0

上午爲iOS 8構建了一個頁面,我需要完全阻止內置滾動並通過javascript單獨滾動頁面(例如,使用scrollTo()方法)。在iOS 8上自定義JavaScript滾動 - 有可能嗎?

我不想隱藏滾動條,只是爲了阻止滾動操作(看起來像是通過event.preventDefault()完成的)並實現了JavaScript中的滾動操作。

可以這樣做嗎?

回答

0

JavaScript有一個scroll event,遺憾的是它不可取消(即event.preventDefault()不起作用)。

但是,如果您只使用支持觸摸的設備並通過觸摸完成滾動,則會在滾動時觸發touchmove event,這是可取消的,使用event.preventDefault(),並且將防止滾動。請注意,這也可以防止其他需要觸控移動的操作,例如縮放。

另一種解決方案,在某些設備上可能看起來有點不好,它將文檔的滾動位置存儲在要鎖定它的位置,並在用戶滾動時轉到這些座標。類似以下內容:

var locked = false, 
    posX = 0, 
    posY = 0; 

var lock = function(){ 
    //assign the current coordinates to the position variables 
    var doc = document.documentElement; 
    posX = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0); 
    posY = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); 

    locked = true; 
}; 
var unlock = function(){ 
    locked = false; 
}; 

document.addEventListener('scroll', function(e){ 
    if(locked) 
     scrollTo(posX, posY); 
}); 
+0

嗨@Kiren能否詳細介紹一下你最後的解決方案(沒有完全理解它);什麼時候我會存儲文檔的滾動位置?順便說一句,謝謝你的回覆。 – Sonofkyuss

+0

滾動位置是您希望文檔被鎖定的位置。這是一個[示例](http://jsbin.com/qenowo/edit?js輸出) – Kiren

+0

這真的很好,但我需要能夠實現通過JS滾動一旦它被鎖定(滾動將始終被鎖定)。所以像你最初提到的touchmove事件允許event.preventDefault();我認爲這可能是我唯一的門道。不管怎麼說,多謝拉! – Sonofkyuss

0

幾年前,我做了一個使用iScroll的科爾多瓦/ phonegap應用程序。當時,它幫助我解決了一些嚴重的滾動視圖問題。

您可以禁用滾動,力招等

或許可以爲你工作。

+0

謝謝!不幸的是,使用iScroll不是一種選擇。我只是需要它在iOS 8上工作。特別是爲了解決在滾動/滑動過程中重新繪製設備和執行JavaScript之間的差距/延遲。即使使用iOS 8,滾動期間的JavaScript執行也不是100%無縫的;換句話說,如果我在滾動時在屏幕上移動某些東西,它總是會稍微延遲。我有一個工作的例子,我正在一個onscroll處理程序中移動一個剪輯矩形;那將是最好的例子。 – Sonofkyuss

+0

是的,那會很好,讓我知道你什麼時候完成你的例子,所以我可以進一步幫助你! –

+0

已經完成了很長時間,很多頭疼:) [鏈接] – Sonofkyuss