history
保存着当前页面/窗口的历史记录
而有了历史记录才可以后退
前进一个窗口:history.go(1)
后退一个窗口:history.go(-1)
刷新窗口:history.go(0)
navigator
保存着当前浏览器基本信息 => 名称和版本号
通过js判断用户使用的是什么浏览器,相当于css中的hack(专为老IE准备),对不同的浏览器执行不同的代码;
就一个属性:navigator.userAgent;
它会得到一个字符串,里面有当前浏览器的所有基本信息,然后去获取自己需要的内容;
不重要,因为有很多的兼容性方式等着我们去学习,不需要我们自己判断;
location
保存着当前正在打开的url
常识: url由哪几个部分组成
一定是由5个部分组成
1、协议:http/https
2、域名/主机名:域名需要购买
3、端口:http默认端口80,https默认端口443;默认端口可以省略不写;
4、文件的相对路径:一般都是加密着的;
5、请求信息/查询字符串:客户端向服务端发送的请求信息,表单带来的东西
https : // www.baidu.com / s ?ie=UTF-8&wd=%E7%99%BE%E5%BA%A6
协议 : // 域名:端口(默认443) /文件的相对路径?请求信息
可以做什么:
1、跳转页面:
location="url"
location.href="url"
location.assign("url")
2、跳转页面,禁止后退:
location.replace("url");
替换新页面替换掉原页面,不会产生历史记录
3、刷新:
location.reload();
event对象
什么叫event对象:用户触发 或 浏览器自动触发
绑定事件:3种:
在HTML标签上绑定事件:
<a on事件名="js代码">内容</a>
缺点:1、不符合我们页面HTML 样式CSS 行为JS 的分离;
2、一次只能绑定一个元素,不能动态绑定事件;
3、一个事件只能放入一个事件处理函数;
在JS中使用事件处理函数绑定事件:
elem.on事件名=function(){}
优点:1、符合我们页面HTML 样式CSS 行为JS 的分离;
2、可以动态绑定事件,一次绑定多个;
缺点:一个事件只能放入一个事件处理函数;
用API绑定事件:
主流:elem.addEventListener("事件名",回调函数)
老IE:elem.attrchEvent("事件名",回调函数)
兼容:if(elem.addEventListener){elem.addEventListener()}
else{elem.attrchEvent("事件名",回调函数)}
优点:1、符合我们页面HTML 样式CSS 行为JS 的分离;
2、可以动态绑定事件,一次绑定多个;
3、一个事件可以放入多个事件处理函数;
缺点:兼容不好,麻烦
事件周期 3个阶段
1、捕获阶段:记录要执行的事件有哪些,有外向内
2、目标触发阶段: 目标元素,实际触发事件的元素
3、冒泡执行阶段:由内向外的冒泡执行
如何获取event对象:
主流:事件处理函数的第一个形参会自动获取到;
老IE:window.event;
兼容:e=event; => 因为主流也支持window.event;
只有当你获取了event对象才可以做以下5个操作:
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; => 因为主流也支持srcElement;
4、禁止浏览器的默认行为:
比如:禁止右键功能(window.oncontextmenu)和阻止键盘事件(window.onkeydown(f5,f12...))
主流:e.preventExtenious();
老IE:e.returnValue=false;
兼容:if(e.preventExtenious){e.preventExtenious()}
else{e.returnValue=false}
5、获取键盘的键码:
直接输出查看:console.log(e.keyCode)