js红宝石 第十二章-BOM

12.1 window对象

BOM的核心是window对象

window对象有两重身份:ECMAScript中的Global对象;浏览器窗口的JavaScript接口

12.1.1 Global作用域

window对象被复用为Global对象,因此通过var声明的所有全局变量和函数都会成为window对象的属性和方法

      var num = 100

      function sayHi(){
        console.log('hi');
      }

      console.log(window.num);// 100
      window.sayHi()// hi

12.1.2 窗口关系

top对象始终指着最外层窗口,即window

parent对象始终指着当前窗口的父窗口

self对象就是window对象,为了保持top和parent保持一致

12.1.3 窗口位置和像素比

可以使用moveTo()和moveBy()两个方法移动窗口

moveTo()是要移动到的x和y

moveBy()是相对当前需要移动的x和y


12.1.4 窗口大小

outerHeight  outerWidth  返回浏览器窗口自身大小

innerHeight innerWidth  返回页面视口的大小

document.documentElement.clientWidth  和   document.documentElement.clientHeight返回页面视口的大小

可以用resizeTo() 和 resizeBy() 调整窗口大小

12.1.5 视口位置

查看文档相对于视口的滚动距离:

window.pageXOffset/window.scrollX 和 window.YOffset/window.scrollY

可以用scroll() scrollTo() scrollBy() 滚动当前页面

这几个方法除了接受两个数字型之外,还可以接受ScrollToOption字典,通过behavior属性来告诉浏览器是否平滑移动

      window.scrollTo(100,100) // 直接接受参数

      window.scrollBy({
        left: 100,
        top: 100,
        behavior: 'smooth'// 平滑移动 auto自动
      })

12.1.6 导航与打开新窗口

1.弹出窗口

windo.open()可以导航到指定url

第一个参数是URL

第二个参数是目标窗口 类似<a>中的target属性

第三个参数是特性字符串

可以用window.close()关闭窗口,但是只能关闭window.open()打开的窗口

新创建的window对象有opener对象,指向打开它的窗口

      let worxWin = window.open(
        'http://www.baidu.com',
        'wroxWindow',
        'height=400,width=400,top=10,left=10,resizable=yes'
      )

      alert(worxWin.opener === window) // true

2.安全限制

默认情况下浏览器会阻止弹出窗口

其他限制根据浏览器而异

3.弹窗屏蔽程序

当弹窗被屏蔽时,window.open()会返回null

4.定时器

setTimeout() 用于在一段时间后执行某事

setInterval()用于指定每隔一段时间执行某事

接受的参数:要执行的代码(可以是包含js的字符串,或者是一个函数),等待的时间

调用setTimeout()时,会返回一个标识ID,在到期前可以用clearTimeout(id)取消定时器

      let timeoutId = setTimeout(() => console.log(100),1000)
      clearTimeout(timeoutId)

一般来说,最好不使用setInterval(),因为退出程序可能被跳过,就会一直占用内存

可以使用setTimeout()替代

      let num = 0
      let maxNum = 100
      let increaseNumber = function() {
        num++;

        if(num<maxNum){
          setTimeout(increaseNumber,500)
        } else {
          alert("Done")
        }
      }

      setTimeout(increaseNumber,500)

12.1.8 系统对话框

使用alert() confirm() prompt() 方法,可以让浏览器调用系统对话框向用户显示消息

这些对话框都是同步模拟的对话框,在它们弹出时,代码会停止执行,直到消失

alert()警告对话框 参数是显示的内容,按钮只有OK

 confirm() 确认框,有两个按钮,会返回true/false

prompt() 提示框,用户可以输入信息,会作为返回值;若点击取消则会返回null

js还可以显示两种对话框:window.print()打印对话框和window.find()查找对话框;这两种对话框很难利用


12.2 location对象

它是window的属性,也是document的属性,因此window.location和document.location指向同一个对象 

location对象的内容p372

12.2.1 查询查询字符串

      let getQueryStringArgs = function(){
        // 取得没有?开头的查询字符串
        let qs = (location.search.length > 0 ? location.search.substring(1) : "")
        args = {}

        // 把每个参数添加到args
        for(let item of qs.split("&").map(kv => kv.split("="))){
          let name = decodeURIComponent(item[0]),
          value = decodeURIComponent(item[1])

          if(name.length) {
            args[name] = value
          }
        }

        return  args
      }

或者可以使用URLSearchParams

      let qs = "?q=javascript&num=10"

      let searchParams = new URLSearchParams(qs)

      for(const param of searchParams){
        console.log(param);
      }

 

12.2.2. 操作地址

location.assign(URL)修改浏览器地址

相当于 window.location 和 location.href

如果不希望增加历史记录,则可以使用replace()方法

12.3 navigator对象

P375

12.3.1 插件检测

通过window.navigator.plugins返回插件数据

数组中每一项都包含name,description,filename,length属性

12.3.2 注册处理程序

使用window.navigator.registerProtocolHandler()可以把网站注册称为处理某种特定类型信息应用程序

12.4 screen对象

p379

12.5 history对象

12.5.1 导航

通过history.go()前进和后退

back()和forward(0也可以前进和后退

history.length 可以确定起点是不是当前页面

12.5.2 历史状态管理

hashchange事件会在URL的散列发生变化时被触发

使用pushState()会创建新的历史记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值