CSS属性overscroll-behavior控制容器滚动行为

本文介绍了Chrome63版本中新加入的overscroll-behavior CSS属性,该属性可以有效控制子元素滚动到底部或顶部时是否影响父元素的滚动行为。文章详细解释了如何使用此属性来改善用户体验,特别是在移动端设备上的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Chrome63版本新特性中包含支持overscroll-behavior属性,此属性的功能是什么呢?

我们会发现当子元素滚动到顶部或底部继续滚动滚轮时,会导致父元素的滚动,但这种行为有时会影响页面体验。使用该属性可以禁掉此行为。

在子元素上应用overscroll-behavior: contain即可。

其他属性值还有none, 该功能除了contain的功能外还会阻止节点的默认滚动行为,主要是移动端的效果,比如安卓的炫光(容器边缘的半圆型光圈)。

在移动端还可以禁用下拉刷新的功能,只要在body元素上应用overscroll-behavior-y: contain;即可。

完整介绍可查看原文:https://developers.google.com/web/updates/2017/11/overscroll-behavior#disablp2r

<template> <view class="container"> <!-- 顶部导航栏 --> <u-navbar :title="title" leftIconColor="#fff" placeholder bgColor="#57dc7f" autoBack titleStyle="color:#fff;text-align:center;" :customStyle="navbarStyle" v-if="title" ></u-navbar> <!-- 滚动容器 --> <view class="scroll-wrapper"> <scroll-view scroll-y class="scroll-view" @scrolltolower="$emit('lower')" :style="scrollStyle"> <!-- 部分页面有的背景图 没有title才展示 --> <image class="bgImg" :src="getImgUrl('/statics/img/backImg.png')" mode="widthFix" v-if="isShow"></image> <!-- 内容主图 --> <slot></slot> </scroll-view> </view> <!-- 底部插槽 --> <slot name="bottom"></slot> </view> </template> <script> import getImgUrl from '@/mixins/getImgUrl.js'; export default { mixins: [getImgUrl], name: 'common-scroll', props: { title: String, isShow: { type: Boolean, default: false } }, computed: { scrollStyle() { const systemInfo = uni.getSystemInfoSync(); const navBarHeight = this.title ? systemInfo.statusBarHeight + 44 : 0; return { minHeight: `calc(100vh - ${navBarHeight}px)` }; } } }; </script> <style lang="scss" scoped> .container { height: 100vh; display: flex; flex-direction: column; } .scroll-wrapper { flex: 1; min-height: 0; /* 关键:允许内容压缩 */ padding-bottom: env(safe-area-inset-bottom); } .scroll-view { height: 100%; overflow-y: auto; box-sizing: border-box; overflow-anchor: none; /* 防止滚动跳动 */ position: relative; overscroll-behavior-y: contain; .bgImg { width: 100%; height: 600rpx !important; position: absolute; top: 0; left: 0; z-index: -1; } } ::v-deep .u-navbar { z-index: 999; flex-shrink: 0; /* 防止导航栏被压缩 */ } </style> 调整这个代码:vue2+js+uni-app+uview需求我需要一个容器:所有的页面都需要包含在这个容器中,有些页面传递title,则需要展示u-navbar,底部有 <slot name="bottom"></slot>是用来放底部按钮的。顶部的navbar和底部的bottom说是不能滚动的,背景为#f5f5f5,中间可以滚动的部分,如果长度没有超出的话,就不能滚动,如果超出了,就滚动。如果没有title,但是有bottom的按钮的话,那就除开bottom后超出的部分 都可滚动,如果都没有的话,那就整个页面超出部分可以滚动。别动我u-navbar的颜色。还有,scroll-wrapper的高度默认是除开u-navbar和bottom以外的部分。如果没有u-navbar,scroll-wrapper的高度就是除开bottom以外的部分,如果都没有就是100vh,滚动部分的高度如果超出100vh,就可以滚动,如果没有超出,就不更滚动!!!
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值