H5模拟客户端的ScrollView时,如何区分是否需要惯性滑动一段距离?

问题:我想模拟scroll-view的滚动效果,场景是手指拖动列表,在手指松开的时候我会计算松开时的速度,从而开始一段匀减速运动,正常拖动没问题,就是我滑动后松开,但是还有一种情况是我滑动松开时列表是静止的,此时不需要继续惯性滑动了,我如何判断松开时它是静止的?目前我计算松开时的速度是根据v= (2 * s)/t 得到这个公式是根绝加速度,位移公式推算出来的,最后可以看到末速度只跟位移和时间有关系了,可见,只要滑动了一段距离肯定会产生速度,那该如何判断是否该继续惯性滑动呢?

阅读 4.3k
4 个回答

检查end之前的若干次move,比如5次move,如果产生了位移,说明是flick(轻拂),如果没有位移,或位移在阈值内,就是stay.

实现就是,用一个缓冲数组,容量只有5,超过就丢掉头部,每次move就把坐标塞进去.
end时检查它的位移量,超过阈值就执行缓动动画,否则结束滚动.

一般都是设置一个阻尼系数, 因为就算滑动的距离短, 也可能划得很快, 也是需要惯性的, 这个阻尼是滑动公式里面的一个衡量, 具体公式忘了可以看看物理书, 中心思想就是把滚动条当成现实中存在的物体一样计算.

阻尼就相当于模拟来摩擦力,想想物理,如果表面足够光滑,那么你手指松开的时候就会按照松手时候的速度做匀速运动,但是如果有摩擦力的话,会做减速运动,所以当你的出手速度比较小,外加阻尼系数,就会算出来一个速度为0,那么自然是静止了。阻尼系数决定了你松手之后的速度计算,越小越光滑表明停止的越慢

速度不是取最新 movement 算的吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题