〖大前端 - 基础入门三大核心之JS篇㊼〗- BOM基础之window对象

  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐ BOM
    • 🌟 window对象
    • 🌟 navigator对象
    • 🌟 history对象
    • 🌟 location对象

⭐ BOM

BOM(Browser Object Model,浏览器对象模型)是JS与浏览器窗口交互的接口

一些与浏览器改变尺寸、滚动条滚动等相关的特效,都需要借助BOM技术

🌟 window对象

window对象是当前JS脚本运行所处的窗口,而这个窗口中包含DOM结构,window.document属性就是document对象

在有标签页功能的浏览器中,每个标签都拥有自己的window对象;也就是说,同一个窗口的标签页之间不会共享一个window对象

全局变量是winddow的属性
示例代码:

var a = 10;
console.log(window.a);  //10

这就意味着,多个js文件之间是共享全局作用域的,即js文件没有作用域隔离功能。全局变量是window属性是js建立的一种的机制,多个js文件可以共同作用这些全局变量,使用起来更加的方便。

内置函数普遍是window的方法

不仅仅是全局变量,内置函数普遍是window的方法。比如alert()、setInterval()等内置函数,普遍是window的方法

示例代码:

console.log(window.alert == alert); //true
console.log(winddow.setInterval == setInterval); //true

console.log(window.hasOwnProperty('setInterval'));  //true,hasOwnProperty返回是否具有指定名称的属性/方法

window.setInterval(function () {    //可以用window打点调用内置函数
    console.log('你好')
}, 2000);

window中关于窗口尺寸相关属性

属性意义
windinnerHeight浏览器窗口的内容区域的高度,包含水平滚动条(如果有的话)
innerWidth浏览器窗口的内容区域的宽度,包含垂直滚动条(如果有的话)
outerHeight浏览器窗口的外部高度
outerWidth浏览器窗口的外部宽度

获得不包含滚动条的窗口宽度,要用documnet.documentElement.clientWidth

示例代码:获得窗口的内宽、外宽、不包含滚动条的内宽

console.log("浏览器内宽(包含滚动条):" + window.innerWidth);
console.log("浏览器外宽:" + window.outerWidth);
console.log("浏览器内宽(不包含滚动条):" + document.documentElement.clientWidth);

当浏览器窗口最大化时,浏览器内宽和浏览器外宽值是一样的(都不包含浏览器的边框),当把浏览器窗口缩小,浏览器的外宽就会大一些,因为多了一个浏览器的边框:

当窗口最大化时:

image-20230427142839575

当窗口缩小时:

image-20230427142952341

resize事件

在窗口大小改变之后,就会触发resize事件,可以使用window.onresize或者window.addEventListener(‘resize’)来绑定事件处理函数

示例代码:给窗口改变尺寸添加事件监听

//监听窗口尺寸改变
window.onresize = function () {
    console.log("浏览器窗口的内高:" + window.innerHeight);
    console.log("浏览器窗口的外高:" + window.outerHeight);
};

image-20230427144032224

已卷动高度

window.scrollY属性表示在垂直方向已滚动的像素值

document.documentElement.scrollTop属性也表示窗口卷动高度

在实际工作中,考虑到浏览器之间的兼容性,在得到已滚动的像素值时,通常会这么写:

var scrollTop = window.scrollY || document.documentElement.scrollTop;  //当浏览器支持window.scrollY时,就取window.scrollY值,如果不支持,则取document.documentElement.scrollTop值

window.scrollY和document.documentElement.scrollTop区别:

window.scrollY是只读的;document.documentElement.scrollTop不是只读的,我们可以设置这个值来改变浏览去的卷动高度

示例代码:

var scrollTop = window.scrollY || document.documentElement.scrollTop;
console.log("窗口已卷动高度:" + scrollTop);

image-20230427152857044

scroll事件

在窗口被卷动之后,就会触发scroll事件,可以使用window.onscroll或者window.addEventListener(‘scroll’)来绑定事件处理函数

示例代码:

//监听窗口卷动高度
window.onscroll = function () {
    console.log("窗口卷动了:" + window.scrollY);
};

image-20230427153254269

scroll事件监听在某些特定场景是非常常用的,比如实现H5页面中的落地页等

🌟 navigator对象

navigator:航行者、领航员、驾驶员

window.navigator属性可以检索navigator对象,它内部含有用户此次活动的浏览器的相关属性标识

属性意义
appName浏览器官方名称
appVersion浏览器版本
userAgent浏览器的用户代理(含有内核信息和封装壳信息)
platform用户操作系统

示例代码:

console.log("浏览器品牌:" + navigator.appName);
console.log("浏览器版本:" + navigator.appVersion);
console.log("浏览器用户代理:" + navigator.userAgent);
console.log("浏览器用户操作系统:" + navigator.platform);

image-20230427160225663

🌟 history对象

history:历史

window.history对象提供了操作浏览器会话历史的接口

常用操作就是模拟浏览器回退按钮,尤其在移动端常用

属性意义
history.back()等同于点击浏览器的回退按钮
history.go(-1)等同于history.back()

示例代码:比如从一个列表页点击进入详情页,详情页中有一个“返回列表页”的按钮,点击可直接返回列表页

<!--列表页-->
<body>
    <h1>列表页</h1>
    <div>
        <ul>
            <li><a href="BOM_history_详情页.html">点击查看详情</a></li>
        </ul>
    </div>
</body>

<!--详情页-->
<body>
    <p>详情页</p>
    <button id="back">返回列表页</button>

    <script>
        var back = document.getElementById('back');

        back.onclick = function () {
            history.back();   //或者history.go(-1)
        };
    </script>
</body>

image-20230428095948913

🌟 location对象

location:地址

window.location对象标识了当前所在网址,可以通过给这个属性赋值命令浏览器进行页面跳转

属性/方法意义
window.location赋值网址,可命令浏览器跳转到对应网址,window.location.href也可以实现这样的效果
window.reload(true)重新加载网页

示例代码:页面上新增按钮,分别可以实现跳转到百度、刷新本页面

<body>
    <div>
        <a href="" script="javascript:window.location.reload(true)">刷新页面</a>
        <button id="btn">点我去百度</button>
    </div>

    <script>
        var btn = document.getElementById('btn');

        btn.onclick = function () {
            // window.location = 'https://www.baidu.com';
            window.location.href = 'https://www.baidu.com';
        };
    </script>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/224189.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Caché/M 数据库系统 InterSystems IRIS 的 Windows 安装

针对 InterSystems IRIS 数据库的一些基本概念。 InterSystems IRIS 是什么 InterSystems IRIS 是基于 Cach/M 语言开发的一个数据库&#xff0c;这个数据库被大量使用在医疗系统中&#xff0c;也是北美地区医疗系统病历和文件管理中默认使用的事实标准。 Cach/M 是什么 Ca…

亚马逊云科技Serverless视频内容摘要提取方案

概述 随着GenAI的普及&#xff0c;视频内容摘要生成成为一个备受关注的领域。通过将视频内容转化为文本&#xff0c;可以探索到更广泛的应用场景&#xff0c;其中包括&#xff1a; 视频搜索与索引&#xff1a;将视频内容转化为文本形式&#xff0c;可以方便地进行搜索和索引操作…

Zabbix自定义飞书webhook告警媒介2

说明:适用于7.0及以上版本,低版本可能会有问题。 参数如下: 名称 值EVENT.DURATION{EVENT.DURATION}EVENTDATE

AWS re:Invent 2023-亚马逊云科技全球年度技术盛会

一:会议地址 2023 re:Invent 全球大会主题演讲 - 亚马逊云科技从基础设施和人工智能/机器学习创新,到云计算领域的最新趋势与突破,倾听亚马逊云科技领导者谈论他们最关心的方面。https://webinar.amazoncloud.cn/reInvent2023/keynotes.html北京时间2023年12月1日00:30-02:…

Java架构师系统架构设计原则应用

目录 1 导语2 如何设计高并发系统:局部并发原则3 如何设计高并发系统:服务化与拆分4 高可用系统有哪些设计原则?5 如何保持简单轻量的架构-DRY、KISS,YAGNI原则6 如何设计组件间的交互和行为-HCLC,CQS,SOC7 框架层面的发展趋势-约定大于配置想学习架构师构建流程请跳转:…

一v一聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…

mysql5.7安装详细教程

文章目录 1 引言1.1 现有的数据存储方式有哪些&#xff1f;1.2 以上存储方式存在哪些缺点&#xff1f; 2 数据库2.1 概念2.2 数据库的分类 3 数据库管理系统3.1 概念3.2 常见数据库管理系统 4 MySQL4.1 简介4.2 访问与下载4.3 安装4.3.1 解压缩到非中文目录4.3.2 编写配置文件4…

华为数通---配置端口安全案例

端口安全简介 端口安全&#xff08;Port Security&#xff09;通过将接口学习到的动态MAC地址转换为安全MAC地址&#xff08;包括安全动态MAC、安全静态MAC和Sticky MAC&#xff09;&#xff0c;阻止非法用户通过本接口和交换机通信&#xff0c;从而增强设备的安全性。 组网需…

GitHub工业级开源软件:基于网络的过程可视化(SCADA/HMI/仪表板)

GitHub工业级开源软件:基于网络的过程可视化(SCADA/HMI/仪表板)  作者:本站编辑  2023-11-25 06:52:35  117 大家好,我是 Fun-Fun君,每天介绍github上最有价值的开源项目 今天介绍 FUXA 基于网络的过程可视化(SCADA/HMI/仪表板)软件 github地址:…

unity 2d 入门 飞翔小鸟 飞翔动作动画描点(六)

1、创建文件夹新建动画控制器 右键->create->Animator controer 给图层创建动画 把创建后的动画控制器拖拽至对应图层 点击window->Animation->Animation 点击创建文件夹 把图片拖拽到这里面&#xff0c;就可以了 然后我们就看在player看到已经把动作挂上去 点…

【Openstack Train】十六、swift安装

OpenStack Swift是一个分布式对象存储系统&#xff0c;它可以为大规模的数据存储提供高可用性、可扩展性和数据安全性。Swift是OpenStack的一个核心组件&#xff0c;它允许用户将大量的数据存储在云上&#xff0c;并且可以随时访问、检索和管理这些数据。 Swift的设计目标是为了…

外置固态硬盘配置

1、插上usb外置硬盘盒 2、邮件我的此“电脑”选择“管理” 3、例如新增的固态硬盘如下&#xff1a; 4、这里我选择mrb(旧模式)而没选guid(新模式) 因为mrb兼容模式更加适合windows、ios等系统 5、右击未分区磁盘&#xff0c;选择新增卷区&#xff0c;一路下一步即可

华为数通---BFD多跳检测示例

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要…

【Linux 进度条小程序】缓冲区+回车换行

文章目录 回车与换行缓冲区举个栗子fflush函数倒计时小程序进度条小程序 回车与换行 回车和换行是不同的两个概念 回车&#xff1a;\r 使光标回到本行行首。 换行&#xff1a;\n使光标下移一格。 一般我们的键盘上的Enter键是回加换行键 在c语言中 \n 表示回车换行 效果和Ent…

IDEA Maven项目如何引用本地jar包,并打包发布

jar包位于当前路径下的lib目录中 引入所需要的配置 查看当前jar包的相关信息 包的引入,需要使用到当前包的artifactId, groupId, version 需要到包的/META-INF/maven/ 下面的 pom.xml 文件里面找 在Maven构建项目时&#xff0c;生成的依赖包中的/META-INF/maven目录存放了一些…

华为数通---使用基本ACL限制Telnet登录权限案例

组网需求 如下图所示&#xff0c;PC与设备之间路由可达&#xff0c;用户希望简单方便的配置和管理远程设备&#xff0c;可以在服务器端配置Telnet用户使用AAA验证登录&#xff0c;并配置安全策略&#xff0c;保证只有符合安全策略的用户才能登录设备。 配置通过Telnet登录设备…

ALPHA开发板烧录工具MfgTool烧写方法

一. 简介 MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件&#xff0c;可以在 NXP 官网下载到。运行在windows下。可以烧写uboot.imx、zImage、dtb&#xff0c;rootfs。通过 USB口进行烧写。 上一篇文章简单了解了 ALPHA开发板烧录工具MfgTool。文章地址…

html通过CDN引入Vue组件抽出复用

html通过CDN引入Vue组件抽出复用 近期遇到个需求&#xff0c;就是需要在.net MVC的项目中&#xff0c;对已有的项目的首页进行优化&#xff0c;也就是写原生html和js。但是咱是一个写前端的&#xff0c;写html还可以&#xff0c;.net的话&#xff0c;开发也不方便&#xff0c;还…

C# Onnx CenterNet目标检测

目录 效果 模型信息 项目 代码 下载 效果 模型信息 Inputs ------------------------- name&#xff1a;input.1 tensor&#xff1a;Float[1, 3, 384, 384] --------------------------------------------------------------- Outputs ------------------------- name&a…

城市之眼:数据可视化在智慧城市的角色

作为智慧城市建设的核心组成部分&#xff0c;数据可视化扮演着至关重要的角色。在城市中&#xff0c;数据源源不断地产生&#xff0c;涵盖了从交通流量、环境质量到市民需求等各个方面。而数据可视化作为将这些数据呈现出来的手段&#xff0c;对智慧城市的发展起着关键性的作用…