tomoya06 / web-developer-guidance

Actually it's just a notebook for keeping down some working experience.
4 stars 0 forks source link

JavaScript - 浏览器、DOM相关 #21

Open tomoya06 opened 3 years ago

tomoya06 commented 3 years ago

DOM

定义

W3C原版定义:The Document Object Model (DOM) is a programming API for HTML and XML documents. It defines the logical structure of documents and the way a document is accessed and manipulated.

MDN翻译定义:文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。

疑难杂症

本栏目主要收录DOM操作以及HTML组件中常见的疑难杂症。

tomoya06 commented 3 years ago

getElementByXXX vs querySelectorAll

用法比较

var c1 = document.querySelectorAll('.b1 .c');
var c2 = document.getElementsByClassName('c');
var c3 = document.getElementsByClassName('b2')[0].getElementsByClassName('c');

下图是在知乎上用两种方法获取div节点的比较:

image

返回值比较

tomoya06 commented 3 years ago

input oncompositionstart / end

中文输入的时候,input:text组件中,input事件是会随着拼音输入而一直被触发的。可以通过oncompositionstart/end事件来监听拼音输入的开始和结束。

下图是在input:text组件中输入拼音“好”字的事件相应:

image

tomoya06 commented 3 years ago

height / clientHeight / offsetHeight / scrollHeight

描述元素高度的几个属性。对应的还有width的各种变式。区分度主要在于滚动元素。

image

运用

  1. 判断元素是否滚动到底部:element.scrollHeight - element.scrollTop === element.clientHeight。参考MDN scrollHeight中提供的一个DEMO,来保证用户已阅读完许可条款。
  2. 定高container中元素的lazy-load:可根据container.scrollTop + container.clientHeight - elem.offsetTop > 0判断elem是否已经在container中露出。参考自己实现的DEMO