admin 管理员组

文章数量: 1184232

课程名称   前端模块化

课程目标  

1.了解常见浏览器 JS 对象常见 API 及用法

https://segmentfault/a/1190000014212576 

2. 浏览器内置对象详解

3.浏览器事件模型详解

4. 浏览器请求相关内容详解

课程要点

一、什么是浏览器对象模型

BOM :Browser Object Model(浏览器对象模型),浏览器模型提供了独立于内容的、可以与浏览器窗口进行滑动的对象结构,就是浏览器提供的 API

其主要对象有:

1. window 对象——BOM 的核心,是 js 访问浏览器的接口,也是 ES 规定的 Global 对象

2. location 对象:提供当前窗口中的加载的文档有关的信息和一些导航功能。既是 window 对象属 性,也是 document 的对象属性

3. navigation 对象:获取浏览器的系统信息  (用于测试是否浏览器断网)

window.navigator.onLine (用webSocket 或者 setInterval)

4. screen 对象:用来表示浏览器窗口外部的显示器的信息等

5. history 对象:保存用户上网的历史信息

二、Window 对象

Window 对象

windows 对象是整个浏览器对象模型的核心,其扮演着既是接口又是全局对象的角色

alert() confirm()  prompt()  open()  onerror()  setTimeout()  setInterval()

阿里云有免费的日志服务,所有的error上传录入方便排查

- 窗口位置

screenLeft  screenTop  screenX  screenY  moveBy(x,y)  moveTo(x,y)

- 窗口大小

innerWidth  innerHeight  outerWidth  outerHeight  resizeTo(width, height)  resizeBy(width, height)

- 定时器

setTimeout

setInterval

(最好不要用它,因为切到后台h5是不运行的,返回时可能造成突然轮询请求好多次)

 Location 对象

提供当前窗口中的加载的文档有关的信息和一些导航功能。既是 window 对象属性,也是 document 的对象属性

location 对象的主要属性:

hash ( 用window.location.hash 是#后面的值它可读可写 如http://domain/#admin的location.hash="#admin")

window.addEventListener("hashchange", func, false);

host hostname 

href (location.href)

location 的应用场景:Navigation 对象

navigation 接口表示用户代理的状态和标识,允许脚本查询它和注册自己进行一些活动

History 对象

history 对象保存着用户上网的历史记录,从窗口被打开的那一刻算起,history 对象是用窗口的浏览历史用文档和文档状态列表的形式表示。

go() back() forword() length

二、详解浏览器事件捕获,冒泡

浏览器事件模型中的过程主要分为三个阶段:捕获阶段、目标阶段、冒泡阶段。

这里要注意addEventListener的第三个参数, 如果为true,就是代表在捕获阶段执行。如果为false,就是在冒泡阶段进行

 e.target.nodeName 指当前点击的元素, e.currentTarget.nodeName绑定监听事件的元素

 阻止事件传播

stopPropagation()  阻止事件传播

大家经常听到的可能是阻止冒泡,实际上这个方法不只能阻止冒泡,还能阻止捕获阶段的传播。

 stopImmediatePropagation()

如果有多个相同类型事件的事件监听函数绑定到同一个元素,当该类型的事件触发时,它们会按照被添加的顺序执行。如果其中某个监听函数执行了 event.stopImmediatePropagation() 方法,则当前元素剩下的监听函数将不会被执行。

阻止默认行为

e.preventDefault()

e.preventDefault()可以阻止事件的默认行为发生,默认行为是指:点击a标签就转跳到其他页面、拖拽一个图片到浏览器会自动打开、点击表单的提交按钮会提交表单等等,因为有的时候我们并不希望发生这些事情,所以需要阻止默认行为

兼容性

attachEvent——兼容:IE7、IE8; 不支持第三个参数来控制在哪个阶段发生,默认是绑定在冒泡阶段

addEventListener——兼容:firefox、chrome、IE、safari、opera;

class BomEvent {
    constructor(element) {
        this.element = element;
    }

    addEvent(type, handler) {
        if (this.element.addEventListener) {
            //事件类型、需要执行的函数、是否捕捉
            this.element.addEventListener(type, handler, false);
        } else if (this.element.attachEvent) {
            this.element.attachEvent('on' + type, function () {
                handler.call(element);
            });
        } else {
            this.element['on' + type] = handler;
        }
    }

    removeEvent(type, handler) {
        if (this.element.removeEnentListener) {
            this.element.removeEnentListener(type, handler, false);
        } else if (element.datachEvent) {
            this.element.detachEvent('on' + type, handler);
        } else {
            this.element['on' + type] = null;
        }
    }
}
// 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
function stopPropagation(ev) {
    if (ev.stopPropagation) {
        ev.stopPropagation(); // 标准w3c
    } else {
        ev.cancelBubble = true; // IE
    }
}
// 取消事件的默认行为
function preventDefault(event) {
    if (event.preventDefault) {
        event.preventDefault(); // 标准w3c
    } else {
        event.returnValue = false; // IE
    }
}

补充知识点

一个面试题ul + li,点击每个li alert对应的索引  先来给每个li绑定事件  写一个事件委托的方式

const liList = document.getElementsByTagName("li");

for(let i = 0; i<liList.length; i++){
    liList[i].addEventListener('click', function(e){
        alert(`内容为${e.target.innerHTML}, 索引为${i}`);
   })
}

 

 

 

 

 

本文标签: 模型 浏览器 对象