javaScript核心学习 (四)BOM对象学习

一.BOM对象的介绍

1.什么是BOM

之前我们学习过了DOM对象,它是文档对象,而BOM则是浏览器对象模型,它是一组用于操作浏览器窗口和处理与浏览器相关的对象集合。
它提供了访问和控制浏览器窗口、处理用户输入、操作浏览器历史记录、处理Cookies等的功能。通过BOM对象,开发人员可以获取有关浏览器、窗口和屏幕的信息,并与浏览器进行交互。

2.BOM的结构

DOM的结果是一个树,那么BOM对象的结构体呢?
如下所示:
在这里插入图片描述

3.常见的子对象

window对象:window对象是BOM的顶层对象,表示浏览器窗口。

  1. document对象:也成为DOM对象,是HTML页面当前窗体的内容,是window对象的一个属性。
  2. navigator对象:navigator对象提供有关浏览器的信息,例如浏览器的名称、版本、操作系统等。
  3. location对象:location对象用于获取和操作浏览器的URL。
  4. history对象:history对象用于操作浏览器的历史记录,可以使用前进和后退功能
  5. screen对象:screen对象提供了关于用户屏幕的信息,如屏幕的宽度、高度和颜色深度等。

二.Window对象

1.全局作用域

  1. window对象是BOM中所有对象的核心,也是BOM所有对象的父类,定义在全局作用域的变量,函数,以及js中的内置函数都可以被window对象调用。
  2. 示例:
<script>
    var area="北京";
    var num1="111";
    function getArea() {
        return this.area;
    }
    console.log(area);
    console.log(window.area);
    console.log(getArea());
    console.log(window.getArea());
    console.log(window.Number(num1));
</script>
  1. 运行效果如下所示:
    在这里插入图片描述

2.弹出对话框和窗口

2.1 window的对话框方法

  1. 警告框 alert():如果要确保信息传递给用户,通常会使用警告框 ,用户将需要单击“确定”来继续。
  2. 确认框 confirm():如果您希望用户验证或接受某个东西,则通常使用“确认”框。
  3. 提示框 prompt(): 如果您希望用户在进入页面前输入值,通常会使用提示框。

2.2窗口属性和方法

  1. 属性:closed,name,opener,parent,self,top。

  2. 方法:open(),close(),focus(),print(),
    scrollBY():按照指定的像素值来滚动内容。
    scrollTo():把内容滚动到指定的坐标。

  3. open()打开一个新的浏览器窗口:参数如下open(URL,name,specs,replace),其中URL为指定地址(可不写),name为窗口的名字,specs来设置窗口的属性,replace设置true和flase是否替换浏览历史中的当前条目。

  4. 示例代码:

<!DOCTYPE html>
<html>
<head>
    <title>使用示例</title>
    <script>
        function openWindow() {
            // 打开新的窗口
            var newWindow = window.open("", "newWindow", "width=400,height=300");

            // Set window properties
            console.log("Closed: " + newWindow.closed);
            console.log("Name: " + newWindow.name);
            console.log("Opener: " + newWindow.opener);
            console.log("Parent: " + newWindow.parent);
            console.log("Self: " + newWindow.self);
            console.log("Top: " + newWindow.top);

            // 使用方法
            newWindow.focus();
            //打印当前窗口的内容
            newWindow.print();

            // Perform scrolling
            newWindow.scrollBy(0, 100);
            newWindow.scrollTo(0, 0);
        }

        function closeWindow() {
            // Close the current window
            window.close();
        }
    </script>
</head>
<body>
<h1>使用示例</h1>
<button onclick="openWindow()">Open Window</button>
<button onclick="closeWindow()">Close Window</button>
</body>
</html>

效果:
在这里插入图片描述

2.3窗口位置和大小

  1. 属性
名称说明
screenLeft,screenright返回相对于屏幕窗口的x坐标和y坐标(Firebox不支持)
screenX,screenY返回相对于屏幕窗口的x坐标和y坐标(IE8不支持)
innerHeight,innerWidth返回窗口的文档显示区的高度和宽度
outerHeight,outerWidth返回窗口的外部高度和宽度
  1. 方法
    方法主要是移动位置和设置窗口大小:
    moveBy():移动相对位置,是在原有基础上的加减。
    moveTo():直接移动到指定位置。
    resizeBy():宽高调整到相对大小,是在原有基础上的加减。
    resizeTo():窗口宽高直接调整为指定大小。

三.定时器的使用(重要)

在 JavaScript 中,定时器指的是一种机制,可以用来在一定时间间隔之后执行指定的代码或函数。JavaScript 提供了两种定时器:setTimeout 和 setInterval。

1.定时方法

  1. setTimeout 方法:它用于在指定的延迟时间之后执行一次指定的代码或函数。
    语法:setTimeout(function, delay, param1, param2, …) 或 setTimeout(code, delay)

  2. setInterval 方法:它用于按照指定的时间间隔重复执行一次指定的代码或函数。
    语法:setInterval(function, delay, param1, param2, …) 或 setInterval(code, delay)

  3. 参数:function:指定要执行的函数。
    delay:时间间隔,以毫秒为单位。
    param1, param2, …:(可选)传递给函数的参数列表。
    code:指定要执行的 JavaScript 代码的字符串。
    返回值:一个计时器标识符,可以用于取消定时器的执行。

2. 区别

setTimeout():在一个时间段只执行一次。
setInterval():在一个时间段内以设置的毫秒数周期性执行。
clearTimeOut()取消setTimeout()定时器。
clearInterval )取消setInterval ()定时器。

3.使用示例

  1. 倒计时3秒后自动跳转页面:还结合了DOM的知识点,修改了文本,实现倒计时的效果。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <a href="https://www.baidu.com/">
        <span id="seconds">3</span>秒后自动完成跳转,也可点击链接跳转
    </a>
</div>
<script>
    function timing(sec,url){
        var seconds=document.getElementById('seconds');         //获取元素对象
        seconds.innerHTML=sec--;   //seconds获取元素内容是--sec
        if (sec>0){
            setTimeout('timing('+sec+',\''+url+'\')',500);     //递归调用
        }
        else {
            location.href=url;        //当前页面打开URL的网页,完成跳转
        }
    };
    timing(3,'https://www.baidu.com/');
</script>
</body>
</html>

效果如下:
在这里插入图片描述

  1. 实现轮播图效果
  • 这里要说明一下window.onload是一个事件,后面会具体提到,它在整个网页的内容(包括图像、样式表、嵌入的对象等)都加载完成后触发。
  • 定时器的设置和命名以及调用,销毁都写得很清楚了,也标注了。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script type="text/javascript">
   window.onload = function(){
       //利用数组来储存图片的地址
    var arr = ["img/img1.jpg","img/img2.jpg","img/img3.jpg","img/img4.jpg"];
    var img = document.getElementById("img2");
       //图片数组的下标
    var index=0;            
    img.src = arr[index];
    var timer=null;
    var button5 = document.getElementById("button5");
    button5.onclick = function(){
        //设置定时器timer,每1000毫秒执行一次
      timer = setInterval(function(){
        if(index == arr.length-1){
          index = 0;
        }
        img.src = arr[index++];
      },1000);
    };

    var button6 = document.getElementById("button6");
    button6.onclick = function(){
        //关闭定时器
      clearInterval(timer);
    };
  };
</script>
<div id="box17" >
    <img style="width: 350px;height: 360px" src="img/img1.jpg" id="img2">
</div>

<div id="box18">
    <button id="button5">开始</button>
    <button id="button6">停止</button>
</div>
</body>
</html>

效果如下:
在这里插入图片描述

四.location

1.URL

URL 是统一资源定位符(Uniform Resource Locator) 的缩写,它用于在互联网上定位和标识资源(如网页、图像、视频等)的地址。
在URL中包含了网络协议,服务器的主机名,端口号,资源名称字符串,参数以及锚点。

2.更改和获取

location对象中提供了更改方法,所有主流浏览器都支持。

  • assign():载入一个新的文档
  • reload():重新载入当前的文档
  • replace():用新的文档替换当前文档

获取URL的参数,location.属性就可以获取了,它的属性如下。

  • host:主机名和端口
  • href:完整的URL
  • protocol:返回一个URL协议
  • pathname:返回URL的路径名
  • hash:返回一个URL的锚部分

3.使用示例

下面写一个方法使用效果,实现点击载入新文档,就载入新的文档,界面实现了跳转URL也发生了更改。击刷新界面,重新载入当前文档,注意时间变化了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="载入新文档" onclick="newpage()">
<input type="button" value="刷新页面" onclick="freshpage()">
<p id="time"></p>
<script>
    var da=new Date();
    var data1=da.toLocaleTimeString();
    //将p中的html设置为时间
    document.getElementById('time').innerHTML=data1;
    function  newpage(){
        window.location.assign('https://www.baidu.com/');
    }
    //刷新文档
    function  freshpage(){
        window.location.reload(true);
    }
</script>
</body>
</html>

五.history对象

在 JavaScript 中,history 对象提供了与浏览器历史记录相关的功能。使用 history 对象,你可以根据需要执行各种浏览器导航操作,包括后退、前进、前进或后退指定数量的历史记录条目,以及动态修改 URL 和状态对象等。

1.属性和方法

history 对象有以下常用的属性和方法:

  1. 属性:
  • length:返回当前会话的历史记录条目数。
  • state:返回当前活动历史条目的状态对象。
  1. 方法:
  • back():与用户单击浏览器的后退按钮相同,导航到历史记录中的上一页。
  • forward():与用户单击浏览器的前进按钮相同,导航到历史记录中的下一页。
  • go():接受一个整数作为参数,用于前进或后退指定数量的历史记录条目。
  • pushState(state, title, url):在历史记录中添加新的条目,并更新当前 URL,但不会导致浏览器加载新的页面。
  • replaceState(state, title, url):替换当前历史记录中的条目,并更新当前 URL,但不会导致浏览器加载新的页面。

2.使用和示例

// 后退一页
history.back();

// 前进一页
history.forward();

// 前进两页
history.go(2);

// 后退三页
history.go(-3);

// 添加新的历史记录条目,更新 URL
const stateObj = { page: "example" };
const title = "Example Page";
const url = "example.html";
history.pushState(stateObj, title, url);

// 替换当前历史记录条目,更新 URL
const newStateObj = { page: "updated-example" };
const newTitle = "Updated Example Page";
const newUrl = "updated-example.html";
history.replaceState(newStateObj, newTitle, newUrl);

六.navigator和screen对象

在 JavaScript 中,navigator 对象和 screen 对象提供了关于浏览器和用户屏幕的信息。

1.navigator对象

navigator 对象提供了与浏览器相关的信息,包括浏览器的名称、版本、用户代理字符串等。下面是一些 navigator 对象的常用属性:

  • userAgent:返回浏览器的用户代理字符串,该字符串通常用于识别浏览器的类型和版本。
  • appName:返回浏览器的名称。
  • appVersion:返回浏览器的版本号。
  • platform:返回操作系统平台。
  • language:返回当前浏览器的首选语言。

2.screen对象

screen 对象提供了与用户屏幕相关的信息,包括屏幕的宽度、高度和颜色深度等。下面是一些 screen 对象的常用属性:

  • width:返回屏幕的宽度(以像素为单位)。
  • height:返回屏幕的高度(以像素为单位)。
  • availWidth:返回屏幕可用的宽度(不包括任务栏或其他屏幕辅助元素)。
  • availHeight:返回屏幕可用的高度(不包括任务栏或其他屏幕辅助元素)。
  • colorDepth:返回屏幕的颜色深度(每个像素使用的位数)。
  • pixelDepth:返回屏幕的颜色深度(每个像素使用的位数)。

3.综合实践:红绿灯倒计时

  • 这里用到了css和html,这里红绿灯显示使用了opacity不透明度属性,1为亮的,0.3代表暗的。
  • 倒计时显示文本使用了DOM对象的innerText
  • 倒计时使用了定时器,每一秒钟实现一次倒计时,文本显示是倒计时,但是逻辑上我们使用了从0开始递增,如果红灯开始超过10秒,跳转到绿灯。
  • 边界条件,每一个灯时长达标,清楚定时器,并且执行下一个灯的定时器。
<!DOCTYPE html>
<html>
<head>
  <style>
    .traffic-light {
      width: 100px;
      height: 300px;
      background-color: black;
      border-radius: 10px;
      display: flex;
      flex-direction: column;
      justify-content: space-around;
      align-items: center;
      padding: 10px;
    }

    .light {
      width: 80px;
      height: 80px;
      border-radius: 50%;
    }

    #red {
      background-color: red;
    }

    #yellow {
      background-color: yellow;
    }

    #green {
      background-color: green;
    }

    .countdown-text {
      font-size: 16px;
      margin-top: 10px;
    }
  </style>
</head>
<body>
<div class="traffic-light">
  <div id="red" class="light"></div>
  <div id="yellow" class="light"></div>
  <div id="green" class="light"></div>
</div>

<div id="countdown" class="countdown-text"></div>

<script>
  function trafficLightTimer() {
    var redLight = document.getElementById("red");
    var yellowLight = document.getElementById("yellow");
    var greenLight = document.getElementById("green");
    var countdownText = document.getElementById("countdown");

    redLight.style.opacity = 1;
    yellowLight.style.opacity = 0.3;
    greenLight.style.opacity = 0.3;

    countdownText.innerText = "红灯倒计时 10 秒";

    var redTimer = setInterval(function() {
      countdownText.innerText = "红灯倒计时 " + (10 - i) + " 秒";
      i++;
      if (i > 10) {
        clearInterval(redTimer);
        countdownText.innerText = "";
        redLight.style.opacity = 0.3;
        yellowTimer();
      }
    }, 1000);

    var i = 0;
    function yellowTimer() {
      yellowLight.style.opacity = 1;
      countdownText.innerText = "黄灯倒计时 2 秒";
      var yellow = setInterval(function() {
        countdownText.innerText = "黄灯倒计时 " + (2 - i) + " 秒";
        i++;
        if (i > 2) {
          clearInterval(yellow);
          countdownText.innerText = "";
          yellowLight.style.opacity = 0.3;
          greenTimer();
        }
      }, 1000);
    }

    var j = 0;
    function greenTimer() {
      greenLight.style.opacity = 1;
      countdownText.innerText = "绿灯倒计时 4 秒";
      var green = setInterval(function() {
        countdownText.innerText = "绿灯倒计时 " + (4 - j) + " 秒";
        j++;
        if (j > 4) {
          clearInterval(green);
          countdownText.innerText = "";
          greenLight.style.opacity = 0.3;
          trafficLightTimer();
        }
      }, 1000);
    }
  }

  trafficLightTimer();
</script>
</body>
</html>

实现效果:
在这里插入图片描述

到这边JAvaScript的重点就差不多结束了,这个红绿灯倒计时的实例认认真真敲完会有很大的帮助。剩下的还有事件了,鼠标啦,键盘啦…等等,用来实现前端小游戏和用户验证码之类的操作。接下来就是JOSN和AJAX的学习,为接下来的前端框架学习做准备。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的蓝孩子~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值