右下轻推:为什么翻转手势比整屏滑动稳
划整屏靠距离,推一小下靠动作;前者容易过头,后者不会。
一、划一下和推一下,差在「距离」还是「动作」
整屏滑动靠的是距离:手指从屏幕底部划到顶部,页面跟着走一屏。问题在于距离是可以过头的——你想划一屏,手上多走了两厘米,页面就走了屏半,回来还得往回带。
右下轻推认的不是距离,是动作:按住、往上带一点点、松手。位移只要超过十几个像素就算数,剩下的交给动画补完。你推得轻,它走一屏;推得重,它还是走一屏。翻页量是固定的,手抖不会变成翻两屏。
这是两种完全不同的输入模型:一个把手指当滚轮,一个把手指当翻页键。
二、为什么触摸区放在右下角
单手拿手机时,拇指的自然落点在屏幕下半部分偏右。放在右下角,是因为那里本来就是拇指的休息位:不用抬手、不用换握,推一下就能走。
触摸区不是整块屏幕。整屏响应滑动的手势,会和「点一下唤出工具条」打架——你想调亮度,结果翻页了。分开之后:
- 点一下屏幕任意位置:唤出或收起工具条
- 按住右下角往上带:翻到下一格
- 按住右下角往下带:翻回上一格
- 从屏幕左缘往右划:返回目录
四个动作互不重叠,误触的概率就低了。左手持机的人在设置里把触摸区镜像到左下,动作方向不变。
三、翻过去还能翻回来
往回翻是最容易被做坏的一处。有些客户端往回翻是「重排一次」,落点重新算,于是你回到的不是刚才那一格,而是它认为的「上一格」。
这里的做法是记住最近几格的落点,往回带时直接回到原来那个坐标,不重算。所以你会看到画面原样退回去,连播放过的加载状态都一样。
翻回来之后如果继续往回,会继续用同一条历史栈,退到本话第一格时再往回,才会跳到上一话的最后一格——跳之前有一张写着话号的过渡格,让你知道越界了。
四、长格怎么办
一格比屏幕高的时候,「翻一屏」和「翻一格」不是一回事。这里的处理是把长格切成若干屏:推一下走一屏,走到格的底部再推,才进入下一格。
判断标准是这一格的高度有没有超过屏幕可用高度的一点二倍。没超过就整格走;超过了就按屏走,并在右侧留一条极细的进度条,告诉你「这一格还有多长」。
这条进度条不做成滚动条,因为它不能拖——拖拽会和触摸区的翻页手势冲突。它的作用只是让你知道还要推几下。
五、手感为什么值得单独调
翻页是阅读里重复次数最多的动作,一话四十次,一本书上百次。每一次多花的力气、每一次落点不准,都会被次数放大。
所以这里的动画时长是可调的:默认一百八十毫秒,嫌拖沓可以调到一百二十,嫌跳可以调到二百四十。动画曲线用的是先快后慢,前三分之一走完大半距离,最后一段慢慢贴上去——观感上像翻纸,而不是像页面滑动。
这些参数不影响别的功能,调坏了也只是手感变差,随时能调回来。