javascript-之-BOM 浏览器对象模型( BOM 的核心--window)

BOM(Browser Object Model 浏览器对象模型)

BOM的概述

1、什么是BOM

  • BOM(Browser Object Model): 浏览器对象模型
  • BOM 的核心就是 window 对象
  • 把==浏览器==当作一个==对象==来看待 (window 是浏览器内置的一个对象,里面包含着操作浏览器的方法)
  • BOM学习是浏览器窗口的一些对象
    • 获取一些浏览器的相关信息(窗口的大小)
    • 操作浏览器进行页面跳转
    • 获取当前浏览器地址栏的信息
    • 操作浏览器的滚动条
    • 浏览器的信息(浏览器的版本)
    • 让浏览器出现一个弹出框(alert/confirm/prompt)
console.log(window);
//我们可以直接在浏览器中console.log(window)查看各种window的属性和方法
 window.a = 10;
 console.log(a);
 console.log(window.a)
// 所有的不带有前缀全局变量的时候,前面都可以带有window. JavaScript默认把window.这个代码给省略;
 function foo(){
 }
 window.foo();

2、BOM的构成

BOM比DOM更大,它包含DOM


在这里插入图片描述

window对象

==window对象是浏览器的顶级对象==,它具有双重角色。

  1. 它是JS访问浏览器窗口的一个接口。
  2. 它是一个全局对象。定义在全局作用域中的变量。函数都会变成window对象的属性和方法。
    (在调用的时候可以省略window。)

浏览器的弹出层

  • ==alert==是在浏览器弹出一个提示框


    在这里插入图片描述

    这个弹出层是一个提示内容框,只有一个确定按钮,点击确定按钮以后,这个提示框就消失了

  • ==prompt==是在浏览器弹出一个输入框


    在这里插入图片描述

    这个弹出层有一个输入框和两个按钮
    ,当你点击取消的时候,得到的是 null
    ,当你点击确定的时候得到的就是你输入的内容

  • ==confirm==是在浏览器弹出一个询问框


    在这里插入图片描述

    这个弹出层有一个询问信息和两个按钮当你点击确定的时候,就会得到 true,当你点击取消的时候,就会得到 false

// 这三个方法都会阻塞代码执行;

// alert("我是一个提示框");
// 以下两个有返回值;
// var res=confirm("我是一个询问框");
// console.log(res)//得到布尔值
// var res1=prompt("我是一个输入框");
// console.log(res1)//得到输入内容

window上的各种属性

在这里插入图片描述

注意:window下的各种属性或方法名都不要直接用来作为全局变量命,会冲突

window下的子对象

1. 浏览器的==地址信息== (location)

  • window.location.href 当前页面的 URL,可以获取,可以修改(页面跳转)。
  • window.location.hostname web 主机的域名
  • window.location.pathname 当前页面的路径和文件名
  • window.location.port web 主机的端口 (80 或 443)
  • window.location.protocol 所使用的 web 协议(http:// 或 https://)
  • window.location.search 请求参数(?后面的内容)
  • window.location.reload();
    • 刷新页面的方法。一般情况下给reload()传递一个true,让他刷新,并不使用缓存。
    • 缓存的东西一般为js文件,css文件等。
    • 用这个方法可以让自己不能动的页面动起来了。刷新当前页面。
    • 注意: 不要写在全局,不然浏览器就会一直处在刷新状态
//js实现页面跳转
location.replace('http://www.baidu.com')
location.href = 'http://www.baidu.com'
window.open('http://www.baidu.com')
location.assign('http://www.baidu.com')

2.浏览器的==版本信息==(了解)(navigator)

  • navigator.appName 返回获取当前浏览器的名称。
  • navigator.appVersion 返回 获取当前浏览器的版本号。
  • navigator.platform 返回 当前计算机的操作系统。
  • 以上属性已经在逐渐被抛弃了。
    下面一个新的属性将替代这些属性。
  • navigator.userAgent 返回浏览器信息(可用此属性判断当前浏览器)
//判断当前浏览器类型的代码:

function isBrowser() {
    var userAgent = navigator.userAgent;
    //微信内置浏览器
    if(userAgent.match(/MicroMessenger/i) == 'MicroMessenger') {
        return "MicroMessenger";
    }
    //QQ内置浏览器
    else if(userAgent.match(/QQ/i) == 'QQ') {
        return "QQ";
    }
    //Chrome
    else if(userAgent.match(/Chrome/i) == 'Chrome') {
        return "Chrome";
    }
    //Opera
    else if(userAgent.match(/Opera/i) == 'Opera') {
        return "Opera";
    }
    //Firefox
    else if(userAgent.match(/Firefox/i) == 'Firefox') {
        return "Firefox";
    }
    //Safari
    else if(userAgent.match(/Safari/i) == 'Safari') {
        return "Safari";
    }
    //IE
    else if(!!window.ActiveXObject || "ActiveXObject" in window) {
        return "IE";
    }
    else {
        return "未定义:"+userAgent;
    }
}

3. 浏览器的==历史记录== (history)

  • history.go(1) 参数可写任意整数,正数前进,负数后退
  • history.back() 后退
  • history.forward() 前进
  • history.length 属性 -- history对象中缓存了多少个URL(可以记录浏览器究竟在当前有多少个历史;)

4. 浏览器的==屏幕== (screen)

  • window.screen.width 返回当前屏幕宽度(分辨率值)
  • window.screen.height 返回当前屏幕高度(分辨率值)

5. ==定时器==

  • 间隔定时器 setInterval 清除定时器clearInterval
var i = 0
var timer = setInterval(function () {
  console.log(i++)
  // 判断终点要在定时器里面写,因为定时器每执行一次都要判断
  if (i === 5) {
    // 停止定时器,根据id来停止
    clearInterval(timer)
  }
}, 1000)
  • 超时定时器(延时器) setTimeout 清除定时器 clearTimeout
<button onclick="fn()">停止定时器</button>
<script>
// 3秒之后执行一次
var timer = setTimeout(function () {
  console.log(123)
}, 3000)

function fn () {
  clearTimeout(timer)
}

</script>

window的事件

1. ==onload事件==: 页面内容加载完成(DOM结构,图片.....)后触发

//onload 当浏览器加载结束之后:
// 加载没有完成直接就获取了,会导致图片宽高获取失败;
// console.log(img.width,img.height);
window.onload = function(){
    // 放在这个事件里就可以稳定的获取图片的高度;
     console.log(img.width,img.height);
}

2. ==onscroll事件==: 拖动浏览器的滚动条触发此事件。

window.onscroll = function(){
    //兼容写法
    var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    // document.body; => 获取body元素;
    // document.documentElement => 获取html元素;
    console.log(scrollTop);
}

3. ==onresize事件==:浏览器窗口缩放所触发此事件。

//onresize 事件会在窗口或框架被调整大小时发生。
window.onresize = function(){
    console.log(1);
}

以上内容全部由自己整理,如有问题欢迎纠正,一起讨论学习。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容