JavaScript-BOM

news2025/1/18 4:49:03

💖通过看视频教程和红宝书浅浅的写下一些关于BOM的笔记

红宝书知识系统全面,精炼。大概是因为太干货了,涉及的知识点太多,所以我选择看着简单的视频教程,同时打开红宝书。笔记的内容以红宝书为基准。

window对象

BOM的核心是window对象,表示浏览器的实例。

导航与打开新窗口

window.open()方法

可以用来导航到指定的url或用于打开新的浏览器窗口。

<body>
    <script>
        window.onload = function () {
            var btn = document.getElementById("btn");

            btn.onclick = function () {
                window.open('http://www.4399.com');
                window.open('http://www.4399.com', '_self');
                window.open('http:/www.4399.com/', '_blank', 'width=200,height=300,left=100,top=300');

            };
        };
    </script>
    <input type="button" id="btn" value="打开新窗口">
</body>

open方法接收4个参数:要加载的URL,目标窗口,特性字符串,表示新窗口在浏览器历史记录中是否替代当前加载页面的布尔值。

通常调用这个方法只传前三个参数,最后一个参数只有在不打开新窗口的时候才使用。

特性字符串用于指定新窗口的配置,如果没有,则新窗口会带有所有浏览器的默认特性。

特性字符串的一些选项

尝试一下

window.open('http:/www.4399.com', '_blank', '我是4399');

点击按钮,新窗口打开页面,_blank失效了,所以给窗口命名的“我是4399”也无效。

window.close()方法

关闭页面

不同浏览器中的表现形式不一样

在ff/0情况下,只允许关闭由window.open方法打开的窗口

<body>
    <script>
        window.onload = function () {
            var open = document.getElementById("open");
            var close = document.getElementById("close");

            open.onclick = function () {
                window.open('http://www.4399.com', '_blank');
            };
            close.onclick = function () {
                window.close();
            }
        };
    </script>
    <input type="button" id="open" value="打开新窗口">
    <input type="button" id="close" value="关闭页面">
</body>

 上述代码点击打开页面会在新窗口打开页面,关闭页面会关闭含有button的原始页面。

userAgent

window.navigator

window.navigator.userAgent

用户代理信息

操作系统,浏览器内核,浏览器版本等等

<script>
        window.onload = function () {
            console.log(window.navigator.userAgent);
            console.log(window.navigator);
        };
</script>

 window.location

地址栏信息(字符串)

window.location.search

地址栏查询信息(问号到#号之间的所有内容,包含问号不包含井号)

window.location.hash

锚点信息(#号后所有内容包含#)

window.location.href

获取当前页面的 URL

 

BOM相关的尺寸 

可视区的尺寸 

这里截图一下之前的笔记片段,可视区宽高使用DOM 

可视区的宽高(BOM)

window.innerWidth

window.innerHeight

不兼容低版本的浏览器

    <script>
        window.onload = function () {
            console.log(window.innerHeight, window.innerWidth);
            console.log(document.documentElement.clientHeight, document.documentElement.clientWidth);
        };
    </script>

滚动条的距离

DOM和BOM输出滚动条的距离
DOM
chromdocument.body.scrollTop
其它document.documentElement.scrollTop
BOM
window.pageXOffset/window.pageYOffset

 

设置滚动条的距离

window.scrollTop(x,y)

全兼容,两个参数必须同时出现

window.scrollTo( 0, 1000 );

// 设置滚动行为改为平滑的滚动
window.scrollTo({
    top: 1000,
    behavior: "smooth"
});

在vscode中输入查看页面及控制台,无任何输出。

滚动行为也可以通过定时器实现

window.onload功能函数中使用定时器

                var t = window.pageYOffset;
                var time = setInterval(function () {
                    t -= 100;

                    window.scrollTo(0, t);
                }, 16);

 

 内容的高度

元素.scrollHeight

 <style>
        #div1 {
            width: 100px;
            height: 100px;
            padding: 10px;
            border: 1px solid #f00;
        }

        #div2 {
            height: 200px;
            background-color: blue;
        }
    </style>
<body>
    <script>
        window.onload = function () {
            var div1 = document.getElementById("div1");

            document.onclick = function () {
                console.log('offsetHeight', div1.offsetHeight);
                console.log('clientHeight', div1.clientHeight);
                console.log('scrollHeiht', div1.scrollHeight);
            };
        };
    </script>
    <div id="div1">
        <div id="div2"></div>
    </div>

</body>

 

 返回元素包含边框的高度,返回元素不包含边框的高度,返回元素的内容的高度

因为元素溢出容器所以内容的高度是200+10padding

注意:

  • 如果内容没有溢出容器,内容的高度会返回容器的不含边框的高度clientHeight。

        在上述代码中如果div2的高度改为20px,它会在容器内部没有溢出,打印内容的高度(        scrollHeight)会返回(clientHeight)

  • 取body的内容宽度会出现兼容性问题,可能不是真实值。

        document.body.scrollHeight

  • 为了避免出现兼容性问题,可以取文档的高度

        document.body.offsetHeight

 DOM事件

window.onscroll()

当滚动条滚动时触发这个方法

window.onresize()

当窗口改变大小的时候会触发这个方法

会按照一定的频率触发这些方法,频率由浏览器决定。

    <style>
        #div1 {
            width: 100px;
            height: 100px;
            background-color: red;
            font: 20px/100px "楷体";
            color: #fff;
            text-align: center;
            position: fixed;
            right: 0;
            bottom: 0;
            display: none;
        }
    </style>
    <script>
        window.onload = function () {
            var div = document.getElementById("div1");

            window.onscroll = function () {
                var t = window.pageYOffset;//获取滚动条的位置

                if (t > 200) {
                    div1.style.display = 'block';
                } else {
                    div1.style.display = 'none';
                }
                div.onclick = function () {
                    window.onscroll(0, 0);
                };
            };
        };
    </script>
</head>

<body style="height: 3000px;">
    <div id="div1">回到顶部</div>

</body>

上述代码可以简单的实现一个回到顶部的功能,现实中就像是哔哩哔哩的视频网页观看时去看评论,视频会形成一个小小窗口悬浮,回到顶部小窗口就会消失。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

艾美捷内皮细胞生长添加剂解决方案

内皮细胞生长添加剂是一种培养基补充物&#xff0c;旨在体外优化人原代微血管内皮细胞的生长。这是一种无菌浓缩&#xff08;100X&#xff09;溶液&#xff0c;含有培养正常人微血管内皮细胞所需的生长因子、激素和蛋白质。该补充剂的配制&#xff08;定量和定性&#xff09;旨…

Linux下的多线程编程

线程&#xff08;thread&#xff09;技术早在60年代就被提出&#xff0c;但真正应用多线程到操作系统中去&#xff0c;是在80年代中期&#xff0c;solaris是这方面的佼佼者。传统的Unix也支持线程的概念&#xff0c;但是在一个进程&#xff08;process&#xff09;中只允许有一…

基于java+springmvc+mybatis+vue+mysql的教资考前指导系统

项目介绍 对于本教资考前指导系统的设计来说&#xff0c;系统开发主要是采用java语言技术&#xff0c;后端采用springboot框架&#xff0c;前端采用vue技术&#xff0c;在整个系统的设计中应用MySQL数据库来完成数据存储&#xff0c;具体根据教资考前指导系统的现状来进行开发…

Metasploit Framework简介

没有框架渗透测试者的困扰 ● 需要掌握数百个工具软件&#xff0c;上千个命令参数&#xff0c;实在记不住 ● 新出现的漏洞PoC/EXP有不同的运行环境要求&#xff0c;准备工作繁琐 ● 大部分时间都在学习不同工具的使用习惯&#xff0c;如果能同意就好了 ● Metasploit能解决以上…

pyinstaller遇到的问题

我到底看看能有多少问题&#xff0c;真的烦死我了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#…

[附源码]Python计算机毕业设计公交电子站牌管理系统软件Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

HAProxy走私漏洞

HAProxy走私漏洞 JFrog安全研究团队发布了一个HAProxy的严重漏洞的信息。HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。 参考文章&#xff1a;https://jfrog.com/blog/critical-vulne…

虚拟生产、交付、体验,元宇宙技术对供应链的深远影响#低碳生活

#背景自新冠肺炎疫情爆发以来&#xff0c;元宇宙增长速度加快&#xff0c;也推动了对远程工作工具的前所未有的需求。目前全球元宇宙市场估值高于 1000 亿美元&#xff0c;据预计&#xff0c;到 2029 年&#xff0c;预计年均增长 47 %&#xff0c;达到 15270 亿美元。#改造供应…

【DevOps实战系列】第三章:详解Maven仓库及环境搭建

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 Maven私有仓库&#xff0c;就不多说了&#xff0c;我们这里选用最新的Nexus3的3.17版本&#xff0c;平时公司使用的都是Nexus 2.x,新的3.x版本做了很多的升级&#xff0c;包括存储方式等&#xf…

self.eval_net.forward(state)和self.eval_net.forward(state)区别

在根据状态获取一个动作&#xff1a;self.eval_net.forward(state) 在更新网络时&#xff1a;self.eval_net(state) 这2个有什么区别呀&#xff0c;为啥不都是forward 我打印了一下返回值的时候&#xff0c;我感觉格式是一样的 action_value tensor([[0.7177, 0.7369, 0.7124,…

amfori BSCI行为守则(2021)最新版-2023年生效

【amfori BSCI行为守则(2021)最新版-2023年生效】 amfori BSCI 商界社会责任倡议&#xff08;Business Social Compliance Initiative, BSCI&#xff09;是一套国际通用的企业社会责任管理工具和验厂标准。amfori BSCI 颁布行为守则&#xff08;Code of Conduct&#xff09;&am…

十大编程语言黑客向,学会一个不怕没工作,全部学会随便秀操作

首先文章并不是鼓励大家去成为黑客&#xff0c;毕竟这个用在错误的地方&#xff0c;您最终可能需要尝试牢狱之灾。因为有很多的编程语言我也不是很懂&#xff0c;所以借鉴了一些专业人员的看法。当然他们不是黑客。然后下面给大家大概的介绍下其中十个吧。下期为您介绍剩下的几…

非地面无线通信网络的增强技术

【摘 要】通过增强基础地面网络,使之与星载或空载网络融合,可将地面通信网络应用推广到覆盖范围更广的非地面通信网络。分析非地面网络超大传输时延、多普勒效应、小区移动等通信条件对无线通信接口设计的影响,从标准化角度分析同步过程、定时关系、HARQ、波束管理与极化方…

C语言之文件操作

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C/C】 目录文件的打开和关闭文件打开"r""w"注意有一个小细节文件的顺序读写字符输入输出函数fgetc和fputcfputcfg…

转轮除湿机空调系统运行时的故障排查SICOLAB

在现代科技不断发展的过程中&#xff0c;除湿技术已经应用到各个行业&#xff0c;尤其是在进行除湿空调系统设计时&#xff0c;因为相关系统的性能更加稳定且除湿量比较大、使用寿命更长、使用的设备比较简单&#xff0c;所以可以实现湿度的有效控制。 转轮除湿机空调系统在运…

【快速学习系列】SpringMVC的使用、传递参数(request、session、对象、集合...)及显示风格

【快速学习系列】SpringMVC的使用、传递参数&#xff08;request、session、对象、集合…&#xff09;及显示风格 SpringMVC扮演的角色就相当于Servlet的角色 Spring MVC框架特点 清晰地角色划分 灵活的配置功能 提供了大量的控制器接口和实现类 真正做到与View层的实现无关&…

手把手系列:如何将小程序游戏引入自有APP?(Android篇)

在上一期的手把手系列中为大家分享了&#xff1a;如何在iOS中引入FinClip SDK&#xff0c;并将小程序游戏运行到自有App 中。点击查看&#xff1a;&#x1f449;手把手系列&#xff1a;如何将小程序游戏引入自有APP&#xff1f;&#xff08;iOS篇&#xff09; 本周继续分享如何…

如何学习 Linux 内核网络协议栈

【推荐阅读】 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 怎么在Windows下使用Makefile文件 浅析linux内核网络协议栈--linux bridge 深入理解SR-IOV和IO虚拟化 协议栈的细节 下面将介绍一些内核网络协议栈中常常涉及到的概念. sk_buff 内核显…

Springboot集成Flyway(适用于多数据源)

1. Flyway 可以将初始化sql在项目启动时候执行&#xff0c;取代单独的DBN更新包 2. 依赖 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>5.2.1</version> </dependency> 3. …

动作捕捉技术中分辨率和频率的重要性

对于光学动作捕捉设备来说&#xff0c;其核心产品——光学动作捕捉镜头&#xff0c;分为多种不同规格参数&#xff0c;本文将介绍其中影响光学动作捕捉设备效果的两个重要参数&#xff1a;分辨率与频率。 分辨率&#xff1a; 被捕捉的反光标记点在镜头画面中以像素形式呈现&a…