夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • 第1章 什么是JavaScript
  • 第2章 HTML中的JavaScript
  • 第3章 语言基础
  • 第4章 变量、作用域与内存
  • 第5章 基本引用类型
  • 第6章 集合引用类型
  • 第7章 迭代器与生成器
  • 第8章 对象、类与面向对象编程
  • 第9章 代理与反射
  • 第10章 函数
  • 第11章 异步编程
  • 第12章 BOM
    • 第14章 DOM
    • 第15章 DOM扩展
    • 第16章 DOM2和DOM3
    • 第17章 事件
    • 第18章 动画与Canvas图形
    • 第19章 表单脚本
    • 第20章 JavaScript API
    • 第21章 错误处理与调试
    • 第23章 JSON
    • 第24章 网络请求与远程资源
    • 第25章 客户端存储
    • 第26章 模块
    • 第27章 工作者进程
    • 第28章 最佳实践
    • 《JavaScript高级程序设计》
    frost
    2022-01-03

    第12章 BOM

    # window 对象

    window 对象既是 ECMAScript 中的 Global 对象,也是浏览器窗口的 JS 接口。

    # 窗口

    window.devicePixelRatio:表示物理像素与逻辑像素之间的缩放系数。

    物理像素:屏幕实际的分辨率,比如手机的 1920x1080。

    逻辑像素:浏览器报告的虚拟分辨率,比如 640x360,因此 DPI=3。

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

    innerWidth/innerHeight:返回浏览器窗口中页面视口的大小。

    document.documentElement.clientWidth/clientHeight:返回页面视口的宽度和高度。

    scrollTo:页面要滚动到的坐标。

    scrollBy:页面要滚动的距离。

    window.scrollBy({
      top: 600,
      left: 200,
      behavior: 'smooth', // 平滑滚动
    })
    
    1
    2
    3
    4
    5

    window.open():打开新窗口

    window.open('https://www.baidu.com', '_blank')
    
    1

    window.close():关闭窗口

    # 定时器

    setTimeout():指定在一段时间后执行代码。

    setInterval():指定每隔一段时间执行代码。

    二者都会返回一个定时 ID,可以用于清除定时器。

    let id = setTimeout(() => {
      console.log(1)
    }, 1000)
    clearTimeout(id)
    
    1
    2
    3
    4
    let i = 0
    let id = setInterval(() => {
      i += 1
      console.log(i)
      if (i >= 5) {
        clearInterval(id)
      }
    }, 1000)
    
    1
    2
    3
    4
    5
    6
    7
    8

    setInterval 只推荐在执行时间短、非阻塞的程序中使用,比如倒计时。因为上一个任务结束和下一个任务开始之间的时间间隔无法保证,导致实际定时器有偏差。

    用于轮询时,推荐使用 setTimeout。

    let i = 0
    
    let loop = function() {
      i += 1
      console.log(i)
      setTimeout(() => {
        if (i < 5) {
          setTimeout(loop, 1000)
        }
      }, 1000)
    }
    loop()
    // 1 2 3 4 5
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # location

    参考 w3c 文档

    属性 描述
    hash (opens new window) 设置或返回从井号 (#) 开始的 URL(锚)。
    host (opens new window) 设置或返回主机名和当前 URL 的端口号。
    hostname (opens new window) 设置或返回当前 URL 的主机名。
    href (opens new window) 设置或返回完整的 URL。
    pathname (opens new window) 设置或返回当前 URL 的路径部分。
    port (opens new window) 设置或返回当前 URL 的端口号。
    protocol (opens new window) 设置或返回当前 URL 的协议。
    search (opens new window) 设置或返回从问号 (?) 开始的 URL(查询部分)。

    下面 3 种方式是等价的

    location.assign('https://www.baidu.com')
    location = 'https://www.baidu.com'
    location.href = 'https://www.baidu.com'
    
    1
    2
    3

    location.replace():跳转页面,但是会删除当前历史记录,用户不能回到上一页。

    location.reload():刷新当前页,相当于 F5。传入 true 时,相当于 ctrl+F5.

    # navigator

    navigator.userAgent:常用于判断浏览器标识,以区分不同机型。

    const mobileReg = /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
    const ua = window.navigator.userAgent.toLocaleLowerCase()
    
    const isMobile = mobileReg.test(navigator.userAgent)
    
    1
    2
    3
    4

    # history

    history 对象表示当前窗口首次使用以来用户的导航历史记录。出于安全考虑,不会暴露用户访问过的 URL,所以不像小程序一样可以获取导航栈信息。

    # 导航

    history.go():进行导航,可以前进或后退。

    history.go(-1) // 后退一页
    history.go(1) // 前进一页
    
    1
    2

    history.back():相当于 history.go(-1)。

    history.forward():相当于 history.go(1)。

    # 历史状态管理

    单页应用的前端路由有 2 种类型:基于 hashchange 事件和基于 pushState()与 popState 事件。

    #读书笔记
    上次更新: 2022/01/14, 08:52:26
    第11章 异步编程
    第14章 DOM

    ← 第11章 异步编程 第14章 DOM→

    最近更新
    01
    提交代码时修改commit消息
    04-09
    02
    如何快速定位bug
    02-20
    03
    云端web项目开发踩坑
    08-25
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×