事件的基本使用

212 阅读5分钟

概念

事件: 是在编程时系统内发生的动作或者发生的事情

事件监听:检测事件的发生,一旦触发则调用执行函数作响应

事件是在编程时系统内发生的动作或者发生的事情——系统会在事件出现时产生或触发某种信号,并且会提供一个自动加载某种动作(列如:运行一些代码)的机制

PS:其在IE中并非使用e作为参数对象,而是将事件作为window对象的event属性

语法

//添加事件
domObj.addEventListener('触发事件',function)
//addEventListener方法传递参数方法:二次封装
domObj.addEventListener('触发事件',function(event对象固定参数,自定义参数){
    //真正的执行函数
    function(param,param····)
})

onEvent方法

//行内方式
<p onclick="fun()"></p>
//行内自调用函数声明作参
<p onclick="(function fun())()" 
//dom对象的事件属性方式
let pDom = document.querySelector('p')
pDom.onclick = function fun(){}

事件属性版本区别

onEvent方式:

1、同一触发方式只能绑定一个事件,后事件覆盖前事件

addEventListener方式:

1、可以绑定多个同响应方式事件

事件触发时间参数:事件捕获、事件冒泡

三要素:

//事件源:被监听的dom元素
//事件:触发方式
//执行函数(调用函数):要做什么事
事件触发方式:查表!!!
事件监听版本:

DOM L0 :dom.onevent = function(){}

DOM L1:于1998年10月1日,Web3推荐

DOM L2:dom.addEventListener('event',function(){})

DOM L3:在2基础行重新定义是事件,添加新事件类型

常用事件:

鼠标事件:

//click 鼠标点击
dom.addEventListener('click',function)
//mouseenter 鼠标经过
dom.addEventListener('mouseenter',function)
//mouseleave 鼠标离开
dom.addEventListener('mouseenter',function)

焦点事件:

//focus 获得焦点
dom.addEventListener('focus',function)
//blur 失去焦点
dom.addEventListener('blur',function)

键盘触发:

//键盘按下 Keydown
//获取的是当前按下的键值
dom.addEventListener('keydown',function)
//键盘抬起 Keyup
//获取的是上一次按下的键值
dom.addEventListener('keyup',function)

1、需要焦点聚焦才可生效

2、确认键的使用:回车为13,,空格为32

3、注意keydown、input、keyup等事件的执行顺序

let keyEvent = function(e){
    if(e.which == 13){
        //
    }
}

文本事件:

事件触发方式多:

除上面外,还有,input(内容改变触发)、change(内容改变触发同时失焦时触发,验证器)、focus、blur

文件表单元素,通过change判断事件是否触发

<input type='file'>

#### 高级函数

原理:

JavaScript中函数可以被当成来处理,基于这个特性完成高级函数

函数表达式

函数表达式本质与普通函数无区别

let funValue function(a,b){return a+b}
//funValue()即为表达式
console.log(funValue(1,3))

普通函数的声明与调用无顺序要求,只是推荐声明再调用

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

回调函数

定义:将函数A作为参数给函数B,则称函数A

常见案例:定时器,监视器,匿名函数(箭头函数)

PS:

1、JS是单一线程的,无法并行处理

2、JS用异步函数来解决线程阻塞

3、异步函数因为处理时间不确定,所以无法返回值

4、异步函数通过回调方式return执行结果,解决无法返回值问题

环境对象(this)

定义:

函数内置变量 this ,它代表当前函数运行时所处的环境

指向问题:

很复杂,在面向对象中,this指代本身对象,是一个引用

但在JavaScript中,this随执行环境的改变而改变

//1、方法中,this表示该方法所属对象,即上级对象//2、单独使用,指代全局对象,在浏览器中就是window,严格模式下位Global//3、在函数中,this 表示全局对象,因为独立定义函数上级对象位window。//4、在函数中,在严格模式下,this 是未定义的(undefined)。//5、在事件中,this 表示接收事件的元素,即事件源//6、类似 call() 和 apply() 方法可以将 this 引用到任何对象。
//当我们使用 person2 作为参数来调用 person1.fullName 方法时, this 将指向 person2, 即便它是 person1 的方法
person1.fullName.call(person2);

编程思想

排他思想

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

实现思路

1、所有元素设B :遍历

2、自己单独设置:通过this或者下标找到自己或者对应元素

案例
<!--使li标签变红-->
<style>
    .blue{
        text-color:blue
    }
</style>
<body>
    <li class='blue'>李彪啊</li>
    <li class='blue'>李彪啊</li>
    <li class='blue'>李彪啊</li>
    <li class='blue'>李彪啊</li>
</body>
<script>
    //获取元素
    let liList = document.querySelectorAll('li')
    //先清除所有样式
    for(let i=0;i<liList.length;i++){
        //remove类,只是单个指定去除
        liList[i].classList.remove('blue')
        //全部清除?
        liList[i].className=''
    }
    //单独设置
    
</script>

评测反思:

1、事件可以通过用户交互来自动触发,也可以通过代码主动触发

  // 不通过鼠标,自动 mouseenter 事件。其他事件也类推。
    let  ev = new Event("mouseenter");
    btn.dispatchEvent(ev);
//on方式
dom.click()
dom.onclick()

2、事件对象拥有兼容性,但各浏览器获取事件的方式不一样

事件对象里面包含着与事件触发时的相关一切信息?

事件对象任何浏览器都支持,只是支持方式不一样?

事件只要触发就产生一个事件对象

答:触发时间时,会封装产生为一个事件对象(event object),其包括所有与事件有关的属性和方法,并作为第一个参数传递给监听函数

3、addE设置的事件不会自动触发、,可以绑定过多个同名事件。IE678存在兼容问题,

4、点语法不能完全获取和赋值元素上的所有属性,通过参数传递属性名的情况点语法无法解决