头图

两分钟小技巧!如何阻止 macOS 的触底弹性滚动和双指手势导航

众所周知,macOS 的滚动容器中默认会有一个“触底反弹”效果,也就是常说的“橡皮筋”效果,如下

Kapture 2022-10-15 at 12.31.25

通常情况下,反弹效果可以反映出是否滚动到了边界,让滚动体验更加丝滑,算是一种体验的提升,但是如果页面总有fixed定位元素,同样也会受到影响,在视觉上不是那么美观,那有没有办法阻止呢?

有!一行 CSS 就可以解决

一、overscroll-behavior

阻止上面的“触底反弹”只需要一个 CSS 属性,那就是overscroll-behavior,它的作用有两个

https://developer.mozilla.org/zh-CN/docs/Web/CSS/overscroll-behavior
  1. 改变滚动边界行为(比如“触底”效果和移动端“下拉刷新”行为)
  2. 改变滚动链行为(让滚动嵌套时父容器滚动不触发)
关于改变滚动链行为可以参考这篇文章,这里就不重复了: CSS overscroll-behavior让滚动嵌套时父滚动不触发 « 张鑫旭-鑫空间-鑫生活 (zhangxinxu.com)

语法很简单

overscroll-behavior: auto; /* 默认 */
overscroll-behavior: contain;
overscroll-behavior: none;

其中,contain表示保留默认的边界行为,阻止父容器滚动,none表示两者都阻止。

比如给body加上如下样式

body{
  overscroll-behavior: none;
}

下面是实际效果:

Kapture 2022-10-15 at 12.54.15

可以看到,加上overscroll-behavior: none之后,不再有“触底反弹”的效果了

二、双指导航手势

macOS中,还有一个系统级别的导航手势,如下

image.png

默认开启后,浏览器总只要用双指就可以快速前进或者后退,如下

Kapture 2022-10-15 at 13.36.43.gif

尽管在触发时,浏览器会有相关的提示,但仍然避免不了被“误触”。下面是 Chrome 浏览器的导航提示,不同浏览器略有差异

image.png

想象一下,如果你辛辛苦苦填的一大堆表单,一下子不小心返回了,是不是心里要骂娘了。除了网站本身需要及时保存外,在重要的页面最好也要阻止这样的行为,没错,仍然是这个属性

body{
  overscroll-behavior: none;
}

image.png

加上这个属性后,浏览器就不在触发手势导航了,自然也就避免了“误触”的情况

有些设计觉得弹性滚动挺好的,去掉以后比较生硬,希望保留,只需要阻止手势导航,可以设置

body{
  overscroll-behavior: contain;
}

效果如下

Kapture 2022-10-15 at 13.48.14

这样就既保留了弹性效果,同时也阻止了手势导航,完美!

三、兼容性和总结

这样一个用户体验小技巧你学会了吗?下面简单总结一下

  1. 弹性滚动可以反映出是否滚动到了边界,让滚动体验更加丝滑,算是一种体验的提升
  2. 但是,弹性滚动让一些fixed元素也跟随滚动,视觉上不美观,需要阻止
  3. overscroll-behavior可以改变滚动边界行为,完美阻止弹性滚动
  4. 双指手势导航在提供便捷的同时,有时候也会“误触”
  5. overscroll-behavior可以改变滚动链行为,完美阻止手势导航

另外,在移动端阻止 iOS 弹性滚动是一个老大难的问题,如今有了这个属性可以很好的解决这个问题。可惜的是,Safari 再次拖了后腿,其他浏览器早早就支持了,Safari 到今年(2022年)才开始支持,兼容性如下

image-20221015135539165

有点想不明白了,这弹性滚动效果不就是苹果自己搞出来的吗,自家都不支持?不过好在现在终于支持了,不出两年,iOS设备也可以放心用起来,再也不需要复杂的 JS 做兼容判断了。最后,如果觉得还不错,对你有帮助的话,欢迎点赞、收藏、转发❤❤❤


前端侦探
致力于有趣的前端探索~
14k 声望
13.6k 粉丝
0 条评论
推荐阅读
CSS 锥形渐变只能画圆锥吗?conic-gradient 10大应用举例
欢迎关注我的公众号:前端侦探提到锥形渐变conic-gradient(也有的称“角向渐变”),很多人都被这个名称给迷惑了,以为就是用来画圆锥的,比如 {代码...} 这样可以得到锥形的放射性图案当然,再进一步,可以绘制饼...

XboxYan7阅读 314

封面图
手把手教你写一份优质的前端技术简历
不知不觉一年一度的秋招又来了,你收获了哪些大厂的面试邀约,又拿了多少offer呢?你身边是不是有挺多人技术比你差,但是却拿到了很多大厂的offer呢?其实,要想面试拿offer,首先要过得了简历那一关。如果一份简...

tonychen152阅读 17.8k评论 5

封面图
正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...

寒青56阅读 8.5k评论 11

JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy48阅读 7.1k评论 12

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木75阅读 7.1k评论 16

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs42阅读 6.8k评论 12

封面图
从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木45阅读 8.6k评论 6

14k 声望
13.6k 粉丝
宣传栏