js第十一天

attachEvent 事件监听方式

  语法:eventTarget.attachEvent(eventNameWithOn, callback)。

    eventNameWithOn:事件类型字符串,比如 onclick,onmouseover,这里要带 on。

    callback:事件处理函数,当目标触发事件时回调函数被调用。

删除事件

  传统方式

      eventTarget.onclick = null

  方法监听注册方式

      eventTarget.removeEventListener(type, listenet [, useCapture])。

        type:要移除什么类型的事件。

        listenet:移除哪个处理函数。

        注意:要用这个删除事件的话,绑定事件的时候不能用匿名函数,因为那样不能确定要解绑哪个处理函数。

    

 

 

 DOM 事件流

    事件流:它描述的是从页面中接收事件的顺序。事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。

    三个阶段:1、捕获阶段  2、当前目标阶段  3、冒泡阶段。

    

        

 

 

     注意

      1、js 代码中只能执行捕获或者冒泡其中的一个阶段。

      2、传统方式(如 onclick ) 和 attachEvent 只能得到冒泡阶段。

      3、addEventListener 的第三个参数如果是 true,表示在事件捕获阶段调用事件处理函数;如果是 false(默认为 false),表示在事件冒泡阶段调用事件处理程序。

 事件对象

  eventTarget.onclick = function( event ){  }

    1、event 就是一个事件对象,它写到侦听函数的小括号里当做形参来看。

    2、事件对象只有有了事件才会存在,它是系统自动创建的,不需要传递实参。

    3、事件对象是事件一系列相关数据的集合。比如鼠标触发事件的坐标,用户按下键盘上的哪个键。

      

 

 

 

  事件对象常见的属性方法

事件对象的属性 说明
e.target 返回触发事件的对象  标准
e.srcElement 返回触发事件的对象  非标准,ie6-8使用
e.type 返回事件的类型,比如click、mouseover,不带on
e.cancelBubble 该属性阻止事件冒泡,非标准,ie6-8使用
e.returnValue 该属性阻止默认事件(默认行为),非标准,ie6-8使用,比如不让链接跳转
事件对象的方法 说明
e.preventDefault() 该方法阻止默认事件(默认行为),标准,比如不让链接跳转
e.stopPropagation() 阻止冒泡,标准

  target 和 this 的区别

    target:返回的是触发事件的对象。

    this:返回的是绑定事件的对象。

阻止事件冒泡

  标准写法:利用事件对象里的 stopPropagation() 方法。

  非标准写法:IE6-8 利用事件对象 cancelBubble 属性。

  <div id="father">
    <div id="son">
      子盒子
    </div>
  </div>
  <script>
    let fa = document.querySelector('#father')
    let so = document.querySelector('#son')
    so.addEventListener('click', function (e) {
      console.log('子盒子的点击事件');
      e.stopPropagation()
    }, false)
    // 父盒子
    fa.addEventListener('click', function (e) {
      console.log('父盒子的点击事件');
      e.stopPropagation()
    }, false)
    document.addEventListener('click', () => {
      console.log('document的点击事件');
    })

  </script>

事件委托

  事件委托的原理:不是每个子节点单独设置事件监听器,而是事件监听器设置在父节点上,然后利用冒泡原理影响设置每个子节点。

  事件委托的作用:只操作了一次 DOM,提高了程序的性能。

  <ul>
    <li>li标签</li>
    <li>li标签</li>
    <li>li标签</li>
    <li>li标签</li>
    <li>li标签</li>
  </ul>
  <script>
    let ul = document.querySelector('ul')
    ul.addEventListener('click', (e) => {
      for (let i = 0; i < e.target.parentNode.children.length; i++) {
        e.target.parentNode.children[i].style.backgroundColor = ''
      }
      e.target.style.backgroundColor = 'cyan'
    })
  </script>

 常用的鼠标事件

  1、禁止鼠标右键菜单

    contextmenu:主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单。

  2、禁止鼠标选中

    selectstart:鼠标开始选中时触发。

  3、鼠标移动事件

    mousemove:鼠标移动时触发。

  鼠标事件对象

鼠标事件对象 说明
e.clientX 返回鼠标相对于浏览器窗口可视区的 X 坐标
e.clientY 返回鼠标相对于浏览器窗口可视区的 Y 坐标
e.pageX 返回鼠标相对于文档页面的 X 坐标 IE9+ 支持
e.pageY 返回鼠标相对于文档页面的 Y 坐标 IE9+ 支持
e.screenX 返回鼠标相对于电脑屏幕的 X 坐标
e.screenY 返回鼠标相对于电脑屏幕的 Y 坐标

    

 

 常用的键盘事件

  常用的键盘事件

键盘事件 触发条件
onkeyup 某个键盘按键被松开时触发。
onkeydown 某个键盘按键被按下时触发。
onkeypress 某个键盘按键被按下时触发,但是它不识别功能键,比如 ctrl shift 箭头等。

  

 

  这三个事件的执行顺序:keydown --> keypress --> keyup。

  键盘事件对象

    

    keyCode:返回按下的键的ASCLL值

 BOM 浏览器对象模型

  BOM:即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的效果,其核心对象是 window

  window 对象是浏览器的顶级对象,它具有双重角色。

      1、它是 JS 访问浏览器窗口的一个接口。

      2、它是一个全局对象。定义全局作用域中的变量、函数都会成为 window 对象的属性和方法。调用的时候可以省略 window。window 下有一个特殊的属性 -- window.name。

  页面加载事件

    window.onload 是页面加载事件,当文档内容完全加载完成后会触发该事件(包括图像、脚本文件、css文件等)。

  <script>
    window.addEventListener('load', () => {
      let btn = document.querySelector('button')
      btn.addEventListener('click', () => {
        alert('弹框')
      })
    })
  </script>
  <button>点击弹框</button>

  document.addEventListener(' DOMContentLoaded ', () => {  }):等 DOM 加载完毕之后触发,不包含图片、css 等。加载的比 onload 快。

  调整页面窗口大小事件

    window.onresize 是调整窗口大小加载事件,当触发时就调用的处理函数。

  <style>
    div {
      width: 300px;
      height: 300px;
      background-color: cyan;
    }
  </style>
  <div></div>
  <script>
    let box = document.querySelector('div')
    window.addEventListener('resize', () => {
      if (window.innerWidth <= 600) {
        box.style.display = 'none'
      } else {
        box.style.display = 'block'
      }
      console.log(window.innerWidth);
    })
  </script>

 

posted @ 2022-04-11 10:22  守鹤  阅读(70)  评论(0编辑  收藏  举报