CSSOM和CSSOM View这两个我都不是熟悉的领域。


1.描述样式表和规则等 CSS 的模型部分(CSSOM)

        cssom中document.styleSheets :获取文档中所有的样式(只读),这个不常见,不做过多的介绍

2.元素视图相关的 View 部分(CSSOM View)

CSSOM View 这一部分的 API,可以视为 DOM API 的扩展,分为:窗口部分,滚动部分和布局部分

窗口 API

窗口 API 用于操作浏览器窗口的位置、尺寸等

moveTo(x, y) 窗口移动到屏幕的特定坐标;

moveBy(x, y) 窗口移动特定距离;

resizeTo(x, y) 改变窗口大小到特定尺寸;

resizeBy(x, y) 改变窗口大小特定尺寸。

窗口 API 还规定了 window.open() 的第三个参数:


window.open("about:blank", "_blank" ,"width=100,height=100,left=100,right=100" )

滚动 API

视口滚动 API

可视区域(视口)滚动行为由 window 对象上的一组 API 控制

scrollX 是视口的属性,表示 X 方向上的当前滚动距离,有别名 pageXOffset;

scrollY 是视口的属性,表示 Y 方向上的当前滚动距离,有别名 pageYOffset;

scroll(x, y) 使得页面滚动到特定的位置,有别名 scrollTo,支持传入配置型参数 {top, left};scrollBy(x, y) 使得页面滚动特定的距离,支持传入配置型参数 {top, left}。

通过这些属性和方法,我们可以读取视口的滚动位置和操纵视口滚动。不过,要想监听视口滚动事件,我们需要在 document 对象上绑定事件监听函数:


document.addEventListener("scroll", function(event){//......
})

元素滚动 API

scrollTop 元素的属性,表示 Y 方向上的当前滚动距离。

scrollLeft 元素的属性,表示 X 方向上的当前滚动距离。

scrollWidth 元素的属性,表示元素内部的滚动内容的宽度,一般来说会大于等于元素宽度。scrollHeight 元素的属性,表示元素内部的滚动内容的高度,一般来说会大于等于元素高度。scroll(x, y) 使得元素滚动到特定的位置,有别名 scrollTo,支持传入配置型参数 {top, left}。scrollBy(x, y) 使得元素滚动到特定的位置,支持传入配置型参数 {top, left}。

scrollIntoView(arg) 滚动元素所在的父元素,使得元素滚动到可见区域,可以通过 arg 来指定滚到中间、开始或者就近。

除此之外,可滚动的元素也支持 scroll 事件,我们在元素上监听它的事件即可:


element.addEventListener("scroll", function(event){//......
})

布局 API

全局尺寸信息

我们主要使用的是 innerHeight、innerWidth 和 devicePixelRatio 三个属性,因为我们前端开发工作只需要跟视口打交道

元素的布局信息

事实上,只有盒有宽和高,元素是没有的。于是 CSSOM View 为 Element 类添加了两个方法

getClientRects();

会返回一个列表,里面包含元素对应的每一个盒所占据的客户端矩形区域,这里每一个矩形区域可以用 x, y, width, height 来获取它的位置和尺寸。

getBoundingClientRect()。

这个 API 的设计更接近我们脑海中的元素盒的概念,它返回元素对应的所有盒的包裹的矩形区域,需要注意,这个 API 获取的区域会包括当 overflow 为 visible 时的子元素区域。

此文章为4月Day13学习笔记,内容来源于极客时间《重学前端》

CSSOM和CSSOM View相关推荐

  1. Web性能优化系列(1):Web性能优化分析

    本文由 伯乐在线 - 鸭梨山大 翻译,sunbiaobiao 校稿.未经许可,禁止转载! 英文出处:gokulkrishh.github.io.欢迎加入翻译小组. 如果你的网站在1000ms内加载完成 ...

  2. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧

    原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十一章. 迄 ...

  3. 深入理解浏览器解析和执行过程

    在我们公司的业务场景中,有很大一部分用户是使用老款安卓机浏览页面,这些老款安卓机性能较差,如果优化不足,页面的卡顿现象会更加明显,此时页面性能优化的重要性就凸显出现.优化页面的性能,需要对浏览器的渲染 ...

  4. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧 1

    原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十一章. 迄 ...

  5. 浏览器字体大小设置_CSS之 浏览器解析样式的过程

    阅读本文约需要10分钟 大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务! 1.长期为你提供最优质的学习资源! 2.给你解决技术问题! 3.每天在朋友圈里分 ...

  6. 前端必会!四步带你吃透浏览器渲染基本原理

    作者 | SHERlocked93 责编 | 胡巍巍 大多数设备的刷新频率是60Hz,也就说是浏览器对每一帧画面的渲染工作要在16ms内完成,超出这个时间,页面的渲染就会出现卡顿现象,影响用户体验.前 ...

  7. web页面加载、解析、渲染过程

    对web项目进行优化首先得知道浏览器是怎么工作的这里推荐 how browsers work 中文版: 一.浏览器 浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示 ...

  8. 面试关于网络的那些事

    1.TCP/UDP (1)TCP----------传输控制协议,是一种面向连接的.可靠的.基于字节流的传输层通信协议.其实它和上面所说的电话协议差不多,只不过电话的协议是服务于电话通信,而tcp是服 ...

  9. 每天3个面试题精研 - 前端 - 第4-6天

    目录 20页面解析顺序 19应用层协议 18position属性 17css的选择器及其权重 16js继承机制 15原型与原型链 14GET和POST两种基本请求方法的区别 13说出几个http协议状 ...

最新文章

  1. CSS3之创建3D场景
  2. 修改mac的hosts文件
  3. JUnit4学习笔记(二):参数化测试与假定(Assumption)
  4. Linq表达式和Lambda表达式用法对比
  5. Rose与PowerDesigner:两款建模工具对比分析比较
  6. LeetCode 670 最大交换 (暴力+贪心、Python)
  7. topcoder srm 625 div1
  8. 将not exists更改为外连接
  9. 吴恩达新研究:AI看心电图,诊断心律失常准确率超过人类医生丨Nature
  10. stdmove 跟 左键引用 区别_C++ auto和decltype的区别
  11. 【信息系统项目管理师】第1章-信息化和信息系统 知识点详细整理
  12. 软件项目管理:软件工具与开发环境相关知识介绍
  13. CANOE学习笔记-CAPL语言设计
  14. Php处理输入法表情,php开发中手机输入法自带的表情、emoji表情、微信表情不显示问题,以及过虑emoji表情方法!...
  15. 用Python做九宫格照片
  16. 一键封装app--webapp、HybridApp
  17. 修复WHS中缺少的外部硬盘数据库错误
  18. Linux Python离线下载模块
  19. 自然语言处理--文档集数据处理 gensim corpora.Dictionary
  20. 轻社区的“赚钱术”:免费社区赚钱,去年利润1个亿

热门文章

  1. 主梁弹性模量计算_穿心棒法盖梁施工计算书(工字钢)
  2. 爆款营销打破空间局限,新商云提高门店坪效
  3. 【统计】假设检验的理解
  4. 基于 ANFIS 的非线性回归(Matlab代码实现)
  5. Microsoft Remote Desktop for Mac(远程桌面连接工具)
  6. 网址在线封装APK系统源码
  7. 深富策略:关注风格的切换 等待压力的突破
  8. 【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图
  9. Python pact契约测试实战
  10. Android高中低端机整理,高中低端都有 各品牌新上市安卓机汇总