一、浏览器对象模型(BOM)
1、BOM专门操作浏览器窗口的对象,而window又是BOM对象,非js对象 ;
2、window的方法,可以直接使用window对象的document属性进行访问、检索、修改XHTML文档内容与结构
(1)原因:因为document对象又是DOM模型的根节点。也就是说,BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以直接操作浏览器以及浏览器读取到的文档。
(2)DOM和BOM的区别:DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口
3、常见的window对象和对象方法
window.history; //对 History 对象的只读引用 window.location; //用于窗口或框架的 Location 对象 window.event; //对 Event 对象的只读引用 window.close(); //关闭窗口 window.confirm("Are you sure?"); //弹出一个具有OK和Cancel按钮的询问对话框,返回一个布尔值 window.location.search; //执行GET请求的URL中的问号后的部分,又称查询字符串,如?p=xxxx window.location.hash; //如果URL包含#,返回该符号之后的内容,如#anchor1 window.location.replace("http:www.baidu.com"); //同assign(),但新地址不会被加到浏览器的历史栈中,不能通过back和forward访问 window.onload; //window的加载事件 window.onscroll; //window的滚动事件 window.onresize; //window的窗口变化事件
4、获取鼠标和取消鼠标的兼容写法
//获取鼠标选中的文字 window.getSelection ? window.getSelection().toString() : document.selection.createRange().text; //取消鼠标选中的文字 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
二、事件对象:event
1、事件对象必须在一个事件调用的函数里面使用才有内容。函数是不是事件函数,不是定义时决定,而是调用时决定
function fn1(){alert(event);} //如果通过fn1()方式调用就不会有内容,用事件调用就有内容 document.onclick = fn1;
2、事件流:当一个HTML元素产生一个事件时,该事件会在元素结点与根节点之间按特定的顺序传播,路径所经过的节点都会收到该事件,这个传播过程可称为DOM事件流。
(1)事件冒泡:是IE浏览器对事件模型的实现。从DOM树型结构上理解,就是事件由叶子节点沿祖先结点一直向上传递直到根节点。
(2)事件捕捉:它与冒泡型刚好相反,由DOM树最顶层元素一直到最精确的元素。
3、事件监听器
obj.addEventListener(事件名称,事件函数,是否捕获); //事件监听 obj.removeEventListener(事件名称,事件函数,是否捕获); //解除事件监听
4、事件委托
function delegation(fEle,ele,attr,fn){ ele = ele.toLowerCase(); bind(fEle,attr,function (ev){ ev = ev || event; var tar = ev.target || ev.srcElement; if(ele[0]==="#"&&("#"+tar.id)===ele|| ele[0]==="."&&tar.className.indexOf(ele.substring(1))!=-1|| /[a-z]/.test(ele[0])&&tar.nodeName.toLowerCase()===ele){ fn.call(tar); } }) }
三、鼠标滚轮事件
1、在ie浏览器和谷歌浏览器的滚轮事件使用onmousewheel;而火狐浏览器的事件用DOMMouseScroll(该事件必须用addEventListener事件监听才能生效)