使用javascript在iphone/ipad上强制停止动量滚动

使用javascript在iphone/ipad上强制停止动量滚动,javascript,iphone,mobile,infinite-scroll,momentum,Javascript,Iphone,Mobile,Infinite Scroll,Momentum,有没有可能用javascript强制停止iphone/ipad上的动量滚动 额外:非常确定这是空中楼阁,但对于博纳点(荣誉和荣誉),在dom操作和应用scrollTo后,在强制停止之前以相同的势头继续滚动。如何使用?使用时,这实际上是非常可能的。lib消除了移动设备上300毫秒的点击延迟,并支持惯性/动量滚动期间的事件捕获 包含fastclick并将其附加到body元素后,停止滚动并转到顶部的代码如下所示: scrollElement.style.overflow = 'hidden'; scr

有没有可能用javascript强制停止iphone/ipad上的动量滚动


额外:非常确定这是空中楼阁,但对于博纳点(荣誉和荣誉),在dom操作和应用scrollTo后,在强制停止之前以相同的势头继续滚动。如何使用?

使用时,这实际上是非常可能的。lib消除了移动设备上300毫秒的点击延迟,并支持惯性/动量滚动期间的事件捕获

包含fastclick并将其附加到body元素后,停止滚动并转到顶部的代码如下所示:

scrollElement.style.overflow = 'hidden';
scrollElement.scrollTop = 0;
setTimeout(function() {
  scrollElement.style.overflow = '';
}, 10);
let html = document.querySelector('html');
window.addEventListener( 'touchend', function( e ){
    html.scrollTop = html.scrollTop;
});

诀窍是设置
溢出:隐藏
,这将停止惯性/动量滚动。有关的完整实现,请参见我的小提琴。

以下是我使用jQuery动画(作为onclick事件运行)的代码


通过在iPhone 6上测试,我找到了一种取消身体动量滚动的方法,方法是在touchend事件上指定html.scrollTop属性。看起来像这样:

scrollElement.style.overflow = 'hidden';
scrollElement.scrollTop = 0;
setTimeout(function() {
  scrollElement.style.overflow = '';
}, 10);
let html = document.querySelector('html');
window.addEventListener( 'touchend', function( e ){
    html.scrollTop = html.scrollTop;
});
在iOS 13上测试

UPD:上述解决方案在iOS 12上失败,因为实际的滚动元素在此版本中不是“html”

以下代码适用于12和13:

window.addEventListener( 'touchend', function( e ){
    window.scroll( 0, window.scrollY );
});

您是否尝试过设置滚动位置并禁用body/html上的溢出?也可以恢复滚动,在停止前查看滚动事件并计算您的
dy
。你们需要对摩擦力的值做出一个很好的估计(它减速的速度有多快)。如果我没弄错你的问题,我想我在这里回答了:好的,伙计们,谢谢。试着找出最后一个
dy
并从那里开始。是的,正如@insertusernamehere建议的那样
scrolltop
只有在滚动停止后才可用。我需要这个作为指示器来开始强制停止滚动,所以这似乎是不可能的。嗯,无论如何谢谢你!在不使用fastclick.js的情况下,将溢出重置为隐藏,然后返回自动或滚动是一个解决方案。只是别忘了暂停时间!这是我发现的第一个简单且跨浏览器工作的答案。请注意,
timeOut
不能设置为
0
设置
overflow:hidden
将使UI中的滚动没有响应。