JavaScript—BOM

BOM是什么?

Browser Object Model是浏览器对象模型

官方:浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构,BOM由多个对象构成,其中代表浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对象

人话:用来获取或设置浏览器的相关的属性、行为,例如:新建窗口、获取屏幕分辨率、浏览器版本号、浏览器提示语句、粘贴复制……

BOM有什么作用?

获取或设置屏幕的分辨率、禁止浏览器粘贴复制……

BOM和DOM有什么区别?

BOM:浏览器对象模型,获取或设置浏览器的属性

DOM:文档对象模型,获取或设置文档中标签的属性,例如:获取或设置input表单的value值、节点的增删改查,对标签的一些具体操作

BOM有什么缺陷?

不具备浏览器兼容性

BOM里面有什么?

window对象(全局对象):

confirm

location

screen

history

事件对象

注:window就是一个全局的对象(Global),是一个全局的容器。所有的东西都是它的成员


window对象

1、弹窗

①、确认框(confirm)

window.confirm("sometext");用于验证是否接收用户操作,“确认”返回true,“取消”返回false

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        onload = function () {
            btn.onclick = function () {
                var res = window.confirm("测试消息,请选择");  //弹出提示框
                alert(res);
            };
        };
    </script>
</head>
<body>
    <input type="button" name="name" value="click" id="btn" />
</body>
</html>

②、警告框(alert)

用于确保用户可以得到某些信息,当警告窗出现后,用户需要点击确定按钮才能继续进行操作。

window.alert("sonetext");

③、提示框(prompt)

用于提示用户进入页面前输入某个值。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<p>点击按钮查看输入的对话框。</p>
<button onclick="myFunction()">点我</button>
<p id="demo"></p>
<script>
function myFunction(){
	var x;
	var person=prompt("请输入你的名字","Harry Potter");
	if (person!=null && person!=""){
	    x="你好 " + person + "! 今天感觉如何?";
	    document.getElementById("demo").innerHTML=x;
	}
}
</script>

</body>
</html>

2、reload()方法:刷新

Window.location.href="url";//href:获得或返回页面所在地址
Window.location.reload();


 


screen对象

获取屏幕分辨率:width、height

<script>
  onload = function () {
  	alert("您的屏幕分辨率是:" + this.screen.width + "*" + this.screen.height);
  }
</script>


history对象

包含浏览器历史,与浏览器前进后退按钮相同

history.forward() - 与在浏览器中点击向前按钮相同。go(1),参数表示跳转页面的个数,表示前进一个页面

history.back() - 与在浏览器点击后退按钮相同。go(-1),表示页面跳转的个数,表示后退一个页面

history.go(0);表示刷新页面

实战:

 history1.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        onload = function () {
            btn.onclick = function () {
                history.forward();
                //history.go(1);
            };
        };
    </script>
</head>
<body>
    <a href="06 history2.html">history对象跳转</a><br />
    <input type="button" name="name" id="btn" value="->" />
</body>
</html>

history2.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        onload = function () {
            btn.onclick = function () {
                history.back();
            //history.go(-1);
            };
        };
    </script>
</head>
<body>
    <input type="button" name="name" id="btn" value="<-" />
</body>
</html>


Location对象

location.hostname 返回 web 主机的域名
location.pathname 返回当前页面的路径和文件名
location.port 返回 web 主机的端口 (80 或 443)
location.protocol 返回所使用的 web 协议(http: 或 https:)


事件对象

1、C#、js对比

C#中:

js中:

2、什么是事件对象?

用来记录一些事件发生时的相关信息的对象(比方说点击按钮时用的哪个鼠标、在屏幕什么位置等等)

3、如何编程?

事件是一个待执行方法,不是我们去调用,而是浏览器。因某个事情的触发而自动的调用。

4、语法:

事件 = function(){ };

这个函数是由浏览器自己调用,那么事件的参数也与浏览器有关。火狐浏览器会在调用事件执行方法的时候,传入一个参数,表示事件对象。

所以我们的代码需要修改成

事件=function(e){ };

早期的IE浏览器(实际上现在的IE也保留),没有这个参数

5、常用成员

鼠标坐标:screenX、screenY    与浏览器页面区域左上角为原点

         clientX、clientY   与浏览器页面区域左上角为原点

         layerX、layerY      与div左上角为原点

鼠标按键:button

功能键:altKey、ctrlKey、shiftKey(表示事件发生时键被按下并保持,为false则键没有按下,反之)

鼠标事件:onmouseover、onmouseout

  • onmouseover: 事件会在鼠标指针移动到指定的元素上时发生
  • onmouseout: 事件会在鼠标指针移出指定的对象时发生。

实战

①、点击鼠标左中右键,出现不同数字

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
        onload = function () {
            //获取body标签的所有元素中的第一个,并且用变量名controls接收
            var controls = document.getElementsByTagName("body")[0].getElementsByTagName("*");
            //遍历数组
            for (var i = 0; i < controls.length; i++) {  
                controls[i].onmousedown = function (e) {  //onmousedown:左键:0    滚轮:1    右键:2
                //controls[i].onclick = function (e) {   //onclick:点击鼠标右键出现浏览器菜单选项,不能显示2
                    alert(e.button);
                    //alert("点击");
                };
            }
        }
    </script>
</head>
<body>
    <input type="button" name="name" value="点击"/>
    <div style="border:solid 1px red;width:40px;height:20px" ></div>
</body>
</html>

②、鼠标坐标

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        onload = function () {
            document.onmousemove = function (e) {
                //将坐标的结果显示在Title标签中
                document.title = e.screenX + "," + e.screenY;
                document.title = e.clientX + "," + e.clientY;
                //以上都是以浏览器为对照
            };

            //以div标签为准
            dv.onmousemove = function (e) {
                //document.title = e.layerX + "," + e.layerY;

                //this就是红框
                //offset表示
                document.title = (e.layerX - this.offsetLeft) + "," + (e.layerY - this.offsetTop);
            };
        };
    </script>
</head>
<body>
    <div id="dv" style="border: solid 1px red;width:100px;height:100px;margin:0 auto"></div>
</body>
</html>

③、功能键

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
        onload = function () {
            window.btn.onclick = function (e) {
                e = e || event;
                alert("alt=" + e.altKey +
                    ",shift=" + e.shiftKey +
                    ",control=" + e.ctrlKey);
            };
        };
    </script>
</head>
<body>
    <input type="button" id="btn" value="点击" />
</body>
</html>


计时事件

计时器:setInterval() - 间隔指定的毫秒数不停地执行指定的代码

创建:number window.setInterval(“javascript函数”,milliseconds);每隔指定毫秒后调用一次回调函数,返回一个(我觉得有点循环执行的意思)

关闭:windo.clearInterval(计时器Id)

延时器:setTimeout() - 在指定的毫秒数后执行指定代码

创建:number window.setTimeout(callback,millisecond);等待指定时间调用回调函数,注意只会执行一次,返回的是延时器id

关闭:clearTimeout(延迟其Id)

实战

计时器

第一种方法:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        onload = function () {
            //第一种方法
            //页面一开始加载就显示时间,然后每隔一秒钟更新一次时间
            window.date.innerHTML = new Date().toLocaleString();
            //window.date.innerHTML:这个窗体的span标签里添加文本
            //new Date().toLocaleString():实例化一个Date对象,根据本地时间把Date对象转换为字符串,并返回结果
           var intervalId= setInterval(function () {
                window.date.innerHTML = new Date().toLocaleString();
            }, 1000);
            //setTimeout():在指定的毫秒数后调用函数或计算表达式。每隔1000毫秒调用一次function函数

            //button按钮点击事件
            document.getElementById("btn").onclick = function () {
                if (this.value == "点击停止") {
                    clearInterval(intervalId);  //停止执行
                    this.value = "点击开始";
                } else {
                    intervalId = setInterval(function () {                   //继续执行
                        window.date.innerHTML = new Date().toLocaleString();
                    }, 1000);
                    this.value = "点击停止";
                }
            };
        };
    </script>
</head>
<body>
    <p>现在时刻:<span id="date"></span></p>
    <input type="button" id="btn" name="name" value="点击停止" />
</body>
</html>

第二种方法:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
           //第二种方法
        onload = function () {
            window.date.innerHTML = new Date().toLocaleString();
            var isRun = true;    //设置一个布尔类型变量isRun,默认为true
            //创建一个计时器:每个一秒调用一次function这个函数
            var intervalId = this.setInterval(function () {           
                if (isRun) {
                    window.date.innerHTML = new Date().toLocaleString();
                }
            }, 1000);

            //button按钮单击事件
            this.document.getElementById("btn").onclick = function () {
                if (this.value == "点击停止") {
                    isRun = !isRun;           //isRun为false,停止执行
                    this.value = "点击开始";
                } else {
                    isRun = !isRun;
                    this.value = "点击停止";
                }
                //第三种方法
                //isrun = !isRun;
                //this.value = "点击" + "开始,停止".split(',')[Number(isRun)];
            }
        };
    </script>
</head>
<body>
    <p>现在时刻:<span id="date"></span></p>
    <input type="button" id="btn" name="name" value="点击停止" />
</body>
</html>

倒数跳转:10秒倒计时跳转到其他页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
        onload = function () {
            //this.window.date.innerHTML = new Date().toLocaleString();
            var span = document.getElementById("second");
           var intervalId= setInterval(function () {
                var num = span.innerHTML - 1;   //获得或设置一个标签下的内容。这个内容可以是html格式的
               span.innerHTML = num;   //显示秒数

               if (num <= 0) {    //
                   //停下计时器
                   clearInterval(intervalId);
                   //跳转页面
                   location.href = "https://www.runoob.com/jsref/met-win-setinterval.html";
                }

            }, 1000);
        };
    </script>
</head>
<body>
    <p>请等待<span id="second">10</span>秒后跳转</p>
</body>
</html>

延时器

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        //思路:鼠标每上抬一次就执行一次交换,创建一次延时器
        onload = function () {
            var txt1 = this.document.getElementById("txt1");
            var txt2 = this.document.getElementById("txt2");
            var timeoutId;
            txt2.onkeyup = function () {
                //关闭旧的演示
                clearTimeout(timeoutId);    //如果已经关闭或没有数据,这句话无效

                //开启新的延时
                timeoutId = setTimeout(function () {
                    txt1.value = txt2.value;
                }, 500);
            };
        };
    </script>
</head>
<body>
    <input type="text" name="name" value="" id="txt1" /><br /><br /><br />
    <input type="text" name="name" value="" id="txt2" />
</body>
</html>


clipboardData对象—剪贴板

设置值:clipboardData.setData("text",value);

获取值:  clipboardData.getData("text");

清除值:clipboardData.clearData("text");

oncopy事件、onpaste事件、oncut事件

实战:

获取、设置值

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
    </style>

    <script type="text/javascript">
        onload = function () {
            document.getElementById("btncopy").onclick = function () {
                var url = location.href;
                //放入剪贴板:ie才能生效
                window.clipboardData.setData("text", url);
            };

            //获取剪贴板内容
            this.document.getElementById("btnget").onclick = function () {
                var txt = window.clipboardData.getData("text");
                document.getElementById("txt").value = txt;
            };
        };
    </script>
</head>
<body>
    <input type="button" name="name" value="点击复制网址" id="btncopy" /><br />
    <textarea id="txt" style="width:300px;height:300px" ></textarea>
    <input type="button" name="name" value="获取剪贴板内容" id="btnget" /><br />
</body>
</html>

禁止复制、禁止粘贴、复制添加版权案例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
        #dv {
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
        }
    </style>
    <script type="text/javascript">
        onload = function () {
            document.onkeydown = function (e) {
                /*    alert(e.key + "," + e.keyCode);*/
                return false;
            }

            document.onkeyup = function (e) {
                //alert(e.key + "," + e.keyCode);
                return false;
            }


            document.onkeypress = function (e) {
                //alert(e.key + "," + e.keyCode);
                return false;
            }

        }
    </script>
</head>
<body>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
    <p>美文美文美文美文</p>
</body>
</html>


项目实战—动画案例

高度变化

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        #dv {
            height: 200px;
            width: 200px;
            border: solid 1px red;
            overflow: hidden; /*超出这个范围就隐藏掉*/
        }
    </style>

    <script>
        onload = function () {
            this.document.getElementById("btn").onclick = function () {
                //节点.style.样式
                var div = document.getElementById("dv");

                第一种思路
                //首先获得高度
                var h = div.offsetHeight;  //单位就是数字.offsetHeight:返回元素的高度
                var intervalId = setInterval(function () {
                    h--;
                    if (h <= 0) {
                        clearInterval(intervalId);
                        //隐藏这个框
                        div.style.display = "none";
                    }
                    div.style.height = h + "px";
                }, 40);

                //第二种思路:让操作有速度。
                var intervalId = setInterval(function () {
                    var h = parseInt(div.style.height || div.offsetHeight)
                    var delta = Math.ceil(h / 10);   //每次应该减去的高度
                    h = h - delta;
                    if (h <= 0) {
                        clearInterval(intervalId);
                        //隐藏这个框
                        div.style.display = "none";
                    }
                    div.style.height = h + "px";
                }, 20);
            };
        };
    </script>
</head>
<body>
    <input type="button" name="name" value="点击" id="btn">
    <div id="dv">
        <p>111111111</p>
        <p>111111111</p>
        <p>111111111</p>
        <p>111111111</p>
        <p>111111111</p>
        <p>111111111</p>
    </div>
</body>
</html>

位置变化

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        #dv {
            border: solid 1px red;
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>

    <script>
        onload = function () {
            var dv = this.document.getElementById("dv");
            document.getElementById("btn").onclick = function () {
                //x:800,y:500
                //平移
                //创建计时器
                var intervalId = setInterval(function () {
                    //获取div标签的左边距
                    var currentX = parseInt(dv.style.left || dv.offsetLeft);
                    //每次应该减去的高度
                    var delta = Math.ceil((800 - currentX) / 10);
                    var finalX = currentX + delta;

                    if (finalX >= 800) {
                        clearInterval(intervalId);   //停止计时器
                    }
                    dv.style.left = finalX + "px";
                }, 20);
            };
        };
    </script>
</head>
<body>
    <input type="button" name="name" value="点击移动" id="btn">
    <div id="dv"></div>
</body>
</html>

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

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

相关文章

HHDESK一键改密功能

HHDESK新增实用功能——使用SSH连接&#xff0c;对服务器/端口进行密码修改。 1 测试 首页点击资源管理——客户端&#xff0c;选择需要修改的连接&#xff1b; 可以先对服务器及端口进行测试&#xff0c;看是否畅通&#xff1b; 右键——测试——ping&#xff1b; 以及右…

【Prometheus】概述及部署

目录 Prometheus 概述 Prometheus 的生态组件 Prometheus 的工作模式 Prometheus 的工作流程 Prometheus 的局限性 部署 Prometheus Prometheust Server 端安装和相关配置 部署 Exporters 监控 MySQL 配置示例 监控 Nginx 配置示例 部署 Grafana 进行展示 部署 Pro…

Git仓库简介

1、工作区、暂存区、仓库 工作区&#xff1a;电脑里能看到的目录。 暂存区&#xff1a;工作区有一个隐藏目录.git&#xff0c;是Git的版本库&#xff0c;Git的版本库里存了很多东西&#xff0c;其中最重要的就是称为stage&#xff08;或者叫index&#xff09;的暂存区&#xf…

javacv基础02-调用本机摄像头并预览摄像头图像画面视频

引入架包&#xff1a; <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.5.5-1</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId…

计算机网络MTU和MSS的区别

在计算机网络中&#xff0c;MTU代表最大传输单元&#xff08;Maximum Transmission Unit&#xff09;&#xff0c;而MSS代表最大分节大小&#xff08;Maximum Segment Size&#xff09;。 1.MTU&#xff08;最大传输单元&#xff09;&#xff1a; MTU是指在网络通信中&#x…

数据库——Redis 常见数据结构以及使用场景分析

文章目录 1. string2. list3. hash4. set5. sorted set 你可以自己本机安装 redis 或者通过 redis 官网提供的在线 redis 环境。 1. string 介绍 &#xff1a;string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的&#xff0c;但是 Redis 并没有使用 C 的字符串…

【Java架构-版本控制】-Git基础

本文摘要 Git作为版本控制工具&#xff0c;使用非常广泛&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Git基础、Git进阶、Gitlab搭那家&#xff09;来深入学习Git 文章目录 本文摘要1.Git仓库基本概念1.1 远程仓库(Remote)1.2 本地库(Repository) 2. Git仓库…

postman接口自动化测试框架实战!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用…

公网远程访问局域网SQL Server数据库

文章目录 1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 数据库的重要性相信大家都有所了解&…

Jackpack - Hilt

一、概念 类中使用的某个对象不是在这个类中实例化的&#xff08;如Activity无法手动实例化使用&#xff09;&#xff0c;而是通过外部注入&#xff08;从外部传入对象后使用&#xff09;&#xff0c;这种实现方式就称为依赖注入 Dependency Injection&#xff08;简称DI&#…

JVM 垃圾收集

垃圾收集 分代理论Java 堆的内存分区不同分代收集垃圾收集算法 分代理论 弱分代假说&#xff1a;绝大多数对象都是朝生夕灭&#xff0c;即绝大多数对象都是用完很快需要销毁的。强分代假说&#xff1a;熬过多次垃圾收集过程的对象就越难以消亡&#xff0c;即如果对象经过多次垃…

uniapp热更新

首先热更新需要wgt包&#xff1b; 其次先了解这两个组件 下载的方法 安装的组件 场景&#xff1a; 当你项目的js文件或者页面文件或者静态图片文件css文件更新的时候可以走热更新&#xff1b; 而当你安装新的组件插件或者开启新的权限等功能的时候就无法通过热更新进行更新了…

3、监测数据采集物联网应用开发步骤(3)

监测数据采集物联网应用开发步骤(2) 系统整体结构搭建 新建项目 输入项目名称&#xff1a;MonitorData 所谓兵马未动粮草先行&#xff0c;按下图创建好对应的模块备用&#xff1a; com.plugins 业务插件模块 com.zxy.adminlog 日志或文本文…

合宙Air724UG LuatOS-Air LVGL API控件--按钮 (Button)

按钮 (Button) 按钮控件&#xff0c;这个就不用多说了&#xff0c;界面的基础控件之一。 示例代码 – 按键回调函数 event_handler function(obj, event) if event lvgl.EVENT_CLICKED then print(“Clicked\n”) elseif event lvgl.EVENT_VALUE_CHANGED then print(“To…

云计算 - 百度AIStudio使用小结

云计算 - 百度AIStudio使用小结 前言 本文以ffmpeg处理视频为例&#xff0c;小结一下AI Studio的使用体验及一些避坑技巧。 算力获得 免费的算力获得方式为&#xff1a;每日登录后运行一个项目&#xff08;只需要点击运行&#xff0c;不需要真正运行&#xff09;即可获得8小…

K8S Nginx Ingress实现金丝雀发布

通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。 需给服务创建2个 Ingress&#xff0c;其中1个常规 Ingress&#xff0c;另1个为带 nginx.ingress.kubernetes.io/canary: "true" 固定的 annotation 的 Ingress&#xff0c;称为 Cana…

浅析Linux SCSI子系统:设备管理

文章目录 概述设备管理数据结构scsi_host_template&#xff1a;SCSI主机适配器模板scsi_host&#xff1a;SCSI主机适配器主机适配器支持DIF scsi_target&#xff1a;SCSI目标节点scsi_device&#xff1a;SCSI设备 添加主机适配器构建sysfs目录 添加SCSI设备挂载LunIO请求队列初…

javaee idea创建maven项目,使用el和jstl

如果使用el表达式出现下图问题 解决办法 这是因为maven创建项目时&#xff0c;web.xml头部声明默认是2.3&#xff0c;这个默认jsp关闭el表达式 办法1 在每个需要用到el和jstl的页面的上面加一句: <% page isELIgnored"false" %> 方法2 修改web.xml文件开…

React 生命周期新旧对比

前言 React16.4版本之后使用了新的生命周期&#xff0c;它使用了一些新的生命周期钩子&#xff08;getDerivedStateFromProps、getSnapshotBeforeUpdate&#xff09;&#xff0c;并且即将废弃老版的3个生命周期钩子&#xff08;componentWillMount、componentWillReceiveProps…

【技术】SpringBoot Word 模板替换

SpringBoot Word 模板替换 什么是 Word 模板替换如何实现 Word 模板替换 什么是 Word 模板替换 模板一般是具有固定格式的内容&#xff0c;其中一部分需要替换。Word 模板通俗的讲是以 Word 的形式制作模板&#xff0c;固定格式和内容&#xff0c;然后将其中的一部分数据替换掉…