iOS 8上的自定义JavaScript滚动-是否可能
Custom JavaScript scrolling on iOS 8 - is it possible?
我正在为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应用程序。当时它帮助我解决了一些非常糟糕的滚动视图问题。
您可以禁用滚动、强制移动等
也许它对你有用。
相关文章:
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- javascript跨浏览器确定用户是否滚动到页面底部
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- CSS3:当页面向下滚动到第一个视口时,是否可以在元素上触发转换
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 如何发现用户是否使用jQuery滚动到HTML容器的末尾
- 如何检测用户是否移动了滚动条
- 确定代码镜像是否滚动到底部
- 如何判断某个内容是否滚动到视图中
- 如何使用JQuery来检测用户是否滚动到页面底部
- 如何检查元素是否滚动
- 如何检测浏览器窗口是否滚动到底部
- 如何检测用户是否滚动了一定距离
- scrollTop检查用户是否滚动到某个元素
- 检查Bootstrap选项卡内容是否滚动到末尾
- 如何使用jQuery检查DIV是否滚动到底部
- 检测是否滚动到底部
- Jquery:检查窗口是否滚动过一次并执行一些操作