JS-事件

事件基础

概念

事件就是指用户 和 界面之间 所交互的时候做出的一系列反应,比如点击,键盘输入,鼠标移动,滚轮等…

DOM中的事件,实际上就是指给元素设置一个事件的侦听器,因为事件在js中其实是一直存在的,这是使我们没有进行监听,或者做出后续反应,所以没有实际效果。

侦听器:监听我们做出的交互动作,监听到动作之后我们就能通过代码做出一定的响应。

例子:点击一个按钮输出一个hello

var btn = document.getElementById('btn')
btn.onclick = function(){
    consolo.log('hello')
}

上述代码中的 function,不需要手动调用,就是当侦听器侦听到点击事件的时候才调用这个function,

事件的三要素

  1. 事件源:绑定事件的元素(标签)
  2. 事件类型(动作):比如、点击、鼠标移入、键盘按下…
  3. 事件处理函数:事件触发后进行的额外操作

事件处理程序

  • html 事件处理程序(非标准DOM0)

  • DOM0级 事件处理程序

  • DOM2级 事件处理程序

html事件处理程序

<!-- <button onclick="console.log('这个按钮被点击了')">按钮</button> -->
<button onclick="btnClick()">按钮</button>
<button id="btn" onclick="alert('被点击了')">按钮2</button>
<script>
    function btnClick(){
    console.log('这个按钮被点击了')
}
</script>

缺点:html和js代码没有分离,不方便后期维护。

取消事件(删除onclick属性)

var btn=document.getElementById("btn")
btn.removeAttribute("onclick")

DOM0级事件处理程序

<button id="btn" >按钮</button>

<script>
    var btn = document.getElementById('btn')
    btn.onclick = function(){
        console.log('按钮被点解了')
    }
</script>

优点:

  1. js和html代码分离,方便维护
  2. 兼容性好:ie也可以兼容

缺点:

  1. 一个元素无法绑定多个事件

移除该点击事件:

btn.onclick = null

DOM2级事件处理程序

<button id="btn" >按钮</button>

<script>
    var btn = document.getElementById('btn')
//addEventListener()添加事件监听器
    btn.addEventListener('click',function(){
        console.log('这个按钮被点击了')
    })
</script>

优点:

  1. js和html代码分离,方便维护
  2. 一个元素可以添加多个事件响应

缺点:

  1. 兼容性不好 ie8及以下不兼容

取消点击事件

var btn = document.getElementById('btn')
function func(){
    console.log('1、这个按钮被点击了')
}
//绑定点击事件
btn.addEventListener('click',func)
//取消点击事件
btn.removeEventListener('click',func)

事件类型

鼠标事件

事件类型说明
click单击事件
dblclick双击事件
mousedown鼠标按下时触发
mouseup鼠标松开时触发
mouseover鼠标移入时触发
mouseout鼠标移出时触发
mouseenter鼠标移入时触发
mouseleave鼠标移出时触发
mousemove鼠标移动时
window.onscroll滚动条事件

说明:

mouseovermouseout :当我们事件添加到父节点身上时,除了父节点以外,子元素也会触发事件;

mouseentermouseleave :当我们事件添加到父节点身上时,就只有父节点才能触发该事件;

键盘事件

事件类型说明
keydown键盘按下时(按下时会一直触发)
keyup键盘按键松开时
keypress按住键盘时(按下时会一直触发)

表单事件

事件类型说明
focusinput获取到焦点的时候
blurinput失去焦点的时候
changeinput中的值最后发生改变后触发
input输入框内容发生改变时

事件流

基本概念

概念:

当一个元素触发一个事件的时候,会产生一个事件对象,该事件对象会在元素本身与window对象之间流动的方向。

第一个阶段:事件捕获【netspace】

事件对象从最顶层window对象一层一层往里传递,直到元素本地

image-20221102150325495

第二阶段:目标阶段 【到达元素】

第三阶段:事件的冒泡

事件对象从元素本身,一层一层外外面进行冒泡动作,直到window结束

image-20221102150626883

事件的触发:

事件的产生【对某个元素做了一些操作】—事件对象就已经产生了

至于会不会触发一些动作,需要看元素的监听器

对元素绑定监听:

DOM0:事件冒泡

DOM2:addEventListener(“事件名”,函数,布尔类型的值); //第三个参数 是否在捕获阶段触发 默认是false

如果一个事件对象经过该元素的时候,该元素上有对应的监听器,同时监听器监听的事件类型刚好跟当前的事件类型匹配,触发监听函数。

事件对象的操作

事件对象

在页面上触发事件,事件对象就产生了。该事件对象包含了事件的所有信息。

事件对象的获取

方式一:事件监听函数触发的时候,浏览器会将该事件以第一个参数传递给监听函数

方式二:在监听函数中,通过window.event

// var e1 = null; //该函数中使用的事件对象
// if(e){
//     e1 = e;
// }else{
//     e1 = window.event;
// }
var e1 = e || event;

事件对象中常见的属性及其使用

preventDefault—值是一个方法:作用:阻止元素的默认行为

应用场景:

a 作为按钮使用

方式一: e1.preventDefault();

方式二:在a标签上href 值:javascript:void(0)

form表单中

    <!-- form表单默认行为  1.提交数据 2.跳转地址 action的地址
        以后使用form 主要使用 组件【单选框 多选框  文本....】
        提交--- ajax
        页面跳转--不希望发生
    -->
    <form action="http://www.baidu.com" method="get">
       用户名 <input type="text" name="uname" id="uname">
       <input type="submit" value="提交">
    </form>

    <script>
        document.querySelector("form").addEventListener("submit",function(){
            event.preventDefault();
           console.log("表单提交了");
        });

target

srcElement

作用:表示事件源

事件的委托:

将自身事件委托给其他元素【委托的元素必须有层级关系===事件的委托底层是基于事件的冒泡】

针对动态添加的元素【JS代码动态的渲染上去的元素】

直接绑定事件:直接在元素上绑定

 let stra = `<a href="javascript:void(0)" οnclick="getPageNum()">${i}</a>`;

事件的委托:将元素委托给在页面上存在的离他最近的祖先元素

document.querySelector(".nav").onclick = function(){
    //console.log("被点击了....");
    //获取被点击的元素的innerText 。此时事件是绑定给父元素的  但是由于冒泡 子元素会触发到父元素的事件
    if(event.target.nodeName=="A"){ //nodeName获取元素的名字  在进行委托时候 因为i事件绑定给父元素的,所有判断一下事件是在哪个元素触发的。
        console.log(event.target.innerText); //事件委托
    }
}   

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值