js:事件流程

学习js第九天

快捷尺寸

box.clientWidth
获取盒子width + 左右padding
box.clientHeight
获取盒子height + 上下padding

box.offsetWidth
盒子左右border + 获取width + 左右padding
box.offsetHeight
盒子上下border + 获取height+ 上下padding

获取边框宽度
box.clientLef//左
box.clientTop//上

快捷位置

定位父元素:指的是自己的祖先元素中 离自己最近的那个拥有定位属性的元素

box.offsetParent
离自己最近的那个拥有定位属性的父元素
box.offsetLeft
box.offsetTop
自己的外边框 距离定位父元素的内边框的距离
IE8中 计算的方式:自己元素的边框外 到定位父元素的边框外

document.body.scrollTop
获取页面上面卷动值
document.body.scrollLeft
获取页面左侧卷动值(因为有版心 所以这个属性很少用)

事件流程

事件流程分为两个阶段: 事件捕获事件冒泡
捕获:事件从最顶层元素开始执行 一层层往下 直到最精确元素
冒泡:事件从最精确元素开始执行 一层层往上 直到最顶层元素
先捕获 再冒泡

DOM0级事件绑定

元素.on类型 = 事件处理函数 的方式 叫做DOM0级
DOM0级只能够往冒泡阶段进行绑定

DOM2级事件绑定

元素.addEventListener(类型, 处理函数, 布尔值)
类型:“click” “mousedown” “mousemove”
处理函数: function() {}
布尔值: true 绑定到捕获 false 绑定到冒泡
元素.removeEventListener(类型, 处理函数, 布尔值)

DOM0级: 绑定方式是添加属性
只能添加一个函数
删除很方便
只能绑定到冒泡阶段
DOM2级:绑定方式是调用方法
可以添加多个函数
删除不是很方便
可以绑定到捕获和冒泡阶段
DOM0级和DOM2级绑定方式可以同时使用 事件触发的顺序与代码的书写顺序有关
this都是绑定事件的元素
事件对象也在

事件绑定兼容

ie8不支持addEventListener 支持自己的attachEvent
attachEvent 绑定的事件是倒序执行
当dom0级和attach一起存在时总是先执行dom0级
attach里面的this是window
attach里面有事件对象
onclick里面的是绑定事件的元素
onclick里面没有事件对象

function bindEvent(dom, type, fun) {
        if (dom.addEventListener) {
            dom.addEventListener(type, fun, false);
        } else if (dom.attachEvent) {
            dom.attachEvent("on" + type, fun);
        } else {
            dom["on" + type] = fun
        }

    }

事件对象

事件对象: 当事件被触发的时候 会产生很多信息 这些信息被浏览器封装成了一个对象 这个对象被浏览器主动传递到了事件函数中

e.altKey
alt键有没有被按下
e.ctrlKey
ctrl键是否按下
e.shiftKey
shift键是否按下
e.offsetX,e.offsetY
鼠标在盒子内的坐标 不包含边框 这个属性会被子元素影响
e.clientX,e.clientY
鼠标距离视口的距离
e.pageX,e.pageY
页面距离
e.screenX,e.screenY
屏幕距离
e.target
触发事件的元素
e.currentTarget
绑定事件的元素 this === e.currentTarget

IE中的事件对象

DOM0级没有将事件对象传递给函数 而是作为window的一个属性

window.event
IE中没有的属性: target currentTarget pageX pageY
兼容方式
var e = e || window.event;

阻止冒泡

普通浏览器
.stopPropagation()
IE浏览器
e.cancelBubble = true;

兼容:
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}

阻止默认行为

浏览器给部分标签和事件设置了默认的操作.
比如 a 标签 会自动跳转页面

		var a = document.querySelector("a");

        a.onclick = function(e) {
            // 询问用户是否真的要跳转页面
            // alert()
            var isLeave = confirm("是否跳转?");
            if (!isLeave) {
                e.preventDefault();
            } 
            // prompt()
        }
// 右击菜单
        document.oncontextmenu = function (e) {

            console.log(2222)
            // 除了IE的阻止默认行为
            // e.preventDefault();
            // IE中的阻止默认行为
            // event.returnValue = false;
            // 如果是使用的dom0级绑定 我们可以通过 return  false 来阻止默认行为
            return false;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值