[华为云在线课程][JavaScript的BOM编程][学习笔记]

举报
John2021 发表于 2022/02/16 06:00:29 2022/02/16
【摘要】 第1章,JavaScript的BOM对象 1.1,JavaScript的BOM对象属性BOM对象:Browser Object Model,浏览器对象模型,操作浏览器部分功能的APIBOM结构图:windowwindow对象是BOM的顶层核心对象,所有对象都是通过它延伸出来的,也可以称为window的子对象window对象是JavaScript中的顶级对象,全局变量、自定义函数也是wind...

第1章,JavaScript的BOM对象

1.1,JavaScript的BOM对象属性

  • BOM对象:Browser Object Model,浏览器对象模型,操作浏览器部分功能的API

  • BOM结构图:

  • window

    • window对象是BOM的顶层核心对象,所有对象都是通过它延伸出来的,也可以称为window的子对象
    • window对象是JavaScript中的顶级对象,全局变量、自定义函数也是window对象的属性和方法
    • window对象下的属性和方法调用时,可以省略window
    • 代表整个浏览器窗口,同时window是网页中的全局对象
  • navigator

    • 代表当前浏览器的信息,通过该对象我们可以识别不同的浏览器
  • location

    • 代表的是当前浏览器的地址栏信息,通过我们的location可以获取到地址栏信息,或者操作浏览器跳转页面
  • history

    • 代表的是浏览器的历史记录,可以通过该对象来操作浏览器的历史记录,由于隐私问题,该对象不能获取到具体的历史记录,只能操作浏览器向前向后翻页
  • screen

    • 代表的就是用户的屏幕信息,通过该对象可以获取到用户的显示器的相关信息
  • frames

    • 代表的就是窗口中所有命名的框架

1.2,JavaScript的BOM对象方法

  • BOM的常见内置方法:

    • 弹出系统对话框:
      • alert():弹出一个警告提示框
      • confirm():弹出带有"确定"、"取消"按钮的对话框,点击按钮返回true/false
      • prompt():弹窗接受用户的输入
    • 打开窗口和关闭窗口:
      • window.open(url,target,param);
      • window.close()
  • BOM的常见内置方法案例:


<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    window.alert("hello world");
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    var age = window.prompt("请输入你的年龄:");
    window.alert("输入的年龄是:" + age);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    var result = window.confirm("你确认删除吗?");
    if (result) {
        window.alert("你点击了确定");
    } else {
        window.alert("你点击了删除");
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<button onclick="openview()">点击我打开一个新的页面</button>
<button onclick="closeview()">点击我关闭本页面</button>
<script>
    function openview() {
        var json = {
            "name": "helloworld",//窗口名称
            "fullscreen": "no",//浏览器是否显示全屏,默认是没有的
            //在全屏模式下的window,还必须是在影院模式,仅限IE浏览器
            "location": "no",//是否显示地址字段
            "width": "100px",//窗口的宽度,最小值就是100px
            "height": "100px",//窗口高度
            "top": "100px",//窗口的顶部位置
            "left": "100px"//窗口的左侧位置
        };
        window.open("http://www.baidu.com", "_blank", json);
    }

    function closeview() {
        window.close();
    }
</script>
</body>
</html>

1.3,JavaScript的BOM对象navigator

  • window.navigator的一些属性可以获取客户端的一些信息:
    • userAgent:系统,浏览器
    • platform:浏览器支持的系统,win/mac/linux

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="example"></div>
<script>
    txt = "<p>浏览器代号:" + navigator.appCodeName + "</p>";
    txt += "<p>浏览器名称:" + navigator.appName + "</p>";
    txt += "<p>浏览器版本:" + navigator.appVersion + "</p>";
    txt += "<p>启用Cookies:" + navigator.cookieEnabled + "</p>";
    txt += "<p>浏览器支持系统:" + navigator.platform + "</p>";
    txt += "<p>用户代理:" + navigator.userAgent + "</p>";
    txt += "<p>用户代理语言:" + navigator.language + "</p>";
    document.getElementById("example").innerHTML = txt;
    /*
    *   浏览器代号:Mozilla

        浏览器名称:Netscape

        浏览器版本:5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43

        启用Cookies:true

        浏览器支持系统:Win32

        用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43

        用户代理语言:zh-CN
    * */
</script>
</body>
</html>
  • navigator代表当前浏览器的信息,通过该对象来识别不同的浏览器
  • 由于历史原因,navigator对象中绝大多数的属性已经不能够帮助我们识别浏览器
  • 一般情况下我们只会使用userAgent来判断浏览器的信息,userAgent实际上是一个字符串,在这个字符串里会包含有用来描述我们浏览器信息的内容
  • 不同浏览器有不同的userAgent
  • 来自我们navigator对象的信息具有一定的误导性,所以我们不应该被用于检测浏览器的版本
  • 原因:
    • 1,navigator数据可以被浏览器使用者修改
    • 2,一些浏览器对测试站点识别错误
    • 3,浏览器无法报告晚于浏览器发布的新操作系统

1.4,JavaScript的BOM对象方法screen

  • screen对象四个属性方法:
    • availHeight:获取系统屏幕的工作区域高度,排除Microsoft Windows任务栏
    • availWidth:获取系统屏幕的工作区域宽度,排除Microsoft Windows任务栏
    • height:获取屏幕的垂直分辨率
    • width:获取屏幕的水平分辨率

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="example"></div>
<script>
    txt = "<p>以像素计的访问者屏幕宽度:" + screen.width + "</p>";
    txt += "<p>以像素计的访问者屏幕高度:" + screen.height + "</p>";
    txt += "<p>以像素计的屏幕可用宽度:" + screen.availWidth + "</p>";
    txt += "<p>以像素计的屏幕可用高度:" + screen.availHeight + "</p>";
    txt += "<p>以位计的屏幕色彩深度:" + screen.colorDepth + "</p>";
    txt += "<p>以位计的屏幕色彩深度:" + screen.pixelDepth + "</p>";
    document.getElementById("example").innerHTML = txt;
    /*
    * 以像素计的访问者屏幕宽度:1920

        以像素计的访问者屏幕高度:1080
        
        以像素计的屏幕可用宽度:1920
        
        以像素计的屏幕可用高度:1040
        
        以位计的屏幕色彩深度:24
        
        以位计的屏幕色彩深度:24
    * */
</script>
</body>
</html>

1.5,JavaScript的BOM方法history

  • history对象:
    • 历史记录管理:length:返回浏览器历史记录中的url数量
    • 后退:history.back()
    • 前进:history.forward()
    • 跳转:history.go(),跳转到浏览历史的任意一个页面:0表示当前页面,-1表示后一页(back),1表示前一页(forward)以此类推
  • 代码示例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test01</title>
</head>
<body>
<h1>这是test01页面</h1>
<a href="test02.html">跳转到test02页面</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test02</title>
</head>
<body>
<h1>这是test02页面</h1>
<a href="history.html">跳转到history页面</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>history</title>
</head>
<body>
<h1>这是history页面</h1>
<script>
    /*
    * 页面顺序:
    * test01 -> test02 -> history
    * history:对象可以用来操作浏览器向前或向后翻页
    * length:属性:可以取到当前访问的连接数量
    * */
    alert(history.length);//3
</script>
</body>
</html>

1.6,JavaScript的BOM对象location

  • location对象:
    • Location相当于浏览器地址栏,可以将url解析成独立的片段
    • 取到浏览器的url的地址信息
    • 使用js跳转页面

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h1>这里是1.html</h1>
<script>
    console.log(location);
    //返回当前完整路径
    console.log("当前完整路径:" + location.href);
    //返回协议名
    console.log("协议名:" + location.protocol);
    //返回主机名和端口号
    console.log("主机名和端口号:" + location.host);
    //返回主机名
    console.log("主机名:" + location.hostname);
    //返回端口号
    console.log("端口号:" + location.port);
    //返回文件路径
    console.log("文件路径:" + location.pathname);
    //返回?开头的参数列表
    console.log(location.search);
    //返回#开头的锚点
    console.log(location.hash);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h1>location</h1>
<button type="button" id="btn">点击</button>
<script>
    /*
    * location,该对象中封装了对浏览器的地址栏的信息
    * */
    window.onload = function () {
        //获取按钮
        var btn = document.getElementById("btn");
        btn.onclick = function () {
            //如果直接打印location,则可以获取到地址栏的信息(当前页面的完整路径)
            //alert(location);

            //如果直接将location属性修改成一个完整的路径,或者是相对路径
            //则我们页面就会自动跳转到该路径,并且会生成相应的历史记录
            //location = "http://www.baidu.com";
            //location = "test01.html";
        };
    };
</script>
</body>
</html>
  • 具体方法:
  • 1,assign()
    • 用来跳转到其他的页面,作用和我们直接修改location一样,并且会生成相应的历史记录
    • location.assign("http://www.baidu.com");
  • 2,reload()
    • 用来重新加载当前页面,作用和我们刷新按钮一样
    • ctrl+f5,强制清空缓存,俗称强制刷新
    • 如果在方法中传入一个true作为参数,则会强制清空缓存刷新页面
    • location.reload(true);
  • 3,replace()
    • 可以使用一个新的页面来替换当前的一面,调用完毕之后也会跳转页面
    • 不会生成历史记录,不能使用回退按钮进行翻页
    • location.replace("1.html");

第2章,JavaScript的BOM的定时器

2.1,JavaScript的setTimeout定时器

  • 设置延时执行,只会执行一次
  • 接受两个参数:需要执行的函数、毫秒数
  • clearTimeout:清除延时器

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    //2秒后在控制台弹出hello javascript
    function test() {
        console.log("Hello JavaScript");
    }

    setTimeout(test, 2000);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    var timer = setTimeout(function () {
        console.log("JavaScript Hello");
    }, 2000);
    clearTimeout(timer);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<input type="button" value="按钮" onclick="getVal()"/>
<input type="text" id="num" value="0"/>
<script>
    //点击按钮后,文本框中数字每2秒加1
    function getVal() {
        var value = document.getElementById("num").value;
        value++;
        document.getElementById("num").value = value;
        setTimeout(getVal, 2000);
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<p>点击按钮,3秒后弹出 "Hello"</p>
<button onclick="myFunction()">点击我</button>
<script>
    function myFunction() {
        setTimeout(function () {
            alert("hello");
        }, 3000);
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<p>点击按钮,3秒后弹出 "Hello"</p>
<button onclick="myFunction()">点击我</button>
<script>
    function myFunction() {
        //写法1
        /*setTimeout(function () {
            alert("hello");
        }, 3000);*/
        //写法2,3秒失效
        //setTimeout(alert("hello"), 3000);
        //写法3
        setTimeout('alert("hello")', 3000);
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    /*function test() {
        console.log("学习JavaScript");
    }
    //2秒后控制台弹出信息
    setTimeout(test, 2000);*/

    var timer = setTimeout(function () {
        console.log("hello javascript");
    }, 2000);
    //通过cleartimeout方法清理计时器
    clearTimeout(timer);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<input type="button" value="按钮" onclick="getVal()"/>
<input type="text" id="num" value="0"/>
<script>
    function getVal() {
        var value = document.getElementById("num").value;
        //value自增1
        value++;
        //又将value值赋给input框里的value值,实现框里数字自增
        document.getElementById("num").value = value;
        var t = setTimeout(getVal, 50);
        //数字自增到50的时候,停止自增
        if (value == 50) {
            clearTimeout(t);
        }
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<p>点击按钮,在第2、4、6秒修改输入框中的文本:</p>
<button onclick="timedText()">显示时间文本</button>
<input type="text" id="txt">
<script>
    function timedText() {
        var x = document.getElementById("txt");
        setTimeout(function () {
            x.value = "2 秒"
        }, 2000);
        setTimeout(function () {
            x.value = "4 秒"
        }, 4000);
        setTimeout(function () {
            x.value = "6 秒"
        }, 6000);
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<p>点击按钮,等待 3秒后弹出 "Hello"</p>
<p>点击第二个按钮来阻止弹出函数 myFunction 的执行。(你必须在3秒前点击)</p>
<button onclick="myFunction()">先点击我</button>
<button onclick="myStopFunction()">阻止弹出</button>
<script>
    var myVar;

    function myFunction() {
        myVar = setTimeout(function () {
            alert("hello")
        }, 3000);
    }

    function myStopFunction() {
        clearTimeout(myVar);
        alert("阻止弹出");
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<button onclick="startCount()">开始计数!</button>
<input type="text" id="txt"/>
<button onclick="stopCount()">停止计数!</button>
<p>
    点击:"开始计数"按钮开始执行计数程序。输入框从0开始计算,点击"停止计数"停止后,可以再次点击"开始计数"按钮会重新开始计数
</p>
<script>
    var c = 0;//输入框中的数字
    var t;//装着延时器
    var timer_is_on = 0;//代表是否开始计时,并且页面初始化时没有计时

    function timedCount() {
        document.getElementById("txt").value = c;
        c++;
        t = setTimeout(function () {
            timedCount()
        }, 2000);
    }

    function startCount() {
        if (!timer_is_on) {
            timer_is_on = 1;//开关打开true
            timedCount();
        }
    }

    function stopCount() {
        clearTimeout(t);//先停止计时 清除延时器
        timer_is_on = 0;//开关关闭
    }
</script>
</body>
</html>

2.2,JavaScript的setInterval定时器

  • 设置定时器,每隔n毫秒执行一次
  • 接受两个参数:需要执行的function、毫秒数
  • clearInterval:清除定时器

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    function test() {
        console.log("hello javascript");
    }

    setInterval(test, 2000);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    var num = 0;
    var max = 10;
    var timer;

    function test() {
        num++;
        if (num === max) {
            clearInterval(timer);
            console.log("这里有" + num + "个数");
        }
    }

    timer = setInterval(test, 1000);
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div
        {
            width: 100px;
            height: 100px;
            background-color: yellow;
        }
    </style>
</head>
<body>
<div></div>
<script>
    var oDiv = document.getElementsByTagName("div")[0];
    var iLeft = 50;
    if (iLeft > 0 && iLeft < 500) {
        var time1 = setInterval(function () {
            iLeft += 50;
            oDiv.style.marginLeft = iLeft + "px";
            if (iLeft >= 500) {
                clearInterval(time1);
            }
        }, 1000);
    }
</script>
</body>
</html>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<input type="text" name="name" value="0" id="txt"/>
<script>
    setInterval(function () {
        //获取文本框对象
        var obj = document.getElementById("txt");
        //获取value值
        var txtValue = parseInt(obj.value);
        obj.value = txtValue = txtValue + 1;
    }, 1000);
</script>
</body>
</html>
  • setInterval()

    • 定时调用
    • 可以将一个函数,每隔一段时间执行一次
    • 参数:
    • 1,回调函数,该函数会每隔一段时间执行一次
    • 2,每次间隔的时间单位都是毫秒
    • 返回值:
    • 返回一个Number类型的数据,这个数字用来作为定时器的唯一标识
  • clearInterval()

    • 可以用来关闭一个定时器
    • 方法中需要一个定时器的标识作为参数,这样就会关闭对应的定时器
  • 延时调用

    • 延时调用一个函数不会马上执行的,而是需要隔一段时间之后再执行,而且他只会执行一次
    • 延时调用和定时调用的区别是,定时调用执行多次,延时调用执行一次
    • 延时调用和定时调用是可以相互替代的,在开发中可以根据我们自己的需求进行选择
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。