JavaScript事件

一、事件概述
(1) 认识事件
事件Event,描述了根据用户在网页中的操作行为,执行一定的功能的操作过程
(2) 事件的绑定
网页中事件的绑定方式,常见的有三种:

  • 标签属性绑定
  • JavaScript对象属性绑定
  • 标准事件绑定函数addEventListener
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>事件绑定方式</title>
</head>
<body>
  <h3>1、标签绑定</h3>
  <!-- 
    通过标签的事件属性,指定一个执行函数
    当指定的事件发生时,对应的函数就会执行
    onclick 单击事件
    当用户点击了当前按钮,对应的hanlder()函数就会执行
    注意:不能同时绑定多个事件函数;只有第一个会生效
  -->
  <button onclick="handler()"
          onclick="handler2()">点击我试试</button>
  <h3>2、对象绑定方式</h3>
  <button id="btn">对象来了</button>
  <h3>3、事件标准绑定方式</h3>
  <button id="my-btn">标准语法来了</button>
  <script>
    // 1-1 事件处理函数
    function handler() {
      alert("你点我干吗,今天又不休息!!!")
    }
    function handler2() {
      alert("没有关系,今天已经周三了..")
    }
    // 2-1 对象绑定函数
    var _btn = document.getElementById("btn")
    // 通过对象的事件属性,给事件添加一个处理函数
    // 事件名称,大小写敏感(不能写错onClick 和onclick是两个不同的东西)
    // 不能同时绑定多个事件处理函数
    // 如果写了多个事件处理函数,最后一个生效(解释型特点)
    _btn.onclick = function() {
      alert("还有两天本周又结束了...")
    }
    _btn.onclick = function() {
      alert("提前祝大家周末愉快...")
    }
    // 3-1 标准事件绑定方式
    var _myBtn = document.getElementById("my-btn")
    // 通过固定函数,给标签对象绑定事件
    // addEventListener: add 增加  Event 事件 Listener 监听
    // 标准语法下:事件名称不需要添加on单词,单击事件click
    // 标准语法下:可以给一个标签对象,添加多个相同事件
    _myBtn.addEventListener("click", function() {
      alert("本周学习目标:语法进阶")
    })
    _myBtn.addEventListener("click", function() {
      alert("本周锻炼:开始出现自己的编程思路")
    })
  </script>
</body>
</html>

(3) 事件的取消
① 对象属性绑定的事件,取消

_btn.onclick = function() {...}
// 取消事件
_btn.onclick = null

② 标准语法绑定事件,取消

function handler() {
  // 事件处理函数
}
// 绑定事件
_btn.addEventListener("click", handler)

// 取消指定事件
_btn.removeEventListener("click", handler)

(4)this关键字

// 1、全局函数中的this,指向浏览器窗口对象
function fn() {
  // 普通声明的函数,this指向的是浏览器窗口对象Window
  console.log("this:", this)
}
// 函数的调用
// fn()
// window.fn()
// 以前弹窗
// alert("这是一个弹窗")
// window.alert("这是一个浏览器弹窗")

// 2、事件函数
var _btn = document.getElementById("btn")
_btn.onclick = function() {
  // 事件操作函数中,this指向当前操作标签
  console.log("事件函数this:", this)
}
// 3、标准语法
var _btn2 = document.getElementById("btn2")
_btn2.addEventListener("click", function() {
  // 事件函数中,this指向的是当前操作标签
  console.log("addEventListener this:", this)
})

(5) 常见网页事件

事件 名称 描述
onclick 单击事件 鼠标左键点击
ondblclick 双击事件 鼠标左键双击
onmouseenter 鼠标进入 鼠标光标从元素外移动到元素上
onmouseover 鼠标悬浮 鼠标光标在目标元素上
onmouseleave 鼠标离开 鼠标光标从元素上移动到元素外
onkeydown 按键按下 键盘上任意按键,按下时触发
onkeyup 按键抬起
oncopy 复制
oncut 剪贴
onparse 粘贴
onload 网页加载 网页第一次在浏览器中加载,加载完成时触发
onscroll 滚动条 网页中滚动条滚动时触发
onresize 窗口尺寸变化 浏览器可视窗口大小发生变化时触发

鼠标事件

image.png

键盘事件
image.png

触摸事件
触摸touch事件 说明
touchstart 手指触摸到一个 DOM 元素时触发
touchmove 手指在一个 DOM 元素上滑动时触发
touchend 手指从一个 DOM 元素上移开时触发
表单事件
image.png

过渡事件
过渡事件 触发条件
ontransitionend 在过渡完成时触发
动画事件
动画事件 触发条件
onanimationend 在动画结束播放时触发
onanimationiteration 在动画重复播放时触发
onanimationstart 在动画开始播放时触发
(6) 事件对象[重点]
① 什么是事件对象?
事件对象event,描述了一个正在发生的事件行为!可以在事件的处理函数中直接获取到并通过事件对象操作某些数据!
② 如何获取事件对象

<body>
  <button onclick="fn()">获取事件对象</button>
  <script>
    // 添加一个单击事件
    // 如果没有给事件函数传递参数,默认第一个参数就是事件对象
    function fn(e) {
      // 事件对象,存在兼容性问题,获取的时候需要判断赋值
      var e = e || event
      console.log("事件对象:", e)
    }
</script>
</body>

③ 事件对象的重要属性

属性 描述
altKey 操作事件时有没有按下Alt按键
ctrlKey 操作事件时有没有按下Ctrl按键
shiftKey 操作事件时有没有按下shift按键
clientX / clientY 鼠标指针 相对于 浏览器可视窗口左上角定位
pageX / pageY 鼠标指针 相对于 网页文档 左上角定位
offsetX / offsetY 鼠标指针 相对于 操作的标签 左上角的定位
screenX / screenY 鼠标指针 相对于 电脑屏幕 左上角的定位
layerX / layerY 了解、鼠标指针相对于 定位父元素/body 左上角的定位
x / y 了解,鼠标指针相对于 父文档 左上角的定位

④ 事件执行过程[3个阶段]
原生JavaScript语法中,规范了事件的执行过程,区分为三个阶段

  • 捕获阶段:查询那个目标标签被点击
  • 目标阶段:被操作的标签上事件触发,并执行对应的函数
  • 冒泡阶段:标签上的事件触发完成,将事件继续向父标签传递,一直到根标签
    ⑤ 事件-阻止冒泡
    实际项目开发中,事件的冒泡是一个很重要的功能,但是在某些特效中需要阻止冒泡:也就是具体目标元素上的事件一旦触发,不允许事件继续向上冒泡,会影响网页特效
    原生JavaScript中提供了阻止冒泡的语法,通过事件对象进行操作:
// 固定语法
if(event.stopPropagation) {
  event.stopPropagation()  // 通用阻止事件冒泡的方式
} else {
  event.cancelBubble = true  // 兼容IE系列浏览器阻止冒泡的方式
}

⑥ 事件-阻止默认行为
给超链接标签,添加单击事件;发现事件触发的同时页面也发生了跳转;
项目中的某些特效开发过程中,需要这样的行为按照代码执行逻辑发生,而不是跟随标签自动产生!
原生JavaScript语法中,提供了阻止默认行为的操作方式:

if(e.preventDefault) {
  e.preventDefault()            // 传统浏览器阻止标签默认行为
} else {
  e.returnValue = false   // IE系列浏览器阻止标签默认行为
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • 基本概念 事件是一些特定动作发生时所发出的信号,JavaScript中的事件是可以被 JavaScript 侦测到...
    Zd_silent阅读 453评论 0 1
  • 事件在DOM结构中传播的顺序叫事件流,分三个阶段:事件捕获、事件发生、事件冒泡 现代浏览器事件冒泡一直冒到wind...
    冬瓜不削皮阅读 309评论 0 0
  • 鼠标事件在DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般是左边的按钮)或按下回车键时...
    浩瀚_null阅读 258评论 0 1
  • 1. 鼠标事件 在DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般是左边的按钮)或按下...
    MaterialCoder阅读 4,149评论 0 3
  • 17. 事件处理 异步事件驱动编程模型事件类型只是一个字符串如:‘mouseover’,‘keydown’之类的,...
    寿_司阅读 423评论 0 0