JS(DOM/BOM)
事件冒泡、事件委托
捕获、冒泡、阻止冒泡
事件委托
NodeList vs HTMLCollection
NodeList: Element.querySelectorAll('div') / Element.childNodes
HTMLCollection: Element.getElementsByTagName('div') / Element.children
HTMLCollection的特性
- 只包含elementNode(无textNode)
- 动态更新,当页面的元素更新时,此集合也会自动同步
- namedItem方法
attribute操作,class操作
CSS Object Model
const styleSheet: CSSStyleSheet = document.styleSheets[0];
styleSheet.insertRule('h1 { font-weight: bold; color: green; }', 0);
const styleRule: CSSStyleRule = styleSheet.cssRules[0];
styleRule.style.setProperty('color', 'red');
console.log(styleRule.cssText); // 'h1 { font-weight: bold; color: red; }'
window.btoa / window.atoa
加密/解密base64
window.navigator
userAgent 区分浏览器类型和环境
geolocation 获取地理位置(需要用户手动许可)
综合
判断元素是否在可视区域
el.getBoundingClientRect直接返回相对可视区域的offset
IntersectionObserver
结合页面scroll和元素相对页面的offset计算
计算元素在页面上的坐标
let top = 0, left = 0;
while (el && el !== document) {
top += el.offsetTop || 0;
left += el.offsetLeft || 0;
el = el.offsetParent;
}