【JavaScript】BOM 概念及相关操作

news2024/9/21 14:33:12

文章目录

  • 【JavaScript】BOM 概念及相关操作
    • 一. BOM概念
      • BOM可以操作的内容
    • 二.window内置对象和属性
      • (1) 获取浏览器窗口的尺寸
      • (2) 获取文档窗口的尺寸
      • (3) 浏览器的常见事件
      • (4) 浏览器的历史记录
      • (5) 浏览器的标签页
      • (6) 浏览器卷去的尺寸
      • (7) 浏览器滚动到的位置
        • 浏览器滚动到的位置案例
      • (8) 浏览器的地址栏

【JavaScript】BOM 概念及相关操作

一. BOM概念

BOM(Browser Object Model)是浏览器对象模型,用于访问浏览器的功能,这些功能与任何网页内容无关。

其实就是可以操作浏览器的一些功能

BOM可以操作的内容

  • 获取一些浏览器的相关信息(窗口的大小)
  • 操作浏览器进行页面跳转
  • 获取当前浏览器地址栏的信息
  • 操作浏览器的滚动条
  • 浏览器的信息(浏览器的版本)
  • 让浏览器出现一个弹出框(alert / confirm / prompt

BOM 的核心就是 window 对象

window 是浏览器内置的一个对象,里面包含着操作浏览器的方法

二.window内置对象和属性

(1) 获取浏览器窗口的尺寸

相关方法 innerHeightinnerWidth

这两个方法分别是用来获取浏览器窗口的宽度和高度

需要注意的点:这两个方法获取的尺寸是包含滚动条在内的尺寸

// 高度
var windowHeight = window.innerHeight
console.log(windowHeight);
// 宽度
var windowWidth = window.innerWidth
console.log(windowWidth);

(2) 获取文档窗口的尺寸

相关方法

// 宽度
document.documentElement.clientWidth
// 高度
document.documentElement.clientHeight

需要注意的点:获取的尺寸不包含滚动条的,滚动条是浏览器的内容。

(3) 浏览器的常见事件

  1. window.onload

    语法

    window.onload = function() {}
    
    window.onload = function() {
        console.log("执行了onload");
    }
    

    作用:当页面所有外部资源(img、js、音频、视频等)加载完毕之后触发。

  2. window.onresize

    语法

    window.onresize = function(){}
    
    window.onresize = function() {
        console.log('页面尺寸变化了');
    }
    

    作用:当页面尺寸发生变化的时候触发。

  3. window.onscroll

    语法

    window.onscroll = function() {}
    
    window.onscroll = function() {
        console.log("滚");
    };
    

    作用:当页面滚动条发生改变的时候触发。

(4) 浏览器的历史记录

  1. 浏览历史回退一级

    语法

    window.history.back();
    

    作用:回到上一级历史记录,相当于浏览器中的

  2. 浏览历史前进一级

    语法

    window.history.forward();
    

    作用:去到下一级历史记录,相当于浏览器中的

  3. 浏览历史指定跳转级数

    语法

    window.history.go(参数);
    

    作用:指定跳转到历史记录的级数

    参数

    正整数 前进

    0 刷新页面

    负整数 回退

    window.history.go(-2); // 后退两个
    window.history.go(1); // 前进一个
    
  4. history.length属性

    作用:history对象中缓存了多少级历史

    :length必须大于1,且新开启的窗口没有。

(5) 浏览器的标签页

  1. open()

    语法

    window.open('地址');
    

    作用:新打开一个标签页

    参数:新打开的标签页的地址

    <button id="btn1">新打开一个标签页</button>
    <!-- 分割符 -->
    btn1.onclick = function() {   
        window.open('https://blog.csdn.net/qq_45867247?spm=1000.2115.3001.5343');
    }
    

    :该方法类似于a标签中添加了target = "_blank"属性,会打开一个窗口。

  2. close()

    语法

    window.close()
    
    <button id="btn2">关闭当前标签页</button>
    <!-- 分割符 -->
    btn2.onclick = function() {
        window.close();
    }
    

    作用:关闭当前标签页

    :如果浏览器只打开了这一个标签页,则点击关闭时,会将浏览器一并关掉。

(6) 浏览器卷去的尺寸

  1. 卷去的高度

    大体作用就是测算当浏览器向下或向下滚动时,在页面顶部隐藏的高度。

    语法

    document.documentElement.scrollTop
    
    window.onscroll = function () { 
        console.log(document.documentElement.scrollTop);
    };
    
  2. 卷去的宽度

    大体作用就是测算当浏览器向左或向右滚动时,在页面左边隐藏的宽度。

    语法

    document.documentElement.scrollLeft
    
    window.onscroll = function () { 
        console.log(document.documentElement.scrollLeft);
    };
    

(7) 浏览器滚动到的位置

专门用来进行浏览器滚动条定位

语法

window.scrollTo();
  • 参数类型1

    window.scrollTo(x,y);
    

    x:横向滚动条的位置
    y:竖向滚动条的位置

    :这两个参数都必须写,不写会报错。

  • 参数类型2

    window.scrollTo({left: xxx, top: xxx});
    

    可以选择其中一个方向填写

    :如果只是单单书写以上代码,滚动的效果会是默认的瞬间移动到对应的位置。

    如果想要平滑的滚动到相应的位置,可以添加behavior: 'smooth'属性

    <button id="btn1">去到底部</button>
    ul>li{$}*100
    <button id="btn2">回到顶部</button> 
    <!-- 分割线 -->
    btn1.onclick = function() {
        // window.scrollTo(0, 1000);
        // window.scrollTo({ top: 1000 });
        window.scrollTo({
            top: 1000,
            behavior: "smooth"
        });
    };
    btn2.onclick = function() {
        window.scrollTo({
            top: 0
        });
    }
    

浏览器滚动到的位置案例

需求 :

  1. 滚动条高度>=350,头部回到底部出现(监听滚动条高度:window.onscroll)
  2. 点击回到顶部,页面向上滚动到0(window.scrollTo({}))
<style>
    * {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    body {
        width: 100%;
    }
    #header {
        position: fixed;
        width: 100%;
        height: 100px;
        background-color: skyblue;
        text-align: center;
        font-size: 50px;
        color: #fff;
        font-weight: bold;
        line-height: 100px;
        transition: all 0.5s;
        top: -100px;
    }
    #toTop {
        position: fixed;
        width: 100px;
        height: 100px;
        border: 5px double #000;
        background-color: linen;
        text-align: center;
        line-height: 100px;
        bottom: 80px;
        right: 20px;
        display: none;
    }
</style>
</head>
<body>
    <div id="header">网页头部</div>
    ul>li{$}*100
    <div id="toTop">回到顶部</div>
</body>
</html>
<script>
    window.onscroll = function () {
        var scroll = document.documentElement.scrollTop;
        if (scroll >= 350) {
            toTop.style.display = "block";
            header.style.top = "0px";
        } else {
            toTop.style.display = "none";
            header.style.top = "-100px";
        }
        toTop.onclick = function () {
            window.scrollTo({ top: 0, behavior: "smooth" });
        };
    };
</script>

效果图

请添加图片描述

(8) 浏览器的地址栏

浏览器地址栏的组成

  1. 协议:两台电脑要通讯,必须添加协议(http/https/ftp/file等),浏览器自动补全协议。

  2. 域名:电脑的唯一标识是ip地址,由于ip地址不方便记忆的,所以产生了域名(用户或者公司都可以通过第三方机构购买注册)。

  3. 端口:服务器就是一台昂贵的电脑,电脑只有一个ip地址,如果想存放多套程序,需要分配不同的端口找不同的程序。

    http:默认端口是80

    https:默认端口是443

  4. 路径:找到文件的地址,用/进行分割

  5. 数据:地址栏可以携带数据,数据通过?拼接在地址栏后面,如果多条数据,使用&符号进行连接。

  6. 哈希值:地址栏后面可以携带哈希值(#拼接在地址栏后面),进行单页面跳转。

注意:地址栏中文会自定义编码,不影响浏览器,地址一般忽略大小写。

https://baike.baidu.com/item/%E6%AF%9B%E6%B3%BD%E4%B8%9C/113835?fr=kg_general#4

操作地址栏(location对象):

  1. href 属性

    读写地址栏的内容

    console.log(window.location.href);
    

    window.location.href = '地址';
    
    <button id="btn1">跳转</button>
    <!-- 分割线 -->
    btn1.onclick = function() {
        window.location.href = 'https://www.baidu.com';
    }
    

    相当于a标签的作用

  2. search 属性

    获取地址栏上面的数据,包括问号。

    console.log(window.location.search);
    
  3. hash 属性

    获取地址栏上面的hash值,包括#。

    console.log(window.location.hash);
    
  4. reload(true)方法

    刷新页面,如果参数为true,通过缓存刷新。

    location.reload(); //刷新页面,重新加载
    
    <button id="btn2">刷新页面</button>
    <!-- 分割线 -->
    btn2.onclick = function() {
        window.location.reload();
    }
    

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

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

相关文章

ARM 按键轮询编程实战

一、什么是按键 1、按键的物理特性 平时没人按的时候&#xff0c;弹簧把按键按钮弹开。此时内部断开的。有人按下的时候&#xff0c;手的力量克服弹簧的弹力&#xff0c;将按钮按下&#xff0c;此时内部保持接通&#xff08;闭合&#xff09;状态&#xff1b;如果手拿开&…

【应急响应】 - Windows 排查分析

Windows 分析排查1. 文件分析1.1 开机启动文件1.2 temp 临时异常文件1.3 浏览器信息分析1.4 文件时间属性分析1.5 最近打开文件分析2. 进程分析2.1 可疑进程发现与关闭3. 系统信息3.1 windows 计划任务3.2 隐藏账户与发现3.2.1 隐藏账号的建立3.2.2 隐藏账号的删除3.3 补丁查看…

Java开发的党员管理系统党员会议系统党务管理系统

简介 Java开发的大学生党员管理系统&#xff0c;主要功能会议&#xff0c;会议记录&#xff0c;会议主持&#xff0c;设置参会人员&#xff0c;请假申请&#xff0c;会议内容附件上传下载&#xff0c;党费管理&#xff0c;入党积极分子预备党员管理&#xff0c;人员变动&#…

hcip实验

1.搭建拓扑 2.配置IP R14&#xff1a; [r14]ip route-static 0.0.0.0 0 145.1.1.2 [r14]acl 2000 [r14-acl-basic-2000]rule permit source any [r14]int GigabitEthernet 0/0/1 [r14-GigabitEthernet0/0/1]nat outbound 2000 [r14]int Tunnel 0/0/0 [r14-Tunnel0/0/0…

【2 - 随机森林 - 原理部分】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

DDR3 数据传输 (四)

目录 引言 AXI从侧接口参数 AXI从侧接口信号 参考说明 引言 前文链接

【数学思维】数理经济中一些基本概念

【数学思维】数理经济中一些基本概念开集 open set 与闭集 closed set紧集 compact set集合有界 bounded set度量空间 metric space欧式空间 euclidean space闭包 closure上包络 upper envelope、下包络 lower envelope上极限 limit superior、下极限 limit inferior左连续、右…

RabbitMQ第五个实操小案例——主题交换机(TopicExchange)

文章目录RabbitMQ第五个实操小案例——主题交换机&#xff08;TopicExchange&#xff09;RabbitMQ第五个实操小案例——主题交换机&#xff08;TopicExchange&#xff09; TopicExchange 和 DirectExchange 这两种交换机非常相似&#xff0c;Topic类型的Exchange与Direct相比&…

JavaScript 面向对象的编程 (Code with mosh学习笔记)

JavaScript OOP Getting Start - 1- What is OOP 面向对象的编程是一种编程范例围绕对象而不是函数一些OOP语言 C#JavaRubyPythonJavaScript Getting Start - 2- Four Pillars of OOP OOP的4个概念&#xff1a; 封装 使用封装重新组合相关的变量和函数减少复杂性增加代码…

jrtt 某头条网页版 _signature参数逆向

本文仅供参考学习&#xff0c;如有侵权可联系本人 目标网站 aHR0cHM6Ly93d3cudG91dGlhby5jb20vYy91c2VyL3Rva2VuL01TNHdMakFCQUFBQWE0alpUdzhvRlZnaUJIREprMTA1NDdBVFBUb050aHlsVDRqWndZMmlrMXcvPw接口分析 token&#xff1a;需要采集用户 _signature&#xff1a;加密参数 ai…

【每日一leetcode】Day2 链表(简单)

一、剑指 Offer 06. 从尾到头打印链表 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2] 输出&#xff1a;[2,3,1] 限制&#xff1a; 0 < 链表长度 < 10000…

SCI论文解读复现【NO.3】MSFT-YOLO:基于变压器的改进YOLOv5钢表面缺陷检测(代码已复现)

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文&am…

HCIP第三天ospf星型和全连实验

HCIP文章目录 文章目录HCIP文章目录ospf实验实验要求拓扑图R1/4/5为全连的MGRE结构所有私有网段可以互相通讯ospf实验 实验要求 1、R6为ISP只能配置ip地址&#xff0c;R1-5的环回为私有网段 2、R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心…

stm32平衡小车(1)---蓝牙模块及其bug处理

基于stm32c8t6开发板 一&#xff0c;蓝牙模块HC-05 1.外观 2.接线方式 TX----->PB10 RX----->PB11 VCC----->3.3V GND---->GND 3.AT模式 不用烧录代码&#xff0c;直接将c8t6和HC-05相连接&#xff0c;通过XCOM或者SSCOM软件便可以进入调试模式&a…

MySQL常见深入优化

一、分页查询优化 1. SQL语句准备 CREATE TABLE employees (id INT ( 11 ) NOT NULL AUTO_INCREMENT,name VARCHAR ( 24 ) NOT NULL DEFAULT COMMENT 姓名,age INT ( 11 ) NOT NULL DEFAULT 0 COMMENT 年龄,position VARCHAR ( 20 ) NOT NULL DEFAULT COMMENT 职位,hire_ti…

(Django+redis双机配置)ubuntu虚拟机配置redis,window中django访问

目录 Ubuntu虚拟机配置redis 进入root用户 配置redis服务 开启端口 1.设置密码 2.关闭只允许本机访问 3.关闭保护模式 双向ping测试 ubuntu开启SSH服务 Django中 Django中settings配置redis Ubuntu虚拟机配置redis 进入root用户 首先要进入root用户 后续一定保证要…

Spring Boot内存泄露,排查

背景 为了更好地实现对项目的管理&#xff0c;我们将组内一个项目迁移到MDP框架&#xff08;基于Spring Boot&#xff09;&#xff0c;随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因&#xff0c;发现配置了4G堆内内存&#xff0c;但是实际使…

利用kafka发送系统

kafka是一种消息队列框架。 如果不用消息队列框架&#xff0c;就需要用阻塞队列来实现发送系统消息和系统通知 1.阻塞队列 阻塞队列是一种用来解决进程间通信的方式 阻塞队列依靠自带的两个方法put(往队列里面存数据)和take(从队列里面取数据) 2.Kafka kafka最早只是用来发…

CV | 计算机视觉中数据集的txt,csv数据预处理代码及实例

本文使用同一个数据集进行数据预处理练习&#xff0c;其中包含了人脸图片文件夹&#xff0c;CSV文件&#xff0c;txt文件。 数据集主要是针对于人脸照片进行年龄以及性别的预测&#xff0c;在导入模型签的一些简单的数据处理。 1.对人脸图片文件夹&#xff0c;txt文件的操作 …

详解 Redis 中的 RDB 快照

内存快照。所谓内存快照&#xff0c;就是指内存中的数据在某一个时刻的状态记录。这就类似于照片&#xff0c;当你给朋友拍照时&#xff0c;一张照片就能把朋友一瞬间的形象完全记下来。 对 Redis 来说&#xff0c;它实现类似照片记录效果的方式&#xff0c;就是把某一时刻的状…