JavaScript(4)---BOM详解

之前写过一篇有关DOM的博客:JavaScript(2)---DOM详解

DOM有个顶级对象叫:document。同样BOM中也有顶级对象叫 window

它们的区别在于: DOM是一套操作HTML标签的API。 BOM是一套操作浏览器的API。

一、概念

1、什么是BOM

概念 BOM(浏览器对象模型) 提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作。

从这幅图可以看出,document也是window的子对象。因为页面中的所有内容也是属于浏览器的一部分,所以document也是属于window。

2、常见的BOM对象

  1. 1window: # 代表整个浏览器窗口(window是BOM中的一个对象,并且是顶级的对象)
  2. 2Navigator: # 代表浏览器当前的信息,通过Navigator我们可以获取用户当前使用的是什么浏览器
  3. 3Location: # 代表浏览器当前的地址信息,通过Location我们可以获取或者设置当前的地址信息
  4. 4History: # 代表浏览器的历史信息,通过History我们可以实现上一步/刷新/下一步操作
  5. 5Screen: # 代表用户的屏幕信息

二、window对象

概念 window对象表示的是浏览器中打开的窗口,相当于是浏览器中的最顶层对象。

1、window常用方法

  1. 1open(): # 在一个窗口中打开页面
  2. 2setInterval(): # 设置定时器(执行n次)
  3. 3clearInterval(): # 清除定时器
  4. 4setTimeout(): # 设置定时器(只执行1次)
  5. 5clearTimeout(): # 清除定时器
  6. 6alert(): # 提示框
  7. 7confirm(): # 确认提示框
  8. 8propmt(): # 输入提示框
  9. 9console(): # 浏览器控制台打印
  10. 10onload(): # 页面加载完才触发的事件

注意:因为window对象使用非常频繁,所以当调用js中的window对象的方法时,可以省略对象名(window)不写。

2、示例

代码

  1. <style type="text/css">
  2. input{
  3. display:block;
  4. width: 120px;
  5. height: 25px;
  6. background-color: #cddc39;
  7. margin-left: 250px;
  8. margin-top:10px;
  9. }
  10. </style>
  11. <script type="text/javascript">
  12. function testAlert(){
  13. window.alert("弹出alert");
  14. }
  15. /*
  16. * 参数1:dialog中显示的内容
  17. * 参数2,3:可点击的按钮(默认没有就是"ok","cancle")
  18. * 返回值: ok->true cancle->false
  19. */
  20. function testConfirm(){
  21. var flag;
  22. flag = window.confirm("请选择是否?","是","否");
  23. if (flag)
  24. window.alert("你点击的是-'确定'");
  25. else
  26. window.alert("你点击的是-'取消'");
  27. }
  28. /*
  29. * 参数1:可以是一个资源地址(图片,本地地址...)
  30. * 参数2:target of links
  31. * 参数3:窗口特点......
  32. */
  33. function testOpen (){
  34. window.open("http://www.baidu.com","_blank","height=400px,width=400px,left=10px");
  35. }
  36. /*
  37. * 参数1:提示语
  38. * 返回值:在输入框中输入的内容
  39. */
  40. function testPrompt (){
  41. var str;
  42. str = window.prompt("请输入您手机号码:");
  43. window.alert("您刚才输入了:"+str);
  44. }
  45. /*
  46. * 参数1:定时器要执行的方法(每隔一定时间执行)
  47. * 参数2:定时器时间
  48. */
  49. var intervalID;
  50. function testInterval (){
  51. intervalID = window.setInterval("testAlert()",2000);
  52. }
  53. /*
  54. * 清除定时器
  55. */
  56. function removeInterval (){
  57. window.clearInterval(intervalID);
  58. console.log("定时任务ID=" + intervalID);
  59. }
  60. /*
  61. 参数1:定时器要执行的方法(只执行一次)
  62. 参数2:定时器时
  63. */
  64. var timeoutID;
  65. function testTimeout (){
  66. timeoutID = window.setTimeout("testAlert()",2000);
  67. }
  68. /*
  69. * 清除定时器
  70. */
  71. function removeTimeout (){
  72. window.clearTimeout(timeoutID);
  73. console.log("定时任务ID="+ timeoutID);
  74. }
  75. </script>
  76. </head>
  77. <body>
  78. <input type="button" value="测试alert" onclick="testAlert()" />
  79. <input type="button" value="测试open" onclick="testOpen()" />
  80. <input type="button" value="测试Confirm" onclick="testConfirm()" />
  81. <input type="button" value="测试testPrompt" onclick="testPrompt()" />
  82. <input type="button" value="测试Interval" onclick="testInterval()" />
  83. <input type="button" value="测试清除Interval" onclick="removeInterval()" />
  84. <input type="button" value="测试Timeout" onclick="testTimeout()" />
  85. <input type="button" value="测试清除Timeout" onclick="removeTimeout()" />
  86. </body>

运行结果

三、location对象

概念 location对象提供了与当前窗口中加载的文档有关的信息,还提供了一些导航的功能,它既是window对象的属性,也是document对象的属性。

1、location常用属性

属性

  1. 1location.href # 返回当前加载页面的完整URL
  2. 2location.hash # 返回URL中的hash(#号后跟零或多个字符),如果不包含则返回空字符串。
  3. 3location.host # 返回服务器名称和端口号(如果有)
  4. 4location.hostname # 返回不带端口号的服务器名称。
  5. 5location.pathname # 返回URL中的目录和(或)文件名。
  6. 6location.port # 返回URL中指定的端口号,如果没有,返回空字符串。
  7. 7location.protocol # 返回页面使用的协议。
  8. 8location.search # 返回URL的查询字符串。这个字符串以问号开头。

位置操作

  1. 1location.href = '网址' # 当前页面跳转到新的网址 <a href="网址"></a>
  2. 2location.replace('网址') # 跳转但不会在历史记录中生成新纪录
  3. 3location.reload() # 刷新当前页面
  4. 4window.open('网址') # 会新建一个窗口打开页面<a href="网址" target='_blank'></a>

四、history对象

概念 history对象保存着用户上网的历史记录,在窗口打开的那一刻算起。因为history是window对象所以每个浏览器窗口都有自己的history对象与特定的window对象关联。

1、常用方法

  1. 1history.back() # 后退一页
  2. 2history.forward() # 前进一页
  3. 3history.go(n) # 前进n页
  4. 4history.go(-2) # 后退n页
  5. 5history.go(0) # 相当于刷新

2、示例

为了实现 返回上一页返回下一页功能,这里需要两个简单页面

首页

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <style type="text/css">
  4. input{
  5. width: 120px;
  6. height: 25px;
  7. background-color: #cddc39;
  8. margin-top:10px;
  9. }
  10. </style>
  11. <body>
  12. <input type="button" value="跳转页面" id="btn1"/>
  13. <input type="button" value="前进" id="btn2"/>
  14. <script src="common.js"></script>
  15. <script>
  16. //跳转的
  17. document.getElementById("btn1").onclick = function () {
  18. window.location.href = "test.html";
  19. };
  20. //前进 前进一步就会又到跳转的页面
  21. document.getElementById("btn2").onclick = function () {
  22. window.history.forward();
  23. };
  24. </script>
  25. </body>
  26. </html>

test.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <style type="text/css">
  4. input{
  5. width: 120px;
  6. height: 25px;
  7. background-color: #cddc39;
  8. }
  9. </style>
  10. <body>
  11. <input type="button" value="后退" id="btn"/>
  12. <script src="common.js"></script>
  13. <script>
  14. //后退 后退一步就是到上一个页面
  15. document.getElementById("btn").onclick = function () {
  16. window.history.back();
  17. };
  18. </script>
  19. </body>
  20. </html>

运行结果

五、综合示例

1、一起摇起来

实现原理 :设置定时器 + 取消定时器 + 设置随机边距 实现

效果

代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>title</title>
  6. <style>
  7. img { width: 150px; height: 150px; }
  8. div { margin-top: 15px; position: absolute; }
  9. input { width: 120px; height: 25px; background-color: #cddc39; }
  10. </style>
  11. </head>
  12. <body>
  13. <input type="button" value="摇起来" id="btn1"/>
  14. <input type="button" value="停止" id="btn2"/> <br>
  15. <div id="dv">
  16. <img src="11.jpg" alt=""/>
  17. <img src="12.jpg" alt=""/>
  18. </div>
  19. <script src="common.js"></script>
  20. <script>
  21. //定时器ID 用于解除定时
  22. var timeId="";
  23. my$("btn1").onclick = function () {
  24. clearInterval(timeId); //先清一次,因为不先清,如果用户多次点击“摇起来” 那么Id已经被覆盖 之前的定时任务不可能停止
  25. timeId= setInterval(function () {
  26. var x = parseInt(Math.random() * 100 + 1); //随机数
  27. var y = parseInt(Math.random() * 100 + 1);
  28. my$("dv").style.left = x + "px"; //设置元素的left和top属性值
  29. my$("dv").style.top = y + "px";
  30. }, 50); //定时时间50毫秒
  31. };
  32. my$("btn2").onclick=function () { //清除定时任务
  33. clearInterval(timeId);
  34. };
  35. /**
  36. * 获取指定标签对象
  37. */
  38. function my$(id) {
  39. return document.getElementById(id);
  40. }
  41. </script>
  42. </body>
  43. </html>

2、用户协议

使用场景 我们在阅读一些协议的时候,往往不能直接点同意,而是几秒后才能点同意。

效果

代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>title</title>
  6. </head>
  7. <body>
  8. <textarea name="texta" id="" cols="30" rows="10">
  9. 请仔细阅读协议,请仔细阅读协议,请仔细阅读协议,请仔细阅读协议.
  10. </textarea>
  11. <input type="button" value="请仔细阅读协议(5)" id="btn" disabled="disabled" />
  12. <script>
  13. var time=5; //5秒倒计时
  14. var timeId= setInterval(function () {
  15. time--;
  16. my$("btn").value="请仔细阅读协议("+time+")";
  17. if(time <= 0){
  18. //停止定时器就可以
  19. clearInterval(timeId);
  20. //按钮可以被点击了
  21. my$("btn").disabled=false;
  22. my$("btn").value="同意";
  23. }
  24. },1000);
  25. /**
  26. * 获取指定标签对象
  27. */
  28. function my$(id) {
  29. return document.getElementById(id);
  30. }
  31. </script>
  32. </body>
  33. </html>

参考

1、js bom 四大对象

2、JavaScript BOM

  1. 你如果愿意有所作为,就必须有始有终。(23)

JavaScript(4)---BOM详解的更多相关文章

  1. JavaScript进阶内容——BOM详解

    JavaScript进阶内容--BOM详解 在上一篇文章中我们学习了DOM,接下来让我们先通过和DOM的对比来简单了解一下BOM 首先我们先来复习一下DOM: 文档对象模型 DOM把文档当作一个对象来 ...

  2. 从mixin到new和prototype:Javascript原型机制详解

    从mixin到new和prototype:Javascript原型机制详解   这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...

  3. JavaScript严格模式详解

    转载自阮一峰的博客 Javascript 严格模式详解   作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...

  4. [转]javascript console 函数详解 js开发调试的利器

    javascript console 函数详解 js开发调试的利器   分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...

  5. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

  6. (" use strict")Javascript 严格模式详解

    Javascript 严格模式详解 转载别人的博客内容,浏览了一遍,没有全部吸收,先保存一下链接 http://www.ruanyifeng.com/blog/2013/01/javascript_s ...

  7. 【HANA系列】SAP HANA XS使用JavaScript数据交互详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  8. JavaScript运行机制详解

    JavaScript运行机制详解   var test = function(){ alert("test"); } var test2 = function(){ alert(& ...

  9. [转]JavaScript异步机制详解

    原文: https://www.jianshu.com/p/4ea4ee713ead --------------------------------------------------------- ...

随机推荐

  1. CPP STL学习笔记

    STL的概念 源地址  https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Containe ...

  2. 01_垂直居中body中的应用

    1: 应用场景 在body中书写一个代码块, 使其相对于body垂直居中 <!DOCTYPE html> <html lang="en"> <head ...

  3. docker命令总结(二)

    上次只是给大家把命令的作用以及简单使用列出来了(大家可以查看:docker命令总结(一)),那这篇文章会详细介绍每条命令的参数,命令比较多建议大家使用搜索,进行查看 search docker sea ...

  4. LCA (Tarjan&倍增)

    LCA_Tarjan 参考博客:https://www.cnblogs.com/JVxie/p/4854719.html LCA的Tarjan写法需要结合并查集 从叶子节点往上并 int Find ( ...

  5. 2019牛客暑期多校第一场题解ABCEFHJ

    A.Equivalent Prefixes 传送门 题意:给你两个数组,求从第一个元素开始到第p个元素 满足任意区间值最小的元素下标相同的 p的最大值. 题解:我们可以从左往右记录到i为止每个区间的最 ...

  6. Go Web 编程之 Hello World

    概述 计划写一个讲 Go Web 编程的系列文章.从基于 net/http 包编写 Go Web 程序开始,讲述处理器,请求,响应等基础知识.然后到框架的使用.中间会穿插一些源码的分析.最后做一个实战 ...

  7. python继承简介

    继承 是面向对象的三大特性之一 作用: 通过继承可以使一个类获取其它类中的属性和方法 使用方法: 在定义类时,可以在类名后的括号中指定当前类的父类(超类.基类.super) 这样子类(衍生类)就可以直 ...

  8. Spring学习记录4——Spring对DAO的支持

    Spring对DAO的支持 随着持久化技术的持续发展,Spring对多个持久化技术提供了集成支持,包括Hibernate.MyBatis.JPA.JDO:此外,还提供了一个简化JDBC API操作的S ...

  9. 对标Eureka的AP一致性,Nacos如何实现Raft算法

    一.快速了解Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它. 为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(le ...

  10. 利用 sklearn 生成交叉特征:

    ------------------------------------- ------------------------------------- ------------------------ ...