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

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

什么是滚动穿透 如图所示,有一层遮罩蒙层覆盖body时,当我们滚动遮罩层,下面的内容也会跟着一起滚动,看起来好像是上面的滚动事件穿透到下面的DOM元素一样,我们称之为滚动穿透。...首先,一般而言滚动不是我们自己监听事件去改变元素的位置而实现的,当我们设置 overflow:scroll/auto时,实际是浏览器原生实现的滚动效果。...: 该方案会让浏览器的滚动条默认重置于初始位置 要解决这个问题,首先想到的方案是添加 overflow之前,先记录当前浏览器的 scrollTop值,然后添加之后重置 scrollTop,效果如下:...仔细进一步的定位下,最终确定罪魁祸首原来是: passive event 我们知道,chrome 51引入了 passiveeventlisteners以提高滚动性能,同时它也合入了标准,具体可查看chrome...可是从使用性质来考虑,还不是很便捷,尤其是现在React, Vue这类框架中,还需要考虑浮层什么时候实例化,什么时候应当调用 lock和 unlock显得有些麻烦,因此编写了一个React版本的组件

2.4K21

使用React.memo()来优化React函数组件的性能

React中可以用来优化组件性能的方法大概有以下几种: 组件懒加载(React.lazy(...)和\) Pure Component shouldComponentUpdate(...){...}生命周期函数...具体做法是, Chrome调试工具中点击React标签,界面左边选中TestC组件,界面的右边就可以看到其状态state中只有一个键count,且其值是1: 然后让我们点击count的值1,将其修改为...现在让我们使用另外一种方法PureComponent来对组件进行优化。 Reactv15.5的时候引入了Pure Component组件。...{props.count} ) } export default TestC; // App.js 当上面的代码初次加载时...现在让我们TestC组件使用React.memo进行优化: let TestC = (props) => { console.log('Rendering TestC :', props)

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

用Javascript获取页面元素的位置

很显然,如果网页的内容能够浏览器窗口中全部显示(也就是不出滚动条),那么网页的大小和浏览器窗口的大小是相等的。如果不能全部显示,则滚动浏览器窗口,可以显示出网页的各个部分。...使用的时候,有三个地方需要注意: 1)这个函数必须在页面加载完成后才能运行,否则document对象还没生成,浏览器会报错。...三、获取网页大小的另一种方法 网页的每个元素还有scrollHeight和scrollWidth属性,指包含滚动条在内的该元素的视觉面积。...如果网页内容能够浏览器窗口中全部显示,不出滚动条,那么网页的clientWidth和scrollWidth应该相等。但是实际,不同浏览器有不同的处理,这两个值未必相等。...另外,element.scrollIntoView()方法也有类似作用,可以使网页元素出现在浏览器窗口的左上角。

3.2K70

WebView深度学习(二)之全面总结WebView遇到的坑及优化

● 2.一些机型上面,Webview.goBack()后,这个方法不一定会调用,所以标题还是之前页面的标题。...(3) 为什么打包之后JS调用失败(或者WebView与JavaScript相互调用时,如果是debug没有配置混淆时,调用时没问题的,但是当设置混淆后发现无法正常调用了)?...Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来,怎么解决?...接受所有网站的证书 // handleMessage(Message msg);// 进行其他处理 } }); (5) WebView调用手机系统相册来上传图片,开发过程中发现在很多机器无法正常唤起系统相册来选择图片...当我们做类似加载下一页这样的功能的时候,页面初始的时候需要知道当前WebView是否存在纵向滚动条,如果有则不加载下一页,如果没有则加载下一页直到其出现纵向滚动条

5.7K30

React 入门学习(十七)-- React 扩展

LazyLoad 懒加载 React 中用的最多的就是路由组件了,页面刷新时,所有的页面都会重新加载,这并不是我们想要的,我们想要实现点击哪个路由链接再加载即可,这样避免了不必要的加载 我们可以发现...,我们页面一加载时,所有的路由组件都会被加载 如果我们有 100 个路由组件,但是用户只点击了几个,这就会有很大的消耗,因此我们需要做懒加载处理,我们点击哪个时,才去加载哪一个 首先我们需要从 react.../About')) 采用 lazy 函数包裹 我们会遇到这样的错误,提示我们用一个标签包裹 这里是因为,当我们网速慢的时候,路由组件就会有可能加载不出来,页面就会白屏,需要我们来指定一个路由组件加载的东西...}) 由于函数的特性,我们可以函数中随意的编写函数,这里我们调用了 useEffect 函数,这个函数有多个功能 当我们像上面代码那样使用时相当于 componentDidUpdata 和 componentDidMount...,我们需要在 A 组件中预留出 C 组件渲染的位置 需要的位置加上{this.props.render(name)} 那我们 C 组件中,如何接收 A 组件传递的 name 值呢?

81030

React 入门学习(十七)-- React 扩展

LazyLoad 懒加载 React 中用的最多的就是路由组件了,页面刷新时,所有的页面都会重新加载,这并不是我们想要的,我们想要实现点击哪个路由链接再加载即可,这样避免了不必要的加载 我们可以发现...,我们页面一加载时,所有的路由组件都会被加载 如果我们有 100 个路由组件,但是用户只点击了几个,这就会有很大的消耗,因此我们需要做懒加载处理,我们点击哪个时,才去加载哪一个 首先我们需要从 react.../About')) 采用 lazy 函数包裹 我们会遇到这样的错误,提示我们用一个标签包裹 这里是因为,当我们网速慢的时候,路由组件就会有可能加载不出来,页面就会白屏,需要我们来指定一个路由组件加载的东西...}) 由于函数的特性,我们可以函数中随意的编写函数,这里我们调用了 useEffect 函数,这个函数有多个功能 当我们像上面代码那样使用时相当于 componentDidUpdata 和 componentDidMount...,我们需要在 A 组件中预留出 C 组件渲染的位置 需要的位置加上{this.props.render(name)} 那我们 C 组件中,如何接收 A 组件传递的 name 值呢?

68530

精读《React Router4.0 进阶概念》

代码分割 通过 react-loadable,可以做到路由级别动态加载,或者更细粒度的模块级别动态加载: const AsyncHome = Loadable({ loader: () => import...现在动画的思路比较靠谱的也大致是这种:通过添加/移除 class 的方式,利用 css3 做动效。 滚动条复位 当页面回退时,将滚动条恢复到页面最顶部,可以让单页路由看起来更加正常。...这种设计思路与 Nestjs 的描述性路由具有相同的思想 - nodejs 中,我们可以通过装饰器,在任意一个 Action 描述其访问的 URL: @POST("/api/service") async...URL 即浏览器地址,在前端数据化统一的浪潮下,其实 URL 也可以被看作是一种参数, React 中即一个 props 属性。...当我们做一个 Tabs 组件时,会发觉做得越来越像浏览器原生 tab,当用户给你提需求,刷新浏览器时,能自动打开上一次打开的 Tab,我们的做法就是将当前打开的 Tab 信息保存在 URL 中,刷新时读取再切换过去

85510

彻底玩转图片懒加载及底层实现原理

今天,我将首先从浏览器底层渲染机制来剖析为什么要去做图片懒加载,之后我将带大家一起来看下目前主流的几种实现图片懒加载的方式及其实现原理,最后会做一个展望。...img新老版本的chrome中表现又是不一样的: 老版本:阻塞 DOM 渲染 新版本:虽然不会阻塞 DOM 渲染,但每一个图片请求都会占用一个 HTTP,而且 Chrome 最多允许对同一个 Host...相信你经常遇到过一个网站卡在某个地方,一直加载,这种体验很不好。我们都希望一输入网址,页面立马就呈现在眼前。 总结一下就是:直接全部加载的话会减缓渲染速度,产生白屏等进而影响用户体验。...lazyLoad(imgs); } “但上面的代码如果你lazyLoad中打印,你会发现滚动条上下滚动时,lazyLoad...我们平时的开发中,常常需要了解某个元素是否进入了"视口"(viewport),即用户能不能看到。 ? 上图的绿色方块不断滚动,顶部会提示的可见性。

87231

react-router 的使用与优化

中的一些组件介绍; react-router 与 redux 结合; react-router 与懒加载; HTML5 中的路由跳转 history 对象中有一个 pushState 方法,接受三个参数...props 的这个对象其实是 HashRouter 或者 BrowserRouter 的属性,利用 React 中的 context 来实现属性的传递。...当我们访问 /user/123456 时就可以跳转到 ID 为 123456 的用户页面。 react-router 中可以通过 props.match.params 获取到传入的参数值。...当在浏览器渲染一个 组件时,浏览器历史记录会改变状态,同时将屏幕更新。静态的服务器环境中,无法直接更改应用程序的状态。...新的 ES 标准中,有一个 import 异步加载模块的语法,可以做到这一点。只是使用时需要下载有关的包,因为不兼容。 create-react-app 中已经集成了这一功能。

3.2K10

React移动web极致优化

经过一些斟酌,决定使用react 进行重构。选择react,其实也主要是因为具有下面的三大特性。 React的特性 1....上面的描述不免有些先扬后抑的感觉,那是因为往往作为React的刚入门者,都会像我们初入的时候一样,对React满怀希望,指意帮我们做好一切,但随着了解的深入,发现需要做一些额外的事情来达到我们的期待。...统一数据管理=> redux 性能提升 => immutable + purerender 路由控制器 => react-router(手Q暂时没采用) 为什么我们优化的时候主要讲手Q呢?...Redux这个框架的好处在于能够统一自己定义的reducer函数里面去进行数据处理,View层中只需要通过事件去处触发一些action就可以改变地的数据,这样能够使数据处理和dom渲染更好地分离,...React性能优化军规 我们开发的过程中,将上面所论述的内容,总结成一个基本的军规,铭记于心,就可以保证React应用的性能不至于太差。

1.4K80

原来浏览器插件有这么多风险?

当你浏览器安装这个插件后,浏览器确实会提示你「插件申请的权限」: 不过,等等!明明申请了49项权限,这里为什么只显示5项?原来,窗口显示的内容行数有限,超出部分需要拖动滚动条才会显示。...可是,又有几个用户会发现「申请的5项权限下面,滚动条后面还隐藏了44项权限呢」? 一旦有了权限,想做什么就取决于插件作者的想象力了。...chrome.webRequest可以让插件监控所有Tab的流量 上述API结合Service Worker传输数据,用户插件作者面前无异于裸奔。...举个例子,如果闲置Tab是React官网,那恶意网站只需要标题是React,图标是React,即使闲置Tab跳转到恶意网站,从Tab外观也无法区分。...暗网中,「用户量大的免费浏览器插件」能卖不错的价钱。 为什么会有人收购这类「没有商业价值的免费插件」呢?一种可能是 —— 收购后向代码中投毒,只要用户升级插件就会中招。

12310

使用Ionic React实现的无限滚动效果

Ionic React 是今年新出的版本 官网 https://ionicframework.com/docs/react 开始之前 我们创建一个无限滚动项目之前,我们需要一个 Ionic.../src/pages/Tab1.tsx 当我们要实现无限滚动并因此要显示一个列表时,我们要做的第一件事情就是添加一个包含项目的Stateful Value....为此,我们使用了 useState React Hook 。此外,我们正在使用卡片来渲染它们,并为它们添加了另外一个状态,当没有其他需要迭代的状态时,这将会实现停止滚动条的功能。...所以,使用的过程中,很有可能会有重复的“狗狗”。 加载初始数据 Ionic 提供了我们可以应用程序中使用的多个生命周期事件,它不仅为标准组件库提供了这类事件,也同样为功能组件提供了类似事件。...import {IonInfiniteScroll, IonInfiniteScrollContent} from '@ionic/react'; 并且,页面中渲染: <IonInfiniteScroll

3K60

见识了电信流氓插iframe+分析解决方案

这两天回了家从感觉浏览器行为有些怪异,有些熟悉的网页无故出现了额外的竖直滚动条,有时候是两个,有时候甚至到了3个!我是用的是chrome浏览器,像现在wp后台添加文章的页面就是有3个竖直滚动条的。...绿色上网可能是个好事但是能做成这么2b的我还第一次见,我也不知道为什么w3cschool你也要说是不良网页然后就跳转屏蔽了。...而且跳转到的这个页面的ip地址202.115.165.218和上面logo.jpg所在的202.105.165.211明显是一伙的哦。...我现在姑且把你定义为绿色上网的同时顺手牵羊收集用户的数据。 另外这个被插iframe造成的额外竖直滚动条的现象页面刷新之后会消失,这个也符合绿色上网检测的要求。...这个做法在外观还导致了第一次网页加载时页面title无法正常显示(至少chrome下是这样),因为劫持后页面没有head区更加没有title段。那么对于这个这么流氓的东西我们该怎么办呢?

1.3K20

虚拟滚动之原理及其封装

前端的业务开发中会遇到一些不分页且数据条数超过1000加载的列表(长列表),不分页的需求一般前端程序员看来是不可思议的。...笔者的电脑,创建 10000 个带文本节点就需要 800ms+,笔者实际业务中的列表每个条数据都需要 20个左右的节点。那么,实际单纯渲染10000条数据,理论最快得17s。 2....(实际是把锅丢到了后面)•无法实现动态反映选中状态•滚动条无法正确反映操作者当前浏览的信息全部列表中的位置。而且我百万级数据加载,你一次给我加载十几条,滚到底太慢了,是想愚弄用户吗!...可视区渲染有个更出名的名字,叫做虚拟滚动——指的是只渲染可视区域的列表项,非可见区域的完全不渲染,滚动条滚动时动态更新列表项。...react方面的封装有 https://bvaughn.github.io/react-virtualized/#/components/List 参考的实现,是时候考虑封装了。就定名VList吧。

9.7K20

web前端开发初学者十问集锦(4)

已经IE9+(包含IE9)和Chrome中得到验证。 参考如下验证的代码: <!...变量可以使用时先申明,后定义。之所以会有这样的差异,因为CC++是编译型语言,在编译时如果发现变量只申明,而没有定义会编译时报错。...我在上面已经定义了变量lvlv,在下面还可以重复定义,JS强大吧,CC++中绝对不会允许这么做的。这个JS的语法太松散,感觉JS又有点缺憾,竟然不去检查我在下面定义的变量,这是为什么呢?...现在很好理解为什么会得出那样的结果了。 (3)JS的作用域链表与JS中函数竟然可以嵌套定义 CC++中是绝对不允许函数嵌套定义的,即在函数体内定义新的函数,但是强大的JS却是允许的。...事实,JavaScript 不需要程序员控制销毁变量,当一个变量脱离作用域并且不被引用的时候,JS引擎会去把销毁掉的。

1.3K20

前端一面react面试题总结

componentWillMount方法的调用在constructor之后,render之前,在这方法里的代码调用setState方法不会触发重新render,所以一般不会用来作加载数据之用。...componentDidMount方法中的代码,是组件已经完全挂载到网页才会调用被执行,所以可以保证数据的加载。此外,在这方法中调用setState方法,会触发重新渲染。...与组件的数据无关的加载,也可以constructor里做,但constructor是做组件state初绐化工作,并不是做加载数据这工作的,constructor里也不能setState,还有加载的时间太长或者出错...react代理原生事件为什么?...那为什么不要在循环、条件或嵌套函数中调用 Hook 呢?因为 Hooks 的设计是基于数组实现。用时按顺序加入数组中,如果使用循环、条件或嵌套函数很有可能导致数组取值错位,执行错误的 Hook。

2.8K30

React 移动 web 极致优化

经过一些斟酌,决定使用react 进行重构。 选择react,其实也主要是因为具有下面的三大特性。...上面的描述不免有些先扬后抑的感觉,那是因为往往作为React的刚入门者,都会像我们初入的时候一样,对React满怀希望,指意帮我们做好一切,但随着了解的深入,发现需要做一些额外的事情来达到我们的期待。...统一数据管理=> redux 性能提升 => immutable + purerender 路由控制器 => react-router(手Q暂时没采用) 为什么我们优化的时候主要讲手Q呢?...Redux这个框架的好处在于能够统一自己定义的reducer函数里面去进行数据处理,View层中只需要通过事件去处触发一些action就可以改变地的数据,这样能够使数据处理和dom渲染更好地分离,...React性能优化军规 我们开发的过程中,将上面所论述的内容,总结成一个基本的军规,铭记于心,就可以保证React应用的性能不至于太差。

1K50

react-router学习笔记

拥有简单的 API 与强大的功能例如代码缓冲加载、动态路由匹配、以及建立正确的位置过渡处理。...History React Router 是建立 history 的,简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location 对象, 然后...这确实是个问题,因为我们仅仅希望 Home 被渲染后,激活并链接到。 如果需要在 Home 路由被渲染后才激活的指向 / 的链接,请使用 Home 高级用法 动态路由 代码分拆,按需加载。...React Router 里的路径匹配以及组件加载都是异步完成的,不仅允许你延迟加载组件,并且可以延迟加载路由配置。首次加载包中你只需要有一个路径定义,路由会自动解析剩下的路径。...现在动画的思路比较靠谱的也大致是这种:通过添加/移除 class 的方式,利用 css3 做动效。 滚动条复位 当页面回退时,将滚动条恢复到页面最顶部,可以让单页路由看起来更加正常。

2.7K10
领券