15-JavaScript-BOM开篇

BOM

  • 什么是BOM?
    DOM就是一套操作HTML标签的API(接口/方法/属性)
    BOM就是一套操作浏览器的API(接口/方法/属性)

BOM中常见的对象

window对象
  • 代表整个浏览器窗口

注意点: window是BOM中的一个对象, 并且是一个顶级的对象(全局)

Navigator对象
  • 代表当前浏览器的信息, 通过Navigator我们就能判断用户当前是什么浏览器
console.log(window.navigator);
console.log(window.navigator.userAgent);
Location对象
  • 代表浏览器地址栏的信息
// console.log(window.location);
//获取当前地址栏地址
console.log(window.location.href);

// 设置当前地址栏的地址
window.location.href = "http://www.it666.com";
 window.location = "http://www.it666.com";//相当于跳转到指定地址

//重新加载界面
window.location.reload();
// 如果传递一个true, 会强制清空缓冲
window.location.reload(true);
History对象
  • 代表浏览器的历史信息, 可以通过History来实现刷新/上一步/下一步
// history对象的forward就可以前进
// 注意点: 只有当前访问过其它的界面, 才能通过forward方法前进
// 注意点: 只有当前是从其它界面跳转过来的, 才能通过back方法后退
window.history.forward();
window.history.back();

// history对象的go方法, 也可以实现前进和后退
// 如果给go方法传递1, 就代表前进1个界面, 传递2就代表进行2个界面
// 如果给go方法传递-1, 就代表后退1个界面, 传递-2就代表后退2个界面
// 如果给go方法传递0, 就代表刷新
window.history.go(1);
window.history.go(0);
console.log("abc");
Screen对象
  • 代表用户的屏幕信息

offsetWidth和offsetHeight

  • 作用:获取元素占用空间的大小,占用空间 = width + border + paddding
  • offsetXXXX和style.XXXX的区别:
    • offsetXXXX既可以获取行内, 也可以获取CSS样式
    • style.XXXX只能获取行内, 不能获取CSS样式
    • offsetXXXX获取到的宽度和高度, 是元素占用的宽度和高度
    • style.XXXX获取到的宽度和高度, 是元素width和height属性的宽度和高度,也就是不包含border + paddding
console.log(oDiv.style.width);//获取不到CSS样式设置的宽高
console.log(oDiv.offsetWidth);//width + border + paddding

window.getComputedStyle方法

  • 该方法的作用:
    是获取当前元素对应的CSS样式
  • 第一个参数: 需要获取样式的元素
    第二个参数: null
    返回一个保存了指定元素所有CSS样式的对象给我们

注意点: getComputedStyle只能用于IE9及以上

var style = window.getComputedStyle(oDiv,null);
console.dir(style.width);//100px 字符串
console.dir(style.height);//100px 字符串
// 获取样式兼容性的处理
    function getStyle(obj, attr) {
        //兼容低版本浏览器
        if(obj.currentStyle){
            return obj.currentStyle[attr];
        }else{
            return window.getComputedStyle(obj, null)[attr];
        }
    }

offsetLeft和offsetTop

  • 作用:获取元素到第一个定位元素之间的偏移位,如果没有父元素是定位的, 那么就是获取到body的偏移位
  • offsetLeft和marginLeft和left的区别
    • offsetLeft:获取的是距离第一个定位元素或者body的偏移位
    • marginLeft: 获取的是CSS设置的marginLeft的值
    • left: 获取的是CSS设置的left的值

注意点:
1.offsetXXX返回的是数值类型, 而style.XXXX返回的都是字符串
2.offsetXXX是只读的, style.XXXX是可读可写的

console.log(oDiv.offsetLeft);
console.log(oDiv.offsetTop);
console.log(oDiv.style.marginLeft);//空的,不能获取CSS样式设置的值

clientWidth和clientHeight

  • clientWidth = width + padding

注意点:
clientWidth的宽度是不包括元素的边框宽度

  • clientLeft = border-left

scrollHeight和scrollTop

  • scrollHeight:
    如果内容没有超过元素的范围, 那么就是元素的padding + height
    如果内容超出了元素的范围, 那么就是padding + height + 超出的高度
  • scrollTop:
    获取被移出元素范围的距离(参考点不包括border)

pageX和pageY

  • pageX和pageY是相对于整个文档的水平和垂直距离(只读属性)

注意点:
如果网页出现滚动条,那么滚出可视区域的部分也算入在内


网页可视区域大小

  • 高级版本浏览器
// 注意点:存在兼容问题支持IE9+
console.log(window.innerWidth);
console.log(window.innerHeight);
  • 低级版本IE浏览器
//兼容IE8-方法
console.log(document.documentElement.clientWidth);
console.log(document.documentElement.clientHeight);
  • 获取网页可视区域大小兼容写法
    //简单兼容性处理
    function getScreen() {
        if (window.innerWidth){
            return {
                width: window.innerWidth,
                height : window.innerHeight
            }
        } else {
            return{
                width: document.documentElement.clientWidth,
                height : document.documentElement.clientHeight
            }
        }
    }

获取网页滚动距离

  • 老版本的谷歌
document.body.scrollTop
  • 老版本的其它浏览器
document.documentElement.scrollTop
  • 新版本的浏览器
window.pageYOffset
  • 兼容写法
function getPageScroll() {
        var top = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
        var left = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
        return {
            top: top,
            left: left
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容