一、BOM的对象:window、screen、history、location、navigator、event
1、history:保存当前窗口的历史记录(历史url)
作用:
前进:history.go(1);
后退:history.go(-1);
*刷新:history.go(0);
2、***location:保存当前窗口的正在打开的url
*(1)常识:一个url由5部分组成
例:
http://127.0.0.1:8020/bom02/new/01-3.html
https://www.baidu.com/s?
wd=178&rsv_spt=1&rsv_iqid=0xd702eab1000426fa&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=178%2526lt%253B&rsv_btype=t&inputT=204&rsv_t=8b56iJOG%2B6b45FILzCXex%2FpEHFfVJ6HMrt%2FXQdYMKdOy%2B8bu9OZqejCb14LrHOIywVaU&rsv_sug3=7&rsv_sug1=4&rsv_sug7=100&rsv_pq=a3ee42be00024fae&rsv_sug2=0&rsv_sug4=981
协议:http/https(请求响应模式)/ftp(传输文件)/ws(广播收听模式:直播) - 网页的功能不同
主机号/域名:www.baidu.com/127.0.0.1 - 主机号不方便记忆所以多半都会购买域名,而且127.0.0.1只能访问自己
端口号::8020 - 默认端口:http - 80 https - 443,默认端口可以省略不写
文件的相对路径:new/01-3.html /s -百度加密了
查询字符串:?wd=178&rsv_spt=1... - 表单提交到服务器的东西 - 请求消息
一般来说一个网址一定由5部分:
协议://域名:端口号/文件路径?查询字符串
目的:1、常识
2、学习服务器端的时候有好处
(2)属性:不需要记忆,直接用console.log(location)可以查看到有哪些属性 作用:获取:协议、域名、端口号、文件路径、查询字符串
(3)API:跳转 location="新url" location.href="新url" location.assign("新url");
以上三个操作功能相同都是跳转页面,意味着以后不一定非要用a标签跳转
替换后禁止后退:location.replace("新url")
刷新:location.reload();
3、navigator:保存了当前浏览器的信息(浏览器的名称/版本号)
属性:navigator.userAgent;
根据字符串截取出浏览器名称&版本号:本来的目的是为了做兼容,但是没用
因为所有的API前辈们都已经设置好了兼容
4、******event:事件对象
事件:多半用户触发 或 浏览器自动触发的操作
(1)*绑定事件:3种
1、在HTML元素上绑定
<elem on事件名="js语句"></elem>
缺点:
1、没有实现JS与HTML的分离 - 要HTML(内容)/CSS(样式)/JS(行为)分离
2、无法动态绑定事件 - 一次只能绑定一个元素
3、无法同时绑定多个函数对象
2、*使用JS的事件属性绑定:
elem.on事件名=function(){
js语句
}
优:1、实现JS与HTML的分离
2、动态绑定事件
缺:1、无法同时绑定多个函数对象 - 算不上是缺点,为什么不写一起
3、使用JS的API绑定事件:
主流:elem.addEventListener("事件名",callback)
老IE:elem.attachEvent("on事件名",callback);
兼容:if(elem.addEventListener){
elem.addEventListener("事件名",callback)
}else{
elem.attachEvent("on事件名",callback);
}
优:1、实现JS与HTML的分离
2、动态绑定事件
3、同时绑定多个函数对象
缺:需要处理兼容性问题
二、事件周期:
主流:3个
1、捕获阶段:由外向内,记录着要执行的事件
2、目标触发:当前点击的元素优先出发
3、冒泡触发:由内向外的冒泡触发事件
老IE:2个
没有捕获阶段
三、*****获取到事件对象event:
主流:事件函数中传入一个形参e,就可以自动接住事件对象event
老IE:window.event;
兼容:event;不光老IE可用,主流浏览器也可以使用 - 小三上位
获取到了事件对象event就可以做很多很多的操作了:
1、*获取鼠标的位置
2、*阻止冒泡:重要在于面试中/鄙视中,但是开发中绝对不会阻止冒泡,更需要利用冒泡
主流:e.stopPropagation();
老IE:e.cancelBubble=true;
兼容:if(e.stopPropagation){
e.stopPropagation()
}else{
e.cancelBubble=true;
}
3、***事件委托(利用冒泡):
为什么:优化,每绑定一个事件,相当于就创建了一个事件监听对象,创建的对象越多,网页的性能越底下
建议:建议把事件都绑定在自己的父元素身上一次即可
获取目标元素:触发的元素 - 永远不变就是触发到的元素
当前元素:this -> 指向很多
主流:e.target;
老IE:e.srcElement;
兼容:e.srcElement;不光老IE可用,主流浏览器也可以使用
以后事件之中可以不用使用this了
4、*阻止浏览器的默认行为:
哪些:比如:F5带来的刷新,F12带来的控制台,右键带来的菜单框,F11全屏,a自带跳转,submit自带提交...
主流:e.preventDefault();
老IE:e.returnValue=false;
兼容:if(e.preventDefault){
e.preventDefault()
}else{
e.returnValue=false;
}
新事件:
1、鼠标右击:window.oncontextmenu
2、键盘事件:window.onkeydown
5、*获取键盘的键码
e.keyCode;//不需要记忆,直接输出查看 或 百度 keyCode表
总结:bom重点:
1、定时器
2、location跳转
3、event对象:
(1)写出知道的绑定事件的方式:3种
(2)事件:主流3种 老IE2种
(3)如何阻止冒泡
(4)事件委托
(5)阻止浏览器的默认行为
(6)获取键盘键码
(7)获取鼠标的坐标
扩展:*****客户端存储技术 - 以前使用cookie(缺点:大小有限2kb,30天必死),HTML5提出了一个新概念webStorage:2种(优:大小有限8mb,生命周期无限,缺点:老IE不支持)
1、localStorage:本地级 - 浏览器关闭甚至电脑关闭,第二天打开依然存在
2、sessionStorage:会话级 - 浏览器一旦关闭自动死亡
作用:
1、数据可以跨页面传输
2、皮肤、主题
3、浏览器的历史记录
语法:类似于对象:
添加:xxxxStorage.属性名="值";
获取:xxxxStorage.属性名;
删除:xxxxStorage.removeItem("属性名");//只会删除这一个
清空:xxxxStorage.clear();//删除所有