dom事件-基础
事件
介绍:
事件是在编程时系统内发生的动作或者发生的事情;
我的理解:用户对一些DOM元素的操作就为事件,比如:点击DOM元素、鼠标移入DOM元素等。
-----假如网页是静态的,就是网页对我们的点击元素或者其他什么操作没有对应的反应(比如字体变颜色、切换图片)时,我们会不会对这样的上网感到很没劲,我想答案是肯定的。那么事件监听就是来解决这一问题的,配置事件监听可以对事件设置执行函数,其中,函数我们可以理解为效果。也就是设置事件效果,既如此上面那个问题就解决了。
事件监听(注册事件)
介绍&原理:
事件监听:就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为注册事件。
作用:
实现用户与网页的交互,使网页内容变为动态可变。
语法:
元素.addEventListener('事件',要执行的函数)
使用例子:
<body>
<button>提交</button>
<script>
// 获取dom元素button
let but1 = document.querySelector('button')
//对button对象设置点击事件;每点击一次按钮,就执行一次函数
but1.addEventListener('click', function () {console.log('别,还是留给别人吧') })
</script>
</body>
效果如下:
监听三要素:
- 事件源: 哪个dom元素被事件触发了,要获取dom元素;
- 事件: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等;
- 事件调用的函数: 要做什么事。
注意:
- 事件类型要加引号;
- 函数是“点击”之后再去执行,每次“点击”都会执行一次。
事件监听版本
1、DOM L0(第一个版本)
语法:
-
写在js里:事件源.on事件 = function() { 代码.. }
例子:
<body> <button>提交</button> <script> // 获取dom元素button let but1 = document.querySelector('button') //对button对象设置点击事件;每点击一次按钮,就执行一次函数 but1.onclick=function () {console.log('别,还是留给别人吧') } </script> </body>效果:
-
写在行内 ('引号里的内容可以不为函数'):
-
<button on事件类型="函数名()">点击< /button>
例子:
<body> <!-- 在标签里直接注册事件 --> <button onclick="names()">提交</button> <script> // 定义函数 function names() { console.log('别,还是留给别人吧') } </script> </body>效果:
-
<button on事件类型="要执行的代码">点击 < /button>
例子:
<body> <!-- 在标签里直接注册事件 --> <button onclick="console.log('别,还是留给别人吧')">提交</button> </body>效果和上面的一样。
-
注意:
- 在JS里一个事件类型,不能绑定多个处理函数;
- 在行内注册事件,可以一个事件类型绑定多个处理函数。
2、DOM L2(现在在用)
语法:
事件源.addEventListener('事件', 事件处理函数)
注意:
在JS里一个事件类型,可以绑定多个处理函数。
两个版本的区别
1、就写js里的而言:新版本在JS里一个事件类型,可以绑定多个处理函数;而老版本的不行,它只会执行最后面的函数,前面的会被覆盖。如:
<body>
<!-- 老版本事件触发按钮 -->
<button class="but1">提交1</button>
<!-- 新版本事件触发按钮 -->
<button class="but2">提交2</button>
<script>
// 获取dom元素button
let but1 = document.querySelector('.but1')
let but2 = document.querySelector('.but2')
//老版本,一个事件类型绑定多个处理函数
but1.onclick = function () { console.log('老版本') }
but1.onclick = function () { console.log('老版本') }
but1.onclick = function () { console.log('我是老版本') }
//新版本,一个事件类型绑定多个处理函数
but2.addEventListener('click', function () { console.log('我是新版本') })
but2.addEventListener('click', function () { console.log('我是新版本') })
but2.addEventListener('click', function () { console.log('我是新版本') })
</script>
</body>
两个按钮各点击两次,效果如图
2、老版本里行内的写法不推荐,它没有实现结构与行为分离,而且函数内容写多了会影响代码的可读性。
常用事件类型
- 鼠标事件(鼠标触发)
- click---鼠标点击;
- mouseenter---鼠标经过;
- mouseleave---鼠标离开;
- mousemove---鼠标移动。
- 焦点事件(例:表单获得光标)
- focus---获得焦点;
- blur---失去焦点。
- 键盘事件(键盘触发)
- keydown---键盘按下触发;
- keyup---键盘抬起触发。
- 文本事件(例:表单输入触发)
- input---用户输入事件。
环境对象(this)
介绍:
环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境。
我的理解:环境变量是指向调用这个函数的对象。
作用:
弄清楚this的指向,可以让我们代码更简洁
使用方法:
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<style>
div {
width: 200px;
height: 200px;
background-color: skyblue;
}
</style>
</head>
<body>
<div></div>
<script>
//获取dom元素div
let div = document.querySelector('div')
// 设置div点击事件
div.addEventListener('click', function () {
// 引用this修改div文本,this指向div对象
this.innerText = '我是this'
})
</script>
</body>
</html>
效果:
注意:
1、函数的调用方式不同,this 指代的对象也不同;
2、【谁调用, this 就是谁】 是判断 this 指向的粗略规则;
3、直接调用函数,其实相当于是 window.函数,所以 this 指代 window。
拓展:
总结
我的思维导图day2