上午爲iOS 8構建了一個頁面,我需要完全阻止內置滾動並通過javascript單獨滾動頁面(例如,使用scrollTo()方法)。在iOS 8上自定義JavaScript滾動 - 有可能嗎?
我不想隱藏滾動條,只是爲了阻止滾動操作(看起來像是通過event.preventDefault()完成的)並實現了JavaScript中的滾動操作。
可以這樣做嗎?
上午爲iOS 8構建了一個頁面,我需要完全阻止內置滾動並通過javascript單獨滾動頁面(例如,使用scrollTo()方法)。在iOS 8上自定義JavaScript滾動 - 有可能嗎?
我不想隱藏滾動條,只是爲了阻止滾動操作(看起來像是通過event.preventDefault()完成的)並實現了JavaScript中的滾動操作。
可以這樣做嗎?
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);
});
謝謝!不幸的是,使用iScroll不是一種選擇。我只是需要它在iOS 8上工作。特別是爲了解決在滾動/滑動過程中重新繪製設備和執行JavaScript之間的差距/延遲。即使使用iOS 8,滾動期間的JavaScript執行也不是100%無縫的;換句話說,如果我在滾動時在屏幕上移動某些東西,它總是會稍微延遲。我有一個工作的例子,我正在一個onscroll處理程序中移動一個剪輯矩形;那將是最好的例子。 – Sonofkyuss
是的,那會很好,讓我知道你什麼時候完成你的例子,所以我可以進一步幫助你! –
已經完成了很長時間,很多頭疼:) [鏈接] – Sonofkyuss
嗨@Kiren能否詳細介紹一下你最後的解決方案(沒有完全理解它);什麼時候我會存儲文檔的滾動位置?順便說一句,謝謝你的回覆。 – Sonofkyuss
滾動位置是您希望文檔被鎖定的位置。這是一個[示例](http://jsbin.com/qenowo/edit?js輸出) – Kiren
這真的很好,但我需要能夠實現通過JS滾動一旦它被鎖定(滾動將始終被鎖定)。所以像你最初提到的touchmove事件允許event.preventDefault();我認爲這可能是我唯一的門道。不管怎麼說,多謝拉! – Sonofkyuss