# 掌控你的浏览器
# 课程目标
掌握 JavaScript 的核心之一:BOM ,能够熟悉 BOM 相关操作,掌握 JavaScript 程序与浏览器交互的能力
# Window 对象
Window 对象是 BOM 的核心,用来表示当前浏览器窗口,阅读下面材料掌握操作或访问浏览器的方法和属性。
- JavaScript Window - 浏览器对象模型 (opens new window)
- 菜鸟教程 Window 对象 (opens new window)
- MDN Window (opens new window)
- BOM 简单介绍 (opens new window)
# 编码一
<!DOCTYPE html>
<html lang="en">
<head>
<title>window对象练习</title>
<script>
var myWindow;
function openWin() {
//打开一个新窗口
}
function moveWin() {
//移动这个新窗口
}
function focusWin() {
//聚焦这个新窗口
}
function resize() {
//调整这个新窗口大小
}
function closeWin() {
//关闭这个新窗口
//弹出系统对话框要求用户是否确认关闭新开的窗口
}
function printWin() {
//打印窗口
}
function showWInMessage() {
//新开一个窗口,显示父窗口信息
}
function scrollWin(){
//移动关于这个浏览器窗口到(0px,100px)
}
</script>
</head>
<body>
<input type="button" value="打开一个新窗口" onclick="openWin()" />
<br>
<input type="button" value="移动这个新窗口" onclick="moveWin()" />
<br>
<input type="button" value="聚焦到新窗口" onclick="focusWin()" />
<br>
<input type="button" value="调整这个新窗口大小" onclick="resize()" />
<br>
<input type="button" value="关闭这个新窗口" onclick="closeWin()" />
<br>
<input type="button" value="打印本窗口" onclick="printWin()" />
<br>
<input type="button" value="关于这个浏览器窗口" onclick="showWInMessage()" />
<br>
<input type="button" value="滚动" onclick="scrollWin()" />
</body>
</html>
新建一个 step1.html,复制上述代码,分别实现 script 标签中的几个函数。
- 完成新打开一个窗口功能,请尝试在标签页打开,以及新开一个浏览器窗口打开两种方式,设置窗口外观宽度为 300 像素,高度为 300 像素
- 调整这个新开窗口宽度高度变为 600 像素
- 移动这个新开的窗口的位置到屏幕左上角位置为(300px,100px)
- 完成关闭新窗口功能,并且弹出确认框,完成一个逻辑判断,如果用户点击确认就关闭窗口,如果点击取消就不关闭
- 实现打印窗口效果
- 实现点击关于这个浏览器窗口按钮,新开一个窗口,设置窗口外观宽度为 300 像素,高度为 300 像素,并且在新窗口中显示这个浏览器相关信息如下
- 浏览器窗口宽度(不包含工具栏与滚动条)
- 浏览器窗口高度(包含工具栏与滚动条)
- 浏览器名称为
- 浏览器的完整高度,包含工具栏与滚动条
- 浏览器的完整宽度,包含工具栏与滚动条
- 浏览器窗口相对于计算机屏幕的 X 坐标
- 浏览器窗口相对于计算机屏幕的 Y 坐标
- 当前页面相对于浏览器窗口左上角沿水平方向滚动的距离
- 当前页面相对于浏览器窗口左上角沿垂直方向滚动的距离
- 点击滚动按钮,滚动当前页面到(0px ,100px)
# 编码二
参考示例图 (opens new window)实现一个页面联动侧边导航,浏览器滚动,右侧的导航栏跟随滚动的页面而联动实现定位
- 当页面滑动到 red ,右侧导航栏相对应 red 一栏背景颜色改变为 #eee,字体颜色变为黑色
- 点击侧边导航栏也可以快速定位到响应页面
# screen 对象
# 编码
基于上一个编码任务,给 HTML 添加一个按钮,点击实现显如下屏幕相关信息
- 计算机屏幕的尺寸
- 计算机屏幕的颜色深度
- 计算机屏幕的颜色分辨率(每象素的位数)
- 计算机屏幕的高度
- 计算机屏幕的宽度
效果如下所示
# location 对象
JavaScript location 对象中包含了有关当前页面链接(URL)的信息,例如当前页面的完整 URL、端口号等,我们可以通过 window 对象中的 location 属性来获取。
# 编码
基于上一个编码任务,给 HTML 添加一个按钮,点击实现显如下当前页面链接(URL)相关信息
- 页面完整 href
- 页面路径
- 页面协议
- 页面哈希值,这里需要您对哈希字符串进行处理不要呆#
- 页面主机名和端口号
# navigator 对象
Navigator 对象包含有关浏览器的信息
# 编码
基于上一个编码任务,给 HTML 添加一个按钮,点击实现显示当前浏览器相关信息
- 浏览器的内部名称(开发代号)
- 浏览器的官方名称:
- 浏览器的平台和版本信息
- 浏览器中是否启用 cookie 的布尔值
- 浏览器是否联网
- 浏览器的操作系统平台
- 浏览器的厂商和版本信息
效果如下所示
# history 对象
# 编码
<!DOCTYPE html>
<html lang="en">
<head>
<title>second page</title>
</head>
<body>
<h1>secong page</h1>
<button onclick="myBack()">返回</button>
<button onclick="myForward()">下一页</button>
<button onclick="myGo()">去到第几条历史记录</button>
<button onclick="myPushState()">插入一条新的历史记录</button>
<button onclick="myReplaceState()">替换当前历史记录</button>
<button onclick="historyInfo()">打印历史信息</button>
<script type="text/javascript">
function myBack() {
//返回上一页
}
function myForward() {
//去到下一页
}
function myGo() {
//去到第几个历史记录页面
}
function myPushState() {
//插入一条新的历史记录,位于第二页
}
function myReplaceState() {
//替换当前历史记录
}
function historyInfo() {
// 打印历史记录相关信息
}
</script>
</body>
</html>
- 基于上一个编码任务,新建一个页面 step2.html,复制上述代码,分别实现 script 标签中的几个函数,具体实现如下功能
- 给 step1.html 添加按钮,点击跳转我们新建的 step2.html 页面
- 在 step2.html 页面中实现点击返回按钮,也页面就返回上一页
- 在 step2.html 页面中实现点击下一页按钮,也页面跳转到下一页
- 在 step2.html 页面中实现点击
去到第几条历史记录按钮
,弹出输入框,输入 - 在 step2.html 页面中实现点击
插入一条新的历史记录按钮
向浏览器的历史记录中插入一条新的历史记录 - 在 step2.html 页面中实现点击
替换当前历史记录按钮
使用指定的数据、名称和 URL 来替换当前历史记录。 - 在 step2.html 页面中实现点击
打印历史信息按钮
,显示浏览历史的数目,浏览器是否回滚过上一页或者下一页,浏览器没有调用过 pushState() 或 replaceState() 方法。
# 定时器
- MDN requestAnimationFrame (opens new window)
- 合作异步 JavaScript: 超时和间隔 (opens new window)
- JavaScript 中 SetInterval 与 setTimeout 的用法详解 (opens new window)
# 编码
<div id="fade-obj" style="width:300px;height:300px;background:#000"></div>
<button id="fade-btn">淡出</button>
针对以上 HTML ,分别使用 setTimeout 和 setInterval 实现以下功能:
- 点击按钮时,开始改变 fade-obj 的透明度,开始一个淡出(逐渐消失)动画,直到透明度为 0
- 在动画过程中,按钮的状态变为不可点击
- 在动画结束后,按钮状态恢复,且文字变成“淡入”
- 在按钮显示淡入的状态时,点击按钮,开始一个“淡入”(逐渐出现)的动画,和上面类似按钮不可点,直到透明度完全不透明 淡入动画结束后,按钮文字变为“淡出”
- 暂时不要使用 CSS animation(以后我们再学习)
# 编码二
1.点击更换背景按钮,每隔一秒后就给页面更换一个随机的背景颜色,点击停止按钮,页面就停止更换背景颜色 效果如下所示
# 编码三
<!DOCTYPE html>
<html lang="en">
<head>
<title>demo</title>
<script type="text/javascript">
function progressStart(){
//模拟进度条
}
</script>
</head>
<body>
<div id="progress">0%</div>
<button id="btn" onclick="progressStart()">run</button>
<script>
</body>
</html>
复制上述代码,分别实现 script 标签中的函数,应用定时器模仿简单的进度条度效果,要求如下
- 在注释提示部分完成
- 点击 run 按钮,进度就开始跑,并且 id 名为
progress
的div
内部文本也跟这进度条同步改变 - 分别使用 setInterval、setTimeout 和 requestAnimationFrame 三种方法进行实现体会它们之间的区别
效果如下