dom事件操作

122 阅读4分钟
  1. 事件绑定

    • dom0级事件
      • 语法:事件源.onclick = function(){}
    • dom2级事件
      • 标准浏览器语法语法:事件源.addEventListstener('事件类型',事件处理函数),可以同时给一个事件绑定多个事件处理函数,多个事件处理函数时,顺序绑定顺序执行,至少两个参数
      • 低版本语法:事件源.attachEvent('on事件类型',事件处理函数),可以同时给一个事件绑定多个事件处理函数,多个事件处理函数时,顺序绑定倒叙执行,只有两个参数
  2. 事件的解绑

    • 解绑0级事件
      • 因为赋值的行为,所以直接再次赋值伪null就把之前的事件处理函数覆盖了
      • 绑定事件
        • div.onclick =function(){console.log('hello world')}
      • 解绑
        • btn.onclick = function(){//要给div解绑0级事件 div.onclick = null}
    • 解绑2级事件
      • removeEventListener('事件类型',要解绑的事件处理函数) 。如果想解绑事件,在绑定事件的时候,一定要把函数单独书写成一个具名函数的形式,一函数名的形式解绑事件处理函数
        • 绑定事件
        • cliclHandler()表示把函数执行掉
        • clickHandler 表示一个函数的地址
        • div.addEventListener('click',clickHandler)
        • btn.onclick = function(){//给div解绑dom2级事件 div。removeEventListener('click',clickHandler)}
      • 向一个事件类型身上绑定多个事件处理函数的时候
      • click:[事件处理函数1,事件处理函数2,事件处理函数3],当行为触发时,找到对应的这个数组,遍历循环,依次执行
      • detachEvent('on事件类型',要解绑的事件)
        • function clickHandler(){console.log('hello world')}
        • div.attachEvent('onclick',clickHandler)
        • btn.onclick = function(){//解绑div的dom2级事件 div.detachEvent('onclick',clickHandler) console.log('我执行了')}
  3. 事件对象。当一个事件触发的时候,对本次事件的描述

    • 兼容写法:e = e||window.event
    • on(div,'click',function(e){//处理事件兼容 e = e||window.event console.log(e) })
  4. 鼠标事件。

    • 按下的按键。事件对象中有一个叫做button的属性,它来表示你按下的时哪一个键,0表示左键,1表示滚轮键,2表示右键 *
    • 光标的坐标
      • clientX和clientY,距离可视窗口左上角的距离
      • pageX和pageY,光标距离文档流左上角的位置
      • offsetX和offsetY,光标触发事件的元素
    • 左键单击
      • 语法:元素.onclick = function(){}
    • 双击事件 元素.ondblclick = function(){}
    • 右键事件 元素.oncontextmenu = function(){}
    • 鼠标按下事件 元素.onmousedown = function(){}
    • 鼠标抬起事件 元素.onmouseup = fucntion(){}
    • 鼠标移入事件 元素.onmouseover = function(){}移入元素盒子和移入元素都可以触发
    • 鼠标移出事件 元素.onmouseout = function(){}移出元素和元素盒子都可以触发
    • 鼠标移动事件 元素.onmousemove = function(){}
    • 鼠标移入事件2 元素.onmouseenter = function(){}只在移入元素时触发
    • 鼠标移出事件2 元素onmouseleave = function(){} 只在移入元素时触发
  5. 键盘事件(docoment.on键盘事件的事件类型 = function(){})

    • 键盘抬起事件 document.onkeyup = function(){}
    • 键盘按下事件 document.onkeydown = function (){}
    • 键盘按下抬起事件 document.onkeypress = function (){}
  6. 表单事件

    • 获得焦点事件 表单元素.onfocus = function(){}
    • 失去焦点事件 表单元素.onblur = fucntion(){}
    • 文本框内容改变事件 表单元素.onchange = function (){}
    • 文本框输入内容事件 表单元素.oninput = function(){}
  7. 事件传播

    • 在触发子元素的事件时,会将行为传播给父级的同类事件,在传递行为时,会将行为一直向上传递
    • 阻止事件传播:元素.stopPropagetion()
  8. 目标冒泡捕获

    • 冒泡: 事件传播时, 从目标开始传播, 一直到到父级, body...window
    • 捕获: 从最顶层开始, 逐层向下传递, 一直到 目标
    • addEventListener 第三个参数 默认值 为 false 代表传播方式 为 冒泡如果想改变传播方式为 捕获, 那么需要 将第三个参数传递为 true
    • myBody.addEventListener('click', function () { console.log('触发了 body 的点击事件') }, true)
  9. 事件委托。e.target: 触发事件的事件源

    • 为什么要用事件委托 动态的添加了 li 时, 新加的li没有绑定上事件, 需要动态添加完成后重新绑定事件, 这样操作比较麻烦 所以此时可以利用 事件委托
  10. 阻止默认事件

    • 点击了 a 标签, 但是因为有 return false 所以默认的跳转功能被拦截
    • 通过事件对象拦截 元素.preventDefault() 拦截之后, 取消了 a标签的默认跳转功能