DOM三大系列补充与动画封装

78 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

创建元素的三种方式

document.write();

elment.innerHTML

document.createElement

 

区别

1.doument.write 是直接将内容写入页面的内容流,但是文档流执行完毕之后,会导致页面全部重绘

document.write('123');

2.innerHTML 将内容写入某个DOM节点,不会倒是页面全部重绘

3.innerHTML 创建多个元素效率会个更高,结构复杂, 不要拼接字符串, 采用数组形式进行拼接

4.createElement 创建多个元素效率低,但是结构会更清晰

 

createElement方式(效率一般)

innerHTML数组的方式,(效率会更高)

for(var i=0; i<1000; i++) {

array.push('要添加的html标签内容');

}

document.body.innerHTML = array.join('');

offset与style的区别

offset可以得到任意样式表的样式值获取的值没有单位,只读属性,只能获取不能赋值

想要获取元素大小位置,用offset padding+border+width

 

style 行内样式表中的样式值 带有单位的字符串可读写属性,可以获取赋值

想要给元素更改至,用style padding+ border

动画函数封装

通过定时器setInterval()不断的移动盒子,可以很方便的给当前对象议案家属性

function animate(obj, target) {

//当点击按钮的时候,这个元素的速度会越来越快,因为开启了太多的定时器

//解决方法: 让元素只有一个定时器执行

//先清除之前的定时器,然后保留当前的一个定时器执行

clearInterval(obj.timer);

obj.timer = setInterval(function () {

if (obj.offserLeft >= target) {

//停止动画,本质就是停止定时器

obj.style.left = obj.offsetLeft + 10 + 'px'';

}

},200)

}

offset获取元素的位置

client获取元素的大小

scroll获取滚动的距离

要注意: 页面滚动的距离通过window.pageXOffset 获得

页面被卷去的头部兼容性解决方案

需要注意的是,页面被卷去的头部,有兼容性的问题,因此被就去的又不有以下写法

1.声明了DTD, 使用document.document.scrollTop

2.未声明DTD,使用document.body.scrollTop

3.新方法widnwo.pageYOffset和window.pageXOffset,ie9开始支持