首页 > 其他分享 >因为offset和scroll其实都是“相对”来计算的。有其他元素做参照物,所以会回流一次,确保准确

因为offset和scroll其实都是“相对”来计算的。有其他元素做参照物,所以会回流一次,确保准确

时间:2023-11-15 23:11:08浏览次数:35  
标签:repaint 浏览器 reflow 回流 参照物 元素 offset obj scroll

以下哪些操作会触发Reflow:

var obj = document.getElementById(“test”);

A
alert(obj.className)

B
alert(obj.offsetHeight)

C
obj.style.height = “100px”

D
obj.style.color = “red”

正确答案:BC

正确答案: BC。

B计算了offsetHeight,C重新设置了高度。

A打印出类名,无影响。

D重新设置背景,引起重绘。

reflow(回流)和repaint(重绘)

简要:整个在浏览器的渲染过程中(页面初始化,用户行为改变界面样式,动画改变界面样式等)reflow(回流)和repaint(重绘) 会大大影响web性能,尤其是手机页面。因此我们在页面设计的时候要尽量减少reflow和repaint。   


什么是reflow和repaint(原文链接:http://www.cnblogs.com/Peng2014/p/4687218.html)    


reflow:例如某个子元素样式发生改变,直接影响到了其父元素以及往上追溯很多祖先元素(包括兄弟元素),这个时候浏览器要重新去渲染这个子元素相关联的所有元素的过程称为回流。   


reflow:几乎是无法避免的。现在界面上流行的一些效果,比如树状目录的折叠、展开(实质上是元素的显 示与隐藏)等,都将引起浏览器的 reflow。
        鼠标滑过、点击……只要这些行为引起了页面上某些元素的占位面积、定位方式、边距等属性的变化,都会引起它内部、周围甚至整个页面的重新渲染。
        通常我们都无法预估浏览器到底会 reflow 哪一部分的代码,它们都彼此相互影响着。    

repaint:如果只是改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性,将只会引起浏览器 repaint(重绘)。repaint 的速度明显快于 reflow   


下面情况会导致reflow发生   

1:改变窗口大小    

2:改变文字大小    

3:内容的改变,如用户在输入框中敲字    

4:激活伪类,如:hover    

5:操作class属性    

6:脚本操作DOM    

7:计算offsetWidth和offsetHeight    

8:设置style属性    

获取一个元素的scrollTop、scrollLeft、scrollWidth、offsetTop、offsetLeft、offsetWidth、offsetHeight之类的属性,浏览器为了保证值的正确也会回流取得最新的值
因为offset和scroll其实都是“相对”来计算的。有其他元素做参照物,所以会回流一次,确保准确。

字体大小改变(font size change) 窗口大小改变(screen change) 样式表添加或者删除(add/delete stylesheets) JS更改DOM元素(js changing dom) hover动作(:hover) 位置计算(offset cats) 用户输入(user input) 改变样式属性(changing class attribute) 都会触发reflow

标签:repaint,浏览器,reflow,回流,参照物,元素,offset,obj,scroll
From: https://www.cnblogs.com/longmo666/p/17835099.html

相关文章

  • 短视频app源码,自定义快速滚动条FastScrollBar
    短视频app源码,自定义快速滚动条FastScrollBarAndroidMainfest.xml中  <activityandroid:name=".MainActivity"      android:theme="@style/FastScrollTheme">      <intent-filter>        <actionandroid:name="androi......
  • pyqt5-QScrollBar
    1、介绍这是一个进度条组件,两侧点击可以加减。 setMinimum(self,a0:int)设置最小值,可以是负值setMaximum(self,a0:int)设置最大值,可以是超过100设置浮点数时,保留其整数部分value(self)->int返回进度条的数值,int类型。默认时最小为0,最大为99。两侧点击,加减的......
  • Kafka:消费者的offset
    auto.offset.resetlatest(默认)已有一个消费者groupId=ClientConsumer,消费消息到最新位置,然后停止消费。启动生产者生产一定数量消息,然后停止生产。接着启动消费者,设置auto.offset.reset=latest结果:消费者从上次消费位置接着开始消费若重复上述步骤,仅修改groupId=Clie......
  • kafka复习:(11)auto.offset.reset的默认值
    在ConsumerConfig这个类中定义了这个属性的默认值,如下图也就是默认值为latest,它的含义是:如果没有客户端提交过offset的话,当新的客户端消费时,把最新的offset设置为当前消费的offset.默认是自动提交位移的,每5秒进行一次提交。可以通过参数配置手动提交。手动提交offset的示例import......
  • ASP.NET Core – DateTime, DateTimeOffset, DateOnly, TimeOnly, TimeSpan, TimeZone
    前言心血来潮,这篇讲点基础的东西。对日期和时区TimeZone不熟悉的读者,请先看这篇 TimeZone,LeapYear,DateFormat,EpochTime时区,闰年,日期格式。 C#中的日期类型DateTime ......
  • Offset多维引用
    问题:为何使用Vlookup套Offset查找三个表中对应结果会出错公式:=VLOOKUP(C12,OFFSET(C4,,{0,3,6},3,2),2,)Offset,以C4为起点,向右分别偏移0、3、6,产生新单元格区域为3行两列,这一结果为多维引用,无法在同一单元格内正常显示Vlookup函数无法提取多维引用的结果多维引用解法1:=SUM......
  • 直播源码开发,实现 scroll-view 自动滚动到底部,并控制触发频率
    直播源码开发,实现scroll-view自动滚动到底部,并控制触发频率HTML scroll-view固定高度,允许纵向滚动,scrollTop值通过变量动态改变。将scroll-view内容区域通过view标签进行包裹。 <scroll-viewclass="dialogue-box":scroll-y="true":scroll-top="scrollTop"> <v......
  • QScrollArea设置透明和去除边框
    需求:添加QScrollArea时不需要它自己有样式,完全透明显示父窗口样式即可1、设置透明QPalettepa=palette();pa.setBrush(QPalette::Window,Qt::transparent);setPalette(pa); 2、设置无边框setFrameShape(QFrame::NoFrame);......
  • [ubuntu] 关闭滚动的smooth scroll 效果
    Editthefile ~/.config/gtk-3.0/settings.ini tocontainthefollowinglines:[Settings]gtk-enable-animations=0[Settings]......
  • 微信小程序scroll-view
    <!--纵向滚动--><scroll-viewclass="myScroll"scroll-y><viewclass="row">1</view><viewclass="row">2</view><viewclass="row">3</view><viewclass="row&q......