前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始学习DOM-BOM(一)

从零开始学习DOM-BOM(一)

作者头像
虎妞先生
发布2022-10-27 19:50:45
4440
发布2022-10-27 19:50:45
举报

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

前言

我们都知道,Javascript是由ECMAScript,DOM,BOM组成的。但是很多开发小伙伴对DOM,BOM缺乏一个系统的认识,今天这篇文章主要讲述DOM和BOM的体系化知识。

ECMAScript,描述了该语言的语法和基本对象,如类型、运算、流程控制、面向对象、异常等。 文档对象模型(DOM),描述处理网页内容的方法和接口。 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

BOM

认识BOM

  • JavaScript有一个非常重要的运行环境就是浏览器,而且浏览器本身又作为一个应用程序需要对其本身进行操作,所以通常浏览器会有对 应的对象模型(BOM,Browser Object Model)。
    • 我们可以将BOM看成是连接JavaScript脚本与浏览器窗口的桥梁。
  • BOM主要包括一下的对象模型:
    • window:包括全局属性、方法,控制浏览器窗口相关的属性、方法;
    • location:浏览器连接到的对象的位置(URL);
    • history:操作浏览器的历史;
    • document:当前窗口操作文档的对象;
  • window对象在浏览器中有两个身份:
    • 身份一:全局对象。 我们知道ECMAScript其实是有一个全局对象的,这个全局对象在Node中是global; 在浏览器中就是window对象;
    • 身份二:浏览器窗口对象。 作为浏览器窗口时,提供了对浏览器操作的相关的API;

Window全局对象

在浏览器中,window对象就是之前经常提到的全局对象,也就是我们之前提到过GO对象:

  • 比如在全局通过var声明的变量,会被添加到全局环境变量中,也就是会被添加到window上;
  • 比如window默认给我们提供了全局的函数和类:setTimeout、Math、Date、Object等;
代码语言:javascript
复制
var message = 'hello'
function foo(){
    console.log("foo")
}
console.log(window.message)
window.foo()
代码语言:javascript
复制
 window.setTimeout(()=>{
     console.log('setTimout')
 })
 
 const obj = new window.Object()
 console.log(obj)

Window窗口对象

window是一个复杂的大对象,包含了大量的对象和方法

  • 第一:包含大量的属性,localStorage、console、location、history、screenX、scrollX等等(大概60+个属性);
  • 第二:包含大量的方法,alert、close、scrollTo、open等等(大概40+个方法);
  • 第三:包含大量的事件,focus、blur、load、hashchange等等(大概30+个事件);
  • 第四:包含从EventTarget继承过来的方法,addEventListener、removeEventListener、dispatchEvent方法; 参考地址:MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Window
image.png
image.png

window常见的属性

代码语言:javascript
复制
// screenX和screenY属性返回窗口相对于屏幕的X和Y坐标。
console.log(window.screenX)
console.log(window.screenY)

// 监听滚动
window.addEventListener("scroll", () => {
   console.log(window.scrollX, window.scrollY)
})
// 获取窗口的宽度与高度:
console.log(window.outerHeight)
console.log(window.innerHeight)

属性

描述

closed

返回窗口是否已被关闭。

defaultStatus

设置或返回窗口状态栏中的默认文本。

document

对 Document 对象的只读引用。(请参阅对象)

frames

返回窗口中所有命名的框架。该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架。

history

对 History 对象的只读引用。请参数 History 对象。

innerHeight

返回窗口的文档显示区的高度。

innerWidth

返回窗口的文档显示区的宽度。

localStorage

在浏览器中存储 key/value 对。没有过期时间。

length

设置或返回窗口中的框架数量。

location

用于窗口或框架的 Location 对象。请参阅 Location 对象。

name

设置或返回窗口的名称。

navigator

对 Navigator 对象的只读引用。请参数 Navigator 对象。

opener

返回对创建此窗口的窗口的引用。

outerHeight

返回窗口的外部高度,包含工具条与滚动条。

outerWidth

返回窗口的外部宽度,包含工具条与滚动条。

pageXOffset

设置或返回当前页面相对于窗口显示区左上角的 X 位置。

pageYOffset

设置或返回当前页面相对于窗口显示区左上角的 Y 位置。

parent

返回父窗口。

screen

对 Screen 对象的只读引用。请参数 Screen 对象。

screenLeft

返回相对于屏幕窗口的x坐标

screenTop

返回相对于屏幕窗口的y坐标

screenX

返回相对于屏幕窗口的x坐标

sessionStorage

在浏览器中存储 key/value 对。 在关闭窗口或标签页之后将会删除这些数据。

screenY

返回相对于屏幕窗口的y坐标

self

返回对当前窗口的引用。等价于 Window 属性。

status

设置窗口状态栏的文本。

top

返回最顶层的父窗口。

window常见的方法

代码语言:javascript
复制
const scrollBtn = document.querySelector("#scroll")
scrollBtn.onclick = function() {
    //1.scrollTo
    window.scrollTo({ top: 2000 })

    //2.close
    window.close()

    // 3.open
    window.open("http://www.baidu.com", "_self")
}

方法

描述

alert()

显示带有一段消息和一个确认按钮的警告框。

atob()

解码一个 base-64 编码的字符串。

btoa()

创建一个 base-64 编码的字符串。

blur()

把键盘焦点从顶层窗口移开。

clearInterval()

取消由 setInterval() 设置的 timeout。

clearTimeout()

取消由 setTimeout() 方法设置的 timeout。

close()

关闭浏览器窗口。

confirm()

显示带有一段消息以及确认按钮和取消按钮的对话框。

createPopup()

创建一个 pop-up 窗口。

focus()

把键盘焦点给予一个窗口。

getSelection()

返回一个 Selection 对象,表示用户选择的文本范围或光标的当前位置。

getComputedStyle()

获取指定元素的 CSS 样式。

matchMedia()

该方法用来检查 media query 语句,它返回一个 MediaQueryList对象。

moveBy()

可相对窗口的当前坐标把它移动指定的像素。

moveTo()

把窗口的左上角移动到一个指定的坐标。

open()

打开一个新的浏览器窗口或查找一个已命名的窗口。

print()

打印当前窗口的内容。

prompt()

显示可提示用户输入的对话框。

resizeBy()

按照指定的像素调整窗口的大小。

resizeTo()

把窗口的大小调整到指定的宽度和高度。

scroll()

已废弃。 该方法已经使用了 scrollTo() 方法来替代。

scrollBy()

按照指定的像素值来滚动内容。

scrollTo()

把内容滚动到指定的坐标。

setInterval()

按照指定的周期(以毫秒计)来调用函数或计算表达式。

setTimeout()

在指定的毫秒数后调用函数或计算表达式。

stop()

停止页面载入。

postMessage()

安全地实现跨源通信。

window常见的事件

代码语言:javascript
复制
// 整个页面以及所有资源加载完成
window.onload = function() {
  console.log("window窗口加载完毕~")
}

window.onfocus = function() {
  console.log("window窗口获取焦点~")
}

window.onblur = function() {
  console.log("window窗口失去焦点~")
}

//hash 改变
const hashChangeBtn = document.querySelector("#hashchange")
hashChangeBtn.onclick = function() {
  location.hash = "aaaa"
}
window.onhashchange = function() {
  console.log("hash发生了改变")
}

Navigator 对象

Navigator 对象包含有关浏览器的信息。

Navigator 对象常见的属性

代码语言:javascript
复制
window.navigator.appCodeName
//返回浏览器的代码名   'Mozilla'
window.navigator.appName
//返回浏览器的名称 'Netscape'
window.navigator.appVersion
//返回浏览器的平台和版本信息
//'5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
window.navigator.cookieEnabled
//返回指明浏览器中是否启用 cookie 的布尔值 true
window.navigator.platform
//返回运行浏览器的操作系统平台 'MacIntel'
window.navigator.userAgent
//返回由客户机发送服务器的user-agent 头部的值
//'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'

Location 对象常见的属性

  • href: 当前window对应的超链接URL, 整个URL;
  • protocol: 当前的协议;
  • host: 主机地址;
  • hostname: 主机地址(不带端口);
  • port: 端口;
  • pathname: 路径;
  • search: 查询字符串;
  • hash: 哈希值;
  • username:URL中的username(很多浏览器已经禁用);
  • password:URL中的password(很多浏览器已经禁用); Location 对象常见的方法

Location 对象常见的方法

  • assign:赋值一个新的URL,并且跳转到该URL中;
  • replace:打开一个新的URL,并且跳转到该URL中(不同的是不会在浏览记录中留下之前的记录);
  • reload:重新加载页面,可以传入一个Boolean类型;如果把该方法的参数设置为 true,那么无论文档的最后修改日期是什么,它都会绕过缓存,从服务器上重新下载该文档。
代码语言:javascript
复制
location.assign("http://www.baidu.com")
location.href = "http://www.baidu.com"

location.replace("http://www.baidu.com")
location.reload(false)
 

history 对象

history对象允许我们访问浏览器曾经的会话历史记录。

history对象有两个属性

  • length:会话中的记录条数;
  • state:当前保留的状态值;

history对象有五个方法:

  • back():返回上一页,等价于history.go(-1);
  • forward():前进下一页,等价于history.go(1);
  • go():加载历史中的某一页;
  • pushState():打开一个指定的地址;
  • replaceState():打开一个新的地址,并且使用replace;

总结

BOM 对象常用的就这些,后面我们会继续介绍DOM对象,一般不建议去背记这些api,只需要建立一个系统的知识体系,当下次再次遇到,有印象,去MDN查找相关文档,我想这就是有意义的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • BOM
    • 认识BOM
      • Window全局对象
        • Window窗口对象
          • window常见的属性
          • window常见的方法
          • window常见的事件
        • Navigator 对象
          • Navigator 对象常见的属性
          • Location 对象常见的属性
        • history 对象
          • history对象有两个属性
          • history对象有五个方法:
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档