事件监听、事件类型、高阶函数、排他思想

184 阅读3分钟

一、事件

1.什么是事件

事件是在编程时系统内发生的动作或者发生的事情,比如用户在网页上单击一个按钮。

2.什么是事件监听

就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为注册事件

语法

元素.addEventListener('事件',要执行的函数)

3.事件监听三要素

  • 事件源:哪个DOM元素被事件触发了,要获取DOM元素
  • 事件:用什么方式触发,比如鼠标单击click,鼠标经过mouseover等
  • 事件调用函数:要做什么事

4.事件监听

		//获取元素
		let btn = document.querySelector('.btn');
		//事件监听
        btn.addEventListener('click', function(){
            console.log('你好呀');
        })

注意:

1.事件类型要加引号

2.函数是点击之后再去执行,每次点击都会执行一次

5.事件类型

A.鼠标事件(鼠标触发)

click:鼠标点击

mouseover:鼠标经过

mouseleave:鼠标离开

B.焦点事件(表单获得光标)

focus:获得焦点

blur:失去焦点

C.键盘事件(键盘触发)

Keydown:键盘按下触发

Keyup:键盘抬起触发

D.文本事件(表单输入触发)

input:用户输入事件

二、高阶函数

高阶函数可以被简单理解为函数的高级应用,JavaScript 中函数可以被当成【值】来对待,基于这个特性实现函数的高级应用。

高阶函数的表达式和普通函数表达式并无本质上区别:

//函数表达式与普通函数本质是一样的
let counter = function(x,y){
return x+y
}
//调用函数
let result = counter(5,10)
console.log(result)

普通函数的声明与调用无顺序限制,推荐做法先声明再调用

函数表达式必须要先声明再调用

回调函数

如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数。

简单理解: 当一个函数当做参数来传递给另外一个函数的时候,这个函数就是回调函数

例:

function fn(){
console.log('我是回调函数')
}
//fn传递给了setInterval,fn 就是回调函数
setInterval(fn,1000)

box.addEventLinstener('click',function(){
console.log('我也是回调函数')
})

三、环境对象

环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境

作用:弄清楚this的指向,可以让我们代码更简洁

  • 函数的调用方式不同,this 指代的对象也不同
  • 【谁调用, this 就是谁】 是判断 this 指向的粗略规则
  • 直接调用函数,其实相当于是 window.函数,所以 this 指代 window

四、编程思想

排他思想

当前元素为A状态,其他元素为B状态

使用:

  1. 干掉所有人

    使用for循环

  2. 复活他自己

    通过this或者下标找到自己或者对应的元素

例:选美,有美女1到5号,选谁谁都的背景色改变

1649333623104.png

<!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>
        ul{
            display: flex;
            list-style: none;
        }
        li{
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <ul>
        <li>美女1号</li>
        <li>美女2号</li>
        <li>美女3号</li>
        <li>美女4号</li>
        <li>美女5号</li>
    </ul>
    <script>
        let lis = document.querySelectorAll('li')

        for (let index = 0; index < lis.length; index++) {
            lis[index].addEventListener('click',function(){
                for (let j = 0; j < lis.length; j++) { 
                //全部背景色全为白色          
                lis[j].style.backgroundColor = '#fff'                   
        }
                //选谁谁背景色改变
                this.style.backgroundColor = 'aqua'
            })                      
        }     
    </script>
</body>
</html>