Web/04-JavaScript基础/BOM的常见内置方法和内置对象.md
2019-11-29 19:33:05 +08:00

253 lines
6.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 本文最初发表于[博客园](http://www.cnblogs.com/smyhvae/p/8401662.html),并在[GitHub](https://github.com/qianguyihao/Web)上持续更新**前端的系列文章**。欢迎在GitHub上关注我一起入门和进阶前端。
> 以下是正文
## BOM的介绍
### JavaScript的组成
JavaScript基础分为三个部分
- ECMAScriptJavaScript的语法标准包括变量表达式运算符函数if语句for语句等
- **DOM**文档对象模型操作**网页上的元素**的API比如让盒子移动变色轮播图等
- **BOM**浏览器对象模型操作**浏览器部分功能**的API比如让浏览器自动滚动
### 什么是BOM
BOMBrowser Object Model浏览器对象模型
**BOM的结构图**
![](http://img.smyhvae.com/20180201_2052.png)
从上图也可以看出
- **window对象是BOM的顶层(核心)对象**所有对象都是通过它延伸出来的也可以称为window的子对象
- DOM越是BOM的一部分
**window对象**
- **window对象是JavaScript中的顶级对象**
- 全局变量自定义函数也是window对象的属性和方法
- window对象下的属性和方法调用时可以省略window
下面讲一下 **BOM 的常见内置方法和内置对象**
## 弹出系统对话框
比如说`alert(1)``window.alert(1)`的简写因为它是window的子方法
系统对话框有三种
```javascript
alert(); //不同浏览器中的外观是不一样的
confirm(); //兼容不好
prompt(); //不推荐使用
```
## 打开窗口关闭窗口
1打开窗口
```
window.open(url,target,param)
```
**参数解释**
- url要打开的地址
- target新窗口的位置可以是`_blank` `_self` `_parent` 父框架
- param新窗口的一些设置
- 返回值新窗口的句柄
**param**这个参数可以填各种各样的参数比如
- name新窗口的名称可以为空
- features属性控制字符串在此控制窗口的各种属性属性之间以逗号隔开
- fullscreen= { yes/no/1/0 } 是否全屏默认no
- channelmode= { yes/no/1/0 } 是否显示频道栏默认no
- toolbar= { yes/no/1/0 } 是否显示工具条默认no
- location= { yes/no/1/0 } 是否显示地址栏默认no有的浏览器不一定支持
- directories = { yes/no/1/0 } 是否显示转向按钮默认no
- status= { yes/no/1/0 } 是否显示窗口状态条默认no
- menubar= { yes/no/1/0 } 是否显示菜单默认no
- scrollbars= { yes/no/1/0 } 是否显示滚动条默认yes
- resizable= { yes/no/1/0 } 是否窗口可调整大小默认no
- width=number 窗口宽度像素单位
- height=number 窗口高度像素单位
- top=number 窗口离屏幕顶部距离像素单位
- left=number 窗口离屏幕左边距离像素单位
各个参数之间用逗号隔开就行但我们最好是把它们统一放到json里
2关闭窗口window.close()
12的代码举例
```html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<a href="javascript:;">点击我打开一个新的页面</a>
<a href="javascript:;">点击我关闭本页面</a>
<script>
//新窗口 = window.open(地址,是否开新窗口,新窗口的各种参数);
var a1 = document.getElementsByTagName("a")[0];
var a2 = document.getElementsByTagName("a")[1];
a1.onclick = function () {
//举例1 window.open("http://www.jx.com","_blank");
var json = {
"name": "helloworld",
"fullscreen": "no",
"location": "no",
"width": "100px",
"height": "100px",
"top": "100px",
"left": "100px"
};
window.open("http://www.baidu.com", "_blank", json); //举例2
}
//关闭本页面
a2.onclick = function () {
window.close();
}
</script>
</body>
</html>
```
3新窗口相关
- 新窗口.moveTo(5,5)
- 新窗口.moveBy()
- 新窗口.resizeTo()
- window.resizeBy()
代码举例
```javascript
var newWin = window.open("demo.html", "_blank", json);
newWin.moveTo(500, 500);
```
## location对象
`window.location`可以简写成locationlocation相当于浏览器地址栏可以将url解析成独立的片段
### location对象的属性
- **href**跳转
- hash 返回url中#后面的内容包含#
- host 主机名包括端口
- hostname 主机名
- pathname url中的路径部分
- protocol 协议 一般是httphttps
- search 查询字符串
**location.href属性举例**
**举例1**点击盒子时进行跳转
```html
<body>
<div>smyhvae</div>
<script>
var div = document.getElementsByTagName("div")[0];
div.onclick = function () {
location.href = "http://www.baidu.com"; //点击div时跳转到指定链接
// window.open("http://www.baidu.com","_blank"); //方式二
}
</script>
</body>
```
**举例25秒后自动跳转到百度**
有时候当我们访问一个不存在的网页时会提示5秒后自动跳转到指定页面此时就可以用到location举例
```html
<script>
setTimeout(function () {
location.href = "http://www.baidu.com";
}, 5000);
</script>
```
### location对象的方法
- location.assign()改变浏览器地址栏的地址并记录到历史中
设置location.href 就会调用assign()一般使用location.href 进行页面之间的跳转
- location.replace()替换浏览器地址栏的地址不会记录到历史中
- location.reload()重新加载
## navigator对象
window.navigator 的一些属性可以获取客户端的一些信息
- userAgent系统浏览器)
- platform浏览器支持的系统win/mac/linux
举例
```javascript
console.log(navigator.userAgent);
console.log(navigator.platform);
```
效果如下
![](http://img.smyhvae.com/20180201_2140.png)