iOS 8上的自定义JavaScript滚动-是否可能

Custom JavaScript scrolling on iOS 8 - is it possible?

本文关键字:是否 滚动 JavaScript 自定义 iOS      更新时间:2023-09-26

我正在为iOS 8构建一个页面,在那里我需要完全阻止内置滚动,并仅通过javascript滚动页面(例如使用scrollTo()方法)。

我不想隐藏滚动条,只是为了阻止滚动操作(似乎是通过event.prventDefault()完成的),并在JavaScript中实现滚动。

这能做到吗?

JavaScript有一个滚动事件,不幸的是它是不可取消的(即event.preventDefault()不工作)。

但是,如果您只使用支持触摸的设备,并且通过触摸进行滚动,则触摸移动事件将在滚动时触发,使用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制作了一个cordova/phonegap应用程序。当时它帮助我解决了一些非常糟糕的滚动视图问题。

您可以禁用滚动、强制移动等

也许它对你有用。