iScroll - 保留原生垂直滚动 - 适用于 iOS,不适用于 Android

Posted

技术标签:

【中文标题】iScroll - 保留原生垂直滚动 - 适用于 iOS,不适用于 Android【英文标题】:iScroll - Preserving native vertical scroll - works in iOS, not Android 【发布时间】:2011-12-17 07:27:27 【问题描述】:

我正在使用 iScroll.js 滚动浏览移动页面上的项目轮播。我发现了以下修复程序,它监听垂直移动并停止 iScroll 脚本控制,让原生垂直滚动发生:

        onBeforeScrollStart: function(e) 
        try 
            point = e.touches[0];
            pointStartX = point.pageX;
            pointStartY = point.pageY;
         catch(e) 
        null;
    ,
    onBeforeScrollMove: function(e) 
        try 
            deltaX = Math.abs(point.pageX - pointStartX);
            deltaY = Math.abs(point.pageY - pointStartY);
            if (deltaX >= deltaY) 
                e.preventDefault();
             else 
                null;
            
         catch(e) 
    

我正在使用 trycatch,因为它在浏览器中测试时出现了一些问题(抱怨未定义点)。

我遇到的问题是它在 ios 上运行良好,在多个 i 设备上进行了测试,但在 android 上却不是那么好。如果用户尝试垂直滚动页面,首先将手指放在轮播上,页面不会滚动,因为 iScroll 仍然具有控制权。

知道如何让它在 Android 上运行,或者有任何指向它可能出错的地方吗?

编辑:

进行了一些调试,我发现了这可能不起作用的原因。当用户在 iOS 上触摸屏幕时,坐标会被更新,但在 Android 上,只会捕获第一组坐标。知道为什么会这样吗?

【问题讨论】:

你试过使用myScroll.disable()myScroll.enable()吗? 【参考方案1】:

您的 onBeforeScrollMove 范围内似乎没有“要点”。 此外,一些 Android 设备可能会通过多点触控调用点击事件(我无法确认这一点,但由于平台碎片化只能进行理论分析)

我有一个很好的脚本,我很快就会发布它,它接受点击事件并使用“鼠标”作为触摸的标识符属性来模拟一个独特的多点触控事件,这可能对调试有一些帮助。我会尽量在明天晚上之前将项目上线。

需要添加一些更新和项目,但这里有一个链接:

https://github.com/skhameneh

编辑:更正,你甚至更新“点”吗?它似乎超出了这段代码的范围,并在其中进行了更改。如果您发布其余代码可能会有所帮助。

【讨论】:

【参考方案2】:

iScroll 的创建者实际上有一个端口,它似乎完全按照您描述的那样工作,即水平分页并仍然允许垂直滚动。 https://github.com/cubiq/2-way-iScroll

【讨论】:

以上是关于iScroll - 保留原生垂直滚动 - 适用于 iOS,不适用于 Android的主要内容,如果未能解决你的问题,请参考以下文章

如何将 iScroll4 与 SwipeView 一起使用?

iScroll 4.2.5 中文API

iscroll4实现下拉刷新和下拉加载更多

使用 Javascript 模拟原生滚动

是否可以将集合视图保留在另一个集合视图中?

IScroll的诞生和缺点