首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从 antDesign 来窥探移动端“滚动穿透”行为

简单直译过来说默认情况下,当到达页面顶部或底部(或其他滚动区域)时,移动浏览器倾向于提供“弹跳”效果甚至页面刷新。...您可能还注意,当滚动内容页面顶部有一个包含滚动内容对话框时,一旦到达对话框滚动边界,底层页面就会开始滚动 - 这称为滚动链接。...将可滚动元素拖动至顶部或者底部时,继续拖动触发最近可滚动祖先元素滚动。 还有另一种常见场景,我们在某个可滚动元素上进行拖动时,当该元素滚动条已经到达顶部/底部。...getScrollParent 寻找区域内可滚动祖先元素 // canUseDom 方法对于是否可以使用 Dom 情况下判断,主要为了甄别( Server Side Render ) import...,表示还未滚动 // 滚动条在顶部时,需要判断当前元素不可以滚动还是可以滚动但是未进行任何滚动 // 当 offsetHeight >= scrollHeight 表示当前元素不可滚动

41020

Scroll,你玩明白了嘛?

2.3 注意 1、在可滚动容器上设置了 scroll-behavior: smooth 之后,其优先级高于 JS 方法。...2、在可滚动容器上设置了 scroll-behavior: smooth 之后,还能够影响浏览器 Ctrl+F 表现,使其也呈现平滑滚动效果。...根据上面提到我们可以用很多种方式去实现,假设我们已经为列表容器增加了 scroll-behavior: smooth 样式,然后在 useEffect hook 中去调用滚动方法: import React...3.3 scrollIntoView 奇怪现象 3.3.1 页面整体偏移 最近在过一些历史用例时候,遇到了这种情况: 现象大概就是,当我通过按钮,滚动定位聊天区域某条消息时,页面整体发生了偏移...关键在于 block: "start",从上面的参数说明我们了解,默认传参数情况下,取 block: start,它表示 “元素顶端与所在滚动可视区域顶端对齐”。

3.1K21
您找到你想要的搜索结果了吗?
是的
没有找到

关于页面滚动两个 CSS 属性

scroll-behavior 原先这个主题在文章下方作者有一个分享文章 facebook 和 twitter 。在转移主题 Hexo 时候也就顺便复刻了下来。...一般返回顶部都是直接用 JS 实现,但是不懂 JS ,写个 console.log 都不会就不用说写返回顶部了。那就直接用回最原始方法:锚点定位。...很多人用JS来做返回顶部而不用 CSS 可能就是锚点定位这个缺点。 但实际上CSS scroll-behavior 可以解决这个问题。...scrollbar-gutter 浏览器滚动有宽度,而且会占用页面的空间导致页面抖动。...:root{ scrollbar-gutter:stable; } 这个 CSS 固定留一个空间让滚动条使用,这样有没有滚动页面都是一个宽度,也就不会造成页面抖动。

65620

使用 React 和 Tailwind 创建阅读进度条

目录 前言 实现逻辑 代码 样式 前言 我们在上网时候经常会看到一些优秀博客顶部有个进度条,这个进度条有助于读者衡量阅读进度,认为这个功能可以带来良好用户体验,所以,应该将其添加到我个人博客上文章中...实现逻辑 获取页面可以滚动高度. 获取页面已经滚动高度....阅读进度=已经滚动高度/页面可以滚动高度 代码 单独定义一个 react hook 来活动当前阅读进度 import { useEffect, useState } from 'react' export...('scroll', updateScroll) } }, []) return progress } 剩下工作将进度显示在页面上,为此,顶部导航栏上显示一个进度条。...进度为 0 向左偏移 100% ,进度为 100 偏移 0,所以使用 translateX(${progress - 100}%) 以上就是本文全部内容,希望这篇文章对大家有所帮助,也可以参考往期文章或者在评论区交流你想法和心得

76020

仿腾讯课堂固定滚动列表ReactNative组件

项目地址 在这里,如果有好意见欢迎提 issue或pr。 开始 我们先来看下,腾讯课堂视频播放详情页面怎么样? ?...- 80}},那这样滚动距离120时,滚动条到底部了,视频播发控件区域距离屏幕顶部还有80。...发现第一种方法在解决如何寻找子控件并判断滚动状态上没有方法(可能没发现)以及性能上考量,那就采用第二种方法。 分析 为了解决上面的问题,我们需要了解几个关键点。...一个怎么判断手势滑动以及外层滚动容器到底部和内层滚动顶部? 第二个寻找滚动组件并通知内层滚动组件开始滚动?...具体可以参考以前写事件分发机制学习。 回过头来讲外层滚动容器通知内层滚动,其实通知滚动相当于拦截事件,那么就是重写 onInterceptTouchEvent方法并返回false。

4.8K70

微信小程序实践:2.3 可滚动容器组件之 scroll-view

两个方向滚动可以同时开启,但在操作时,只能同时朝一个方向滚动scroll-top指内部滚动实体,高于顶部边缘多少距离。单位默认px,也可以传入rpx。...我们一般说「滚动顶部滚动到底部」,指还不是内部滚动实体滚动到了它所能达到最大值、最小值,而是指滚动实体顶部边缘到达了滚动外框顶部,及底滚动实体底部边缘到达了滚动外框底部。...要么使用页面实例requestAnimationFrame方法模拟一个定时器,要么在JS中实现。 选择了后者,这个方案看起来更简单。...updateList、updatePagesetData更新时用key,因为变量,所以在使用时要用[]括起来。 作者为什么直接使用push方法呢?...在顶部自定义一个navigatorBar导航栏,单击一个按钮切换到一个页面,每个页面都是一个独立scroll-view组件。

14.6K30

React项目中如何实现一个简单锚点目录定位

前言 锚点目录定位功能在长页面和文档类网站中非常常见,它可以让用户快速定位页面某个章节 如何在React中实现锚点定位和平滑滚动 目录自动高亮实现思路 处理顶部导航遮挡锚点解决方案 服务端渲染下实现方案...behavior:'smooth'可以启用平滑滚动效果。 锚点定位和目录联动 很多时候,我们会在页面中实现一个目录导航,可以快速定位各个章节。...此时就需要实现锚点定位和目录联动效果: 点击目录时,自动滚动到对应章节 滚动页面时,自动高亮正在浏览章节 目录导航组件 目录导航本身一个静态组件,我们通过props传入章节数据: function...问题解析 遮挡问题 有时锚点会被固定Header遮挡,此时滚动会定位元素上方,用户看不到锚点对应内容。...在滚动方法中加入offset // scroll offset const scrollOffset = -80; chapterEl.scrollIntoView({ offsetTop: scrollOffset

85720

虚拟列表与 Scroll Restoration

渲染 50 个 Node,实际只渲染了可见部分 Node 本篇文章讨论如何实现一个虚拟列表,此类文章网上有很多。但是有关于回退页面无法回到虚拟列表上一次位置文章却很少。...)滚动,即使开启了 Restoration,回退页面后仍然无法回到上一次位置。...一个不好解决方案用提供接口在每次滚动后记录一个 Range,Range 一个当前渲染内容索引,在之后渲染后可以用自身 scrollTo 方法跳转。...这样有个坏处会出现跳动,原先在顶部直接跳动到了原先位置,还是个预估值。既不准确也不符合 UX 逻辑。...之后,又找到一个比较小众库, virtual-scroller ,不仅仅可以在 React 使用,他独立封装了一个 Core,可以单独在各个框架中使用,即使在 VanillaJS 中使用,小众库功能肯定不会很多

83020

前端性能优化之防抖与节流,大幅度降低你事件处理性能

那么防抖,就是我们滚动页面,刚要获取导航栏离文档顶部距离,但是发现等会还要继续滚动,那么就先获取了,等什么时候停止滚动了,再获取这个距离。...因为滚动事件频繁触发,紧接着又触发了 scroll 事件。...这就是防抖效果,现在你有没有对防抖有一个很深印象了呢? 接下来我们来介绍一下第二种处理频繁触发事件方法: 节流。 三、节流 (1)定义 为了介绍节流定义,我们继续使用跑步这一例子。...想象我们在跑步,我们很热很热,在跑步过程中,每隔几秒钟,拿毛巾擦一擦身上汗。这里我们同样把 ’ 跑步 ’ 看作 滚动页面的操作, 把 ’ 擦汗 ’ 看作获取导航栏离文档顶部距离操作。...那么,节流就是, 我们滚动页面,获取了一下导航栏离文档顶部距离, 此时我们一直在滚动页面, 只不过我们刚获取过距离了,就先获取了, 等距离上一次获取几秒后,我们再获取一次吧。

1.5K20

「大众点评点餐」小程序开发经验 03:事件联动

若左侧高亮导航菜单不在可视区域: 当高亮导航菜单顶部在左侧 scroll-view 滚动区上方(被遮住了),则将该高亮导航菜单滚动至将高亮导航栏顶部与左侧可滚动区域顶部重合(高亮菜单为滚动第一个分类...微信官方文档介绍,使用 scroll-view 组件,必须指定高度。 我们实践时发现,使用 scroll-view 可以指定高度,页面滚动区存在。...但我们发现,右侧 scroll-view 不会因此滚动到指定高度。 我们猜想,可能是因为获取到 dataset.id 一个数字类型字符串,其内部使用 === 方式导致匹配。...另外需要注意,设置 scroll-into-view 引起滚动操作,同样会触发 scroll 事件。 右侧栏滚动事件与分类栏自动滚动 滑动右侧、让左侧滚动整个页面设计最核心部分。...想一想,这是什么原因导致? 在上面讲解 scroll-view 属性时,提到过一句话: 设置 scroll-into-view 引起滚动操作,同样会触发 scroll 事件。

2.6K40

前端架构探索与实践

当然,这些组件最终会被抽离 puicom group 下。 再往上,容器层。容器提供一些可插拔 hooks 能力。...并且根据 component 配置来渲染不同组件页面中,首屏组件和按需加载组件。最后,支撑到每一个对应页面里面。 分工组织 ?...对于一个页面,无论 react 还是 rax,其实都是 fn(x)=>UI 过程。所以整理流程无非就是拿到接口属于渲染 UI 中。所以对于中间页架构而言也是如此。...所以对于容器底层,之前使用 RecycleView :固定 div 高度,基于 overflow 来实现滚动。 虽然,在 h5 里面这种滚动机制有些”难受“,但是罪至”换“。...但是尴尬至于在于,iOS 橡皮筋想过,在页面滚动顶部以后,如果页面有频繁动画或者 setState 时候,会导致页面重绘,重新回到顶部

96920

小程序 - 效果处理之技巧合集(更新中...)

10 至于返回顶部按钮,因为要固定在页面底部,所以可以不放在scroll-view组件中,这里放进去了。...43 44 不过经过后来测试,把绝对定位这一套代码删掉,然后只要有scroll-y属性都是可以, 45 46 关键这个属性,放在scroll-view内所有内容组成页面才可以滚动。...给一个滚动事件监听wrapScroll,当页面滚动时候他就判断scroll-top大小,如果大于我们设定值(这里500)时候,他就执行一条设置数据代码,否则就执行另一条设置数据代码。...98 99 至于返回按钮那个点击事件goTop,原理上就是要点击他,改变scroll-view高度值,所以在函数中,直接setData,改变高度值为0,反映页面效果就是页面返回到了顶部。...scroll-view必须有高度设置,但是又不能设置百分比时,高度值不能适配所有机型手机问题: 假如我顶部需要固定定位一个元素,下边可以滚动页面

1.4K90

微信小程序版博客——列表页相关问题汇总

下拉加载实现 首先是分页加载列表,从网上例子和文档来看有两种实现方式,一种根据Page()上 onReachBottom属性:页面上拉触底事件处理函数,另一种就是通过scroll-view组件上...这里用后者,因为想使用有赞加载UI,这里需要注意使用scroll-view需要设置height,不然事件不会触发,其他scroll-view上属性可以参考文档: .scorll-margin {...回到顶部 在开发时候发现滚到最底部再想回到最顶部不是很方便,于是想看看有没有直接回到顶部功能。 结果看到文档scroll-view有属性支持,直接设为true就可以了。...blogId=' + blogId }) }, 滚动条位置问题 滚动条位置可以通过设置scroll-viewscroll-top属性,这个问题不大。...在编写专题页时候,由于顶部悬浮固定Tab页,在切换时记得重置下scroll-top值。

47320

造一个 react-infinite-scroller 轮子

前言 无限滚动一个开发时经常遇到问题,比如 ant-design List 组件里就推荐使用 react-infinite-scroller 配合 List 组件一起使用。...上面公式里“当前窗口顶部与很长元素顶部距离 + offsetHeigh”在页面定死,而 window.pageYOffset - window.innerHeight 会随着滚动而改变,两者相减则为...图示: 不过,这里 “当前窗口顶部与很长元素顶部距离” 这一步并不能通过变量来获得,只能用 JS 来获取: // 元素顶部页面顶部距离 calculateTopPosition(el:...对 touch 和 mouse 事件监听不会阻塞页面滚动,可提高页面滚动性能。详情可见这篇文章。...) 其中 calculateTopPosition 为递归地计算元素顶部浏览器窗口顶部距离 window 向上滚动:window.pageYOffset || doc.scrollTop 其中 doc

2.5K30

vue上拉加载更多组件

容器自身高度加上距离顶部距离就是现在整个页面的高度。整个页面的高度减去可视窗口高度再减去滚动条移动距离,当接近0时候就是到达底部时候。 明白了这个原理上拉加载就很好实现了。...data: windowHeight: '',contentOffSetHeight: '',downT: '' 因为可视窗口和距离顶部距离不会变,所以初始化时候就赋值,downT监听滚动防抖用...这个可以去了解一下,就是记住滚动距离,刷新时候就不会直接触发加载方法。...最后beforeDestroy: window.scrollTo(0, 0); window.removeEventListener('scroll', this.onScroll) 刷新当前页面或者离开页面的时候移动到最顶部...其实设置了这个移动到顶部也不需要,这边为了稳定就加上了。还有就是要移除监听滚动试了,跟定时间计时器一样,没有在组件销毁时候移除,会一直存在。

2.1K10

uni-app中使用scroll-view滚到底部时多次触发scrolltolower

一、前言、scroll-view基本属性: 前言:   前段时间使用scroll-view可滚动视图区域容器来做多个不同内容展示(在这个页面中同时使用了三个scroll-view做数据展示),因为这几个展示内容数据都比较多...但是如使用scroll-view导致页面级没有滚动,则触底事件不会被触发,所以这里存在问题有时候无法触发onReachBottom。   ...第一个问题就是当滚动滚动到底部时会多次触发scrolltolower事件,第二个问题页面由第一个scroll-view(该页面已经到了最底部了)切换到第二个scroll-view时会自动滚动页面的最底部...(() => { //TODO这里填写你加载数据方法 this.getData(); }, 1000); }, 关于页面由第一个scroll-view切换到第二个scroll-view时会自动滚动页面的最底部...为0,那么在切换到第二个页面的同时页面的竖向滚动位置会默认滚动到最顶部,从而解决了默认滚动到最底部加载多次数据问题。

7.4K10

一种统计ListView滚动距离方案

整个统计方案需要解决以下几个关键问题: 滚动超过一个item时距离统计; 进来时停留在某一个item时滚动距离统计; 快速滑动时距离统计; 2.2.1 滚动超过一个item时统计 因为我们整体方案通过累加...这里核心通过系统提供View方法getTop来拿到该View最顶部距离其Parent距离: /** * Top position of this view relative to...= mInitTop - mCurTop; 2.2.2 进来时停留在某一个item时滚动距离统计; 如果从当前页面A跳到其他页面B后,再跳转回来,此时当前页面A正常是停留在上一次浏览位置(前提页面...在进入该页面时,我们通过该itemViewgetTop方法拿到初始值:mInitTop,该值绝对值就为橙色部分高度。...这里有没有办法兼容快速滑动这种场景下统计?

1.2K20

忍法,scroll 翻滚之术!

或者嗖~一下就到顶 回到顶部 。 又或者想去哪点哪 标题导航 。 ? 但是在过去开发中,要实现这些功能并不是那么轻松一件事情。...scroll 与 scrollTo scroll() 与 scrollTo 方法用于在给定元素中滚动到某个特定坐标的 Element 接口。...来来来,给大家解释一下block跟inline可选值到底怎么回事: start:跟当前元素它爹头发(顶部)对齐。 center:跟当前元素它爹肚子(中间)对齐。...(吃瓜群众:“都没人理你~”) scroll-behavior跟上述各个scrollAPI 里behavior一样,用来定义页面进行滚动操作时动画效果。...如果定义为smooth,则页面触发滚动操作时,就会有滚动效果,如果为auto,则跟原来一样,瞬间移动到指定位置。这指的是类似于点击#hash跳转一样触发,而不是滑动滚动条。

1.3K10

这一次,彻底解决滚动穿透

什么滚动穿透 如图所示,有一层遮罩蒙层覆盖在body上时,当我们滚动遮罩层,它下面的内容也会跟着一起滚动,看起来好像是上面的滚动事件穿透下面的DOM元素上一样,我们称之为滚动穿透。...刚开始遇到这个问题同学可能会联想到是不是由于事件冒泡body上引起,于是监听 scroll/touchmove事件,阻止事件冒泡。 事实上,这并没有什么卵用。...;} 这个想法很美好,在侵入JS情况下禁止滚动,然而: 只加 overflow:hidden对移动端无效!...这样一来只需要在可滚动容器上加入 can-scroll类名即可滚动,但是这种滚动又随之带来一个问题: 当滚动到元素顶部和底部再继续滚动时,又会触发滚动穿透!...可是从使用性质来考虑,还不是很便捷,尤其现在如 React, Vue这类框架中,还需要考虑浮层什么时候实例化,什么时候应当调用 lock和 unlock显得有些麻烦,因此编写了一个React版本组件

2.5K21

如何处理 React onScroll 事件?

React 应用中,我们经常需要处理滚动事件(onScroll),以实现一些与滚动相关功能,如无限滚动加载、滚动顶部按钮等。...示例代码下面一个示例代码,演示如何处理 React滚动事件:import React, { useEffect } from 'react';const ScrollableComponent...节流和防抖当滚动事件频繁触发时,节流(throttling)和防抖(debouncing)常用技术,用于限制事件处理函数执行次数。...下面一个使用 lodash 示例代码:import React, { useEffect } from 'react';import { throttle, debounce } from 'lodash...通过合理处理滚动事件,我们可以实现一些常见滚动相关功能,如无限滚动加载、滚动顶部按钮等。

3K10
领券