[华为云在线课程][JavaScript的BOM编程][学习笔记]
【摘要】 第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/falseprompt()
:弹窗接受用户的输入
- 打开窗口和关闭窗口:
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)