1. 如何查看滚动条的滚动距离?单位是什么?怎么封装?
查看滚动条的滚动距离
横向:console.log(window.pageXOffset)
纵向:window.pageYOffset
IE8及以下不兼容
document.body.scrollLeft / scrollTop
document.documentElement.scrollLeft / scrollTop
但是不同时有效,比如body的生效时,documentElement的就是0
所以可以封装成一个方法,直接相加。
封装一个方法:
function getScrollOffset() {
if (window.pageXOffset) {
return {x: window.pageXOffset, y: window.pageYOffset}
} else {
return {
x: document.body.scrollLeft +
document.documentElement.scrollLeft,
y: document.body.scrollTop +
document.documentElement.scrollTop
}
}
}
把他封装成一个tools.jsp
然后在新文件的head中添引用:
<script type='text/javascript' src='tools.js'></script>
2. 如何查看当前可视窗口的大小?标准和怪异是啥?怎么封装?
查看可视窗口的尺寸
注意:一个是window,一个是document
window.innerWidth / innerHeight
IE8及以下不兼容及以下不兼容
标准模式下,任意浏览器都兼容
document.documentElement.clientWidth / clientHeight
适用于怪异模式下的浏览器
document.body.clientWidth / clientHeight
区别和标准和怪异:第一行是否是 < !DOCTYPE html >, 没有就怪异
function getViewportOffset() {
if (window.innerWidth) {
return {w: window.innerWidth, h: window.innerHeight}
} else {
if (document.compatMode === 'BackCompat') {
return {
w: document.body.clientWidth,
h: document.body.clientHeight
}
} else {
return {
w: document.documentElement.clientWidth,
h: document.documentElement.clientHeight
}
}
}
}
3. 怎么查看一个元素自身的尺寸?位置?有定位的父级?
返回元素自身的尺寸
div.offsetWidth
div.offsetHight
返回元素的位置(相对于最近的有定位的父级元素)
有定位什么意思呢?就是有position属性
div.offsetLeft
div.offsetTop
返回元素最近的有定位的父级元素
div.offsetParent
4. 如何让元素滚动到特定位置?滚动一段距离呢?怎么实现自动阅读?
让滚动条滚动
scroll(x, y)
scrollTo(x, y)
将x,y滚动到指定位置
scrollBy(x, y)
将x,y滚动一定距离,这个实现的是累加
实现自动阅读,key表示加锁。如果没有锁,多次点击start会
使得速度越来越快,而且点击stop之后,清除不了
start.onclick = function () {
if (key) {
timer = setInterval(function () {
window.scrollBy(0, 10);
}, 100);
key = false;
}
}
stop.onclick = function () {
clearInterval(timer);
key = true;
}
5. 如何修改元素css属性?怎么看到一个元素的css属性?怎么看到他的伪元素属性呢?一般css修改前和修改后的样式怎么做到呢?
控制css实现对样式的修改
div.style.这个实现的是对行间样式的修改这个实现的是对行间样式的修改
值得注意的就是1.复合属性必须修改,2.碰到保留字加上css前缀
比如div.style.border = “1px,solid,red”, 拆开就是
float— > cssFloat
但是不改也没事,所以了解一下就行,可以不记
查询计算样式:
window.getComputedStyle(div, null);
只读,返回的值是绝对值,没有相对单位
IE8及以下不兼容及以下不兼容
console.log(window.getComputedStyle(div, null).width);
还有一个IE独有的属性:div.currentStyle.width 这个可以不记,用到再查
后面的null是什么呢?是伪元素
window.getComputedStyle(div, "after").width
通过这个获得的就是div后面的伪元素after的宽度
div.style.width和window.getComputedStyle(div, null).width哪个好?
后者更好:因为后者返回的是样式最终的数据,而前者只是行间数据,并不一定是最终数据
很重要:
用js改变css一般都是写两个样式(改变前,改变后)
当需要改变的时候直接改变类名实现改变样式
为什么不用div.style.呢?因为这个有两个点,中间会经过复杂的调用,影响效率