目前为止实现最好的 js 模拟滚动功能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
397023775qqcom
V2EX    Javascript

目前为止实现最好的 js 模拟滚动功能

  •  
  •   397023775qqcom 2017-05-13 17:06:24 +08:00 5886 次点击
    这是一个创建于 3110 天前的主题,其中的信息可能已经有所发展或是发生改变。

    simulation-scroll-y 是开源库 finger-mover 的一个插件,该插件的实现功能为移动端纵向模拟滚动。 基于 simulation-scroll-y 插件可以实现很多效果及功能,查看:Full demo

    安装&Usage

    finger-mover提供中英双语文档。

    安装和使用官方文档写的很清楚,这里就贴出地址:finger-mover 中文文档

    特性

    根据文档介绍他有如下特性:

    • 压缩后只有 4kb

    • 多手指触摸滚动元素时,并不会阻止滚动,且手指间的滚动衔接流畅,该功能的实现得益于Fingerd

    • 当手指划出屏幕时不会影响运行。在很多手机浏览器中,当手指划出屏幕时,现有开源解决方案中的运动会卡住

    • 支持下拉刷新,且给你完全自定义的机会

    • 支持无限滚动(加载更多)

    • 可以配合 simulation-scroll-x.js 实现 2d 滚动

    • 支持滚动条

    与现有解决方案的对比

    移动端模拟滚动的库有很多,例如:iscroll、xscroll、better-scroll 等等,那为什么还要一个 simulation-scroll-y 呢?答案是:这并不是一个轮子。不妨做如下对比:

    一、库体积

    库体积很大一部分是由框架所提供的功能决定的,但是在完成相同功能的前提下,simulation-scroll-y 应该算是最小的。

    simulation-scroll-y 作为 finger-mover 的插件,其体积只有 4.42kb,即使加上 finger-mover 本身的 11.12kb 也才只有 15.54kb,关键是 finger-mover 还提供了其他移动的插件,供你选择。

    如果你仅仅要实现一个模拟滚动已经下拉刷新、无限滚动的功能,那么使用 simulation-scroll-y 要比你一次性的引入其他框架如 iscroll 等要小的多。如果你要实现轮播图,完全可以使用 finger-mover 的轮播图插件,这比你使用 swiper 要划算的多。

    二、IOS 系统部分浏览器,手指划出屏幕,运动卡住

    在 UC 浏览器,手机 QQ 内的 webview 都会出现此类问题。

    看下图:

    运动卡住

    simulation-scroll-y 则不会出现这样的问题:

    运动不会卡住

    三、多手指操作问题

    大多数的实现中,当多指操作时,会阻止运动,如下图:

    运动卡住

    另外一些不阻止滚动的实现中,虽然能滚动,但是也会出现奇葩的 bug,如下图所示:

    在这个实现中,虽然当第二根手指触摸屏幕时依然能够滚动,但是当拿开第一个手指时,连续滑动第二根手指,第二根手指并不能操作滚动元素,且在第二根手指滑动的过程中,连续使用第一根手指点按屏幕,会出现奇葩滚动动作。

    多指操作奇葩 bug

    以上问题,在 simulation-scroll-y 则不会出现,无论有几根手指触摸屏幕,simulation-scroll-y 都将控制权交给第一根手指,如果第一个手指拿开,那么第二根手指将继承第一根手指的状态,完美衔接滚动,此功能的实现得益于 Fingerd,如下图:

    运动不会卡住

    四、下拉刷新的问题

    一些现有实现中,在下拉刷新后,迅速上滑,然后再滑动下来,你会发现下拉挂掉了,永远收不回去,如下图:

    多指操作奇葩 bug

    另外的一些实现则规定了下拉刷新的形式:下拉后是停留等待 还是 不停留等待

    simulation-scroll-y 则是完全给你自定义下拉操作的机会,你可以实现任何形式的下拉刷新操作,另外 simulation-scroll-y 在你滚动页面的过程中完全不会影响下拉操作,详情请查看 pullDown 选项。

    6 条回复    2017-05-14 14:26:10 +08:00
    Explorare
        1
    Explorare  
       2017-05-13 17:37:32 +08:00
    多谢推荐,资瓷一下。
    chairuosen
        2
    chairuosen  
       2017-05-13 17:39:56 +08:00
    违反广告法
    airyland
        3
    airyland  
       2017-05-13 17:50:20 +08:00 via iPhone
    这个划出屏幕的处理很用心,支持 recycle view 不?
    wly19960911
        4
    wly19960911  
       2017-05-13 18:10:35 +08:00 via Android
    @airyland 这是 js 吧,是前端…
    Yunhao
        5
    Yunhao  
       2017-05-14 00:40:50 +08:00 via iPhone
    很棒,感谢推荐
    fy
        6
    fy  
       2017-05-14 14:26:10 +08:00
    @chairuosen 蛤蛤蛤
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5496 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:34 PVG 14:34 LAX 22:34 JFK 01:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86