DOM、事件对象
Dom
Dom对象的样式
-
设置Dom对象的样式
dom.style.styleName=\”\”
对象方法,需要将css-字母,替换为大写字母
- style字符串方式写法,按照原CSS行内样式填写
获取计算后的dom样式
ie
currentStyle
非ie
- getComputedStyle
使用时要先判断浏览器
- var style;
try{
style=getComputedStyle(div0);
}catch(error){
style=div0.currentStyle;
}
拓展:
Object.assign() 复制对象,浅复制
增添class样式
Dom对象常见属性
-
宽高
DOM的宽高问题
clientWidth clientHeight 客户宽高
计算后宽高=宽高+padding-(如果有滚动条,减去滚动条宽高)
offsetWidth offsetHeight 偏移宽高
- 计算后宽高=宽高+padding+border
scrollWidth scrollHeight 滚动内容宽高
- 如果没有超出 等同于clientWidth和clientHeight
html和body宽高问题
document.body body标签
clientWidth clientHeight 客户宽高
实际body的宽度和高度-滚动条宽高
offsetWidth offsetHeight 偏移宽高
- 实际body的宽度和高度-滚动条宽高
scrollWidth scrollHeight 滚动内容宽高
- 实际body中内容的宽高
document.documentElement html标签
clientWidth clientHeight 客户宽高
当前文档的可视宽高-(如果有滚动条,减去滚动条宽高)
offsetWidth offsetHeight 偏移宽高
- 当前文档的内容宽高-(如果有滚动条,减去滚动条宽高)
scrollWidth scrollHeight 滚动内容宽高
- 当前文档的可视宽高
位置
DOM的位置问题
clientLeft clientTop 客户位置
边线的宽高
offsetLeft offsetTop 偏移位置
- 当前div到父容器左上角的距离(父容器是定位)
scrollLeft scrollTop 滚动条位置
- 当前元素的滚动条位置
getBoundingClientRect() 当前元素到可视窗口左上角的位置
console.log(rect);
rect.x===rect.left;
html和body位置问题
html和body的clientLeft ,offsetLeft 不考虑
scrollTop、scrollLeft
页面中的滚动是html的scrollTop和scrollLeft控制
早期的浏览器是body控制
考虑兼容一起写,设置同样的值
如:
document.body.scrollTop=100;
document.documentElement.scrollTop=100;
事件对象
事件基础
-
事件
是通知和侦听组合完成的
- 先侦听后通知,执行对应的函数
- 部分事件是系统默认事件,这些事件会由系统自动抛发
创建一个事件对象
- 事件类型必须是一个字符串
事件原理
-
捕获阶段
从外到里
目标阶段
- 事件锁定对象的最后的目标元素
冒泡阶段
- 从里到外
事件侦听和删除侦听
-
ie9以上
添加事件:element.addEventListener(1,2,3)
1事件类型
-
2事件回调函数
-
3布尔值(是否是捕获阶段,默认是false)
布尔值true 捕获,false冒泡
移除事件:element.removeEventListener(‘事件名’,事件函数名,事件冒泡/捕获)
ie8及以下
- 添加事件:element.attachEvent(‘on开头的事件名’,事件函数名)
注:
- 事件对象必须是EventTarget或者继承他所产生子类
取消冒泡事件
-
标准浏览器下 DOM中 :
event.stopPropagation() 停止传播
IE8及以下:
- event.cancelBubble=true 取消冒泡
this
-
事件中的this
侦听的对象,而不是点击的目标对象
- 等同于 currentTarget 侦听的对象
target、srcElement、toElement 实际点击的目标对象
- 目标的定位 不管有没有停止冒泡,都有目标
事件委托
- 将子元素的事件,委托给父元素。这样就可以减少侦听的数量
XMind: ZEN – Trial Version