Zepto源码分析之ie模块
前言
Zepto中的ie模块主要是改写
getComputedStyle
浏览器API,代码量很少,但也是其重要模块之一。在看源代码之前,我们先回顾一下如何使用
getComputedStyle
Window.getComputedStyle() 方法给出应用活动样式表后的元素的所有CSS属性的值,并解析这些值可能包含的任何基本计算。MDN
let style = window.getComputedStyle(element, [pseudoElt]);
element
element参数即是我们要获取样式的元素
pseudoElt
要匹配的伪元素字符串,对于普通元素来说需省略(null)
结果
特别重要的是该方法执行后返回的样式是一个实时的 CSSStyleDeclaration 对象,当元素的样式更改时,它会自动更新本身。
<style> #elem{ position: absolute; left: 100px; top: 200px; height: 100px; } </style> <div id="elem">dummy</div>
let $elem = document.querySelector('#elem') let cssProps = getComputedStyle($elem, null) let { width, height } = cssProps console.log(width, height)
特别注意
第一个参数必须是Element对象(传递一个非节点元素,如 一个#text 节点, 将会抛出一个错误)MDN,这也可能是Zepto要重写它的原因吧
源码分析
;(function(){ // getComputedStyle shouldn't freak out when called // without a valid element as argument // 重写getComputedStyle // 第一个参数如果不是元素节点则会抛出错误,被catch捕获,并被重写。 // 重写后的方法,如果传入的第一个参数不是元素节点,被catch捕获,返回null,则不影响后续代码的运行 try { getComputedStyle(undefined) } catch(e) { var nativeGetComputedStyle = getComputedStyle window.getComputedStyle = function(element, pseudoElement){ try { return nativeGetComputedStyle(element, pseudoElement) } catch(e) { return null } } } })()
代码非常简单,浏览器在加载该模块的时候,如果调用getComputedStyle第一个参数不为元素节点时抛出错误,则被catch捕获,并重写该方法。重写的方法中是另一个try catch,如果后续再发生错误,将返回null,不阻碍后续js代码的执行。
结尾
以上便是Zepto ie模块的源码分析的全部,欢迎提出意见和建议。
文章记录
ie模块
- Zepto源码分析之ie模块(2017-11-03)
data模块
- Zepto中数据缓存原理与实现(2017-10-03)
form模块
- zepto源码分析之form模块(2017-10-01)
zepto模块
- 这些Zepto中实用的方法集(2017-08-26)
- Zepto核心模块之工具方法拾遗 (2017-08-30)
- 看zepto如何实现增删改查DOM (2017-10-2)
event模块
- mouseenter与mouseover为何这般纠缠不清?(2017-06-05)
- 向zepto.js学习如何手动触发DOM事件(2017-06-07)
- 谁说你只是"会用"jQuery?(2017-06-08)
ajax模块
- 原来你是这样的jsonp(原理与具体实现细节)(2017-06-11)
相关推荐
80437916 2020-02-01
zhoutaifeng 2020-01-17
xxuncle 2019-12-29
89463661 2019-12-26
PowerITxiang 2019-11-04
cloudwiseAPM 2017-05-26
88570299 2019-07-01
momode 2019-07-01
Xhj 2019-06-29
Awara 2019-06-29
New丶Elements 2019-06-29
ftl 2019-06-29
thisisid 2019-06-29
FruitHardCandy 2018-04-18
cloudwiseAPM 2017-05-26
85173253 2016-08-09
野风技术札记 2019-06-28
mzy000 2019-06-28