Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

    • JavaScript语法

    • JavaScipt对象

    • JavaScript实例

    • JavaScript浏览器BOM

    • JavaScript DOM

      • DOM事件流

      • DOM操作

        • 获取元素
        • 事件基础
        • 操作元素
        • 节点操作
        • 节点操作
        • 高级事件
          • 高级事件
            • 2.删除事件
            • 3. DOM 事件流
            • 4.事件对象 event
            • 5.阻止事件冒泡
            • 6.事件委托(代理、委派)
            • 7.常用键盘事件
      • 事件对象

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • JavaScript
  • JavaScript DOM
  • DOM操作
HiuZing
2023-02-09
目录

高级事件

# 高级事件

1.传统方式(唯一性)

同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数

2.方法监听注册方式

同一个元素同一个事件可以注册多个监听器按注册顺序依次执行

// eventTarget.addEventListener(type,listener[,useCapture])
btns[1].addEventListener('click',function () {
  alert(2)
})

// eventTarget.attachEvent(eventNameWithOn,callback)
1
2
3
4
5
6

# 2.删除事件

/*
* 1、传统注册方式 eventTarget.onclick = null
* 2.方法监听注册方式 eventTarget.removeEventListener(type,listener[,useCapture])
* */

let divs = document.querySelectorAll('div')
divs[0].onclick = function () {
  alert(11)
  divs[0].onclick = null
}

divs[1].addEventListener('click',fn)
function fn(){
  alert(22)
  divs[1].removeEventListener('click',fn)
}

divs[2].attachEvent('onclick',fn1)
function fn1(){
  alert(33)
  divs[2].detachEvent('onclick',fn1)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 3. DOM 事件流

  1. 捕获阶段
  2. 当前目标阶段
  3. 冒泡阶段
// onclick attachEvent(ie)只能得到冒泡
// 如果addEventListener 第三个参数是true 那么处于捕获阶段
let son = document.querySelector('.son')
son.addEventListener('click',function () {
  alert('son')
},true)
// 如果addEventListener 第三个参数是false或忽略 那么处于冒泡阶段

// 有些事件没有冒泡 onblur onfocus onmouseenter onmouseleave
1
2
3
4
5
6
7
8
9

# 4.事件对象 event

// e.target 返回的是触发事件的对象(元素) e.target点击了那个元素,就返回那个元素
// this返回的是绑定事件的对象(元素) this那个元素绑定了这个点击事件 就返回谁

let ul = document.querySelector('ul')
ul.addEventListener('click',function (e) {
  // 我们给ul绑定了事件 this指向ul
  console.log(this)
  // e.target指向我们点击那个对象 谁触发了这个事件 我们点击的是li e.target指向的是li
  console.log(e.target)
})

// 了解 currentTarget ie678不认识

// 1.返回事件类型 e.type
// 2.阻止默认行为(事件) 让链接不跳转 提交按钮不提交
let a = document.querySelector('a')
a.addEventListener('click',function (e) {
  e.preventDefault()
  }
)
a.onclick = function (e) {
  // 普通浏览器
  e.preventDefault()
  // 低版本浏览器
  e.returnValue;
  // 我们可以利用return false也能阻止默认行为 没有兼容性
  return false
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 5.阻止事件冒泡

/*
* DOM stopPropagation
* 非标准 cancelBubble
* */
let son = document.querySelector('.son')
son.addEventListener('click',function (e) {
  alert('son')
  e.stopPropagation()
},true)
1
2
3
4
5
6
7
8
9

# 6.事件委托(代理、委派)

事件委托:不给每个子节点单独设置事件监听器 事件监听器设置在其父节点上 利用冒泡原理影响每个子节点

let ul = document.querySelector('ul')
ul.addEventListener('click',function (e) {
  e.target.style.backgroundColor = 'pink'
})

// contextmenu 禁用右键菜单
// selectstart 禁止鼠标选中
// client 窗口可视区
// page 文档页面
// screen 电脑屏幕

// 图片跟着鼠标移动
let pic = document.querySelector('img')
document.addEventListener('mousemove',function (e) {
  let x = e.pageX
  let y = e.pageY
  pic.style.left = x+'px'
  pic.style.top = y+'px'
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 7.常用键盘事件

// 键盘弹起
document.onkeyup = function () {
  console.log('我弹起了')
}
// keydown 键盘按下
// keypress 键盘按下(不识别功能键ctrl shift 左右键)

// keyCode 得到相对应的ASCII码 keyCode已禁用
document.addEventListener('keyup',function (e) {
  console.log('up'+e.key)
}) 

let con =  document.querySelector('.con')
let jd_input = document.querySelector('.jd')
jd_input.addEventListener('keyup',function () {
  if(this.value === ''){
    con.style.display = 'none'
  }else {
    con.style.display = 'block'
    con.innerText = this.value
  }
})

// blur 失去焦点
jd_input.addEventListener('blur',function () {
  con.style.display = 'none'
})

// focus 获取焦点
jd_input.addEventListener('focus',function () {
  if(this.value !== ''){
    con.style.display = 'block'
  }
})

// keydown和keypress在文本框里面,先执行里面的程序,字还没落里面,值取不过来
// keyup事件触发的时候,文字落入文本框里面
// 因此用keyup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
上次更新: 2024/08/14, 04:14:33
节点操作
onresize 事件

← 节点操作 onresize 事件→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式