为了转生而点技能-JavaScript,day26(Event初探

Event(事件):当满足触发事件的条件时,会触发设定好的事件,并执行触发後的动作。

目标.addEventListener:("Event reference",function(e){},options)

1.目标: 选择想要触发的标签或是css选择器。
2.Event reference
3. function(e){}
4. options




目标.addEventListener:("Event reference",function(e){},options)

1.目标
2.Event reference:为触发的事件类型,又分为标准事件非标准事件,标准事件是由官方的 Web 标准规范中所定义,且应适用於所有的浏览器。
3. function(e){}
4. options



目标.addEventListener:("Event reference",function(e){},options)

1.目标
2.Event reference
3. function(e){}:触发後的动作。
参数e:为捕捉滑鼠触发当下的资讯(物件型态)如下图,如果想要获得相关资讯(属性),以e.属性即可。
https://ithelp.ithome.com.tw/upload/images/20211224/20143762szIuQjRyyZ.jpg
4. options



目标.addEventListener:("Event reference",function(e){},options)

1.目标
2.Event reference
3. function(e){}
4. options:选择性输入,参数有以下三种

  • capture-Boolean 型别,送出true的话就是浏览器会使用Capture方式,false的话是Bubbling,只有在特定状况下才会有影响,通常建议是false。

    false,那就会使用bubbling,他是从内而外的流程,所以会先执行蓝色元素的click事件再执行红色元素的click事件。
    true,那就是capture,和bubbling相反是由外而内,会先执行红色元素的click事件才执行蓝色元素的click事件。
  • once-Boolean 型别,用途就像是 jQuery 的one一样。
  • passive-Boolean 型别,用途是告诉浏览器,这个事件 handler function 会不会呼叫event.preventDefault来停止浏览器的原生行为。
let el = document.querySelector("a");
let passive = {
    passive: true               //true会使浏览器出现报错讯息,再执行後面的动作
};
el.addEventListener("click", function (e) {
    e.preventDefault();
    console.log('连结成功失效');
}, passive);

https://ithelp.ithome.com.tw/upload/images/20211226/20143762WNImUGWUA1.jpg


//透过document.querySelector选定目标(css选择器或是标签都可以)
let el = document.querySelector(".button");
let input = document.querySelector(".span");


el.addEventListener("click", function (e) {
    input.textContent = '已点击';
});

可以利用chorme的开发者工具来看是有否绑定。
https://ithelp.ithome.com.tw/upload/images/20211224/20143762LMm7gmqzIz.jpg


e.target:用来获取触发当下的资料,也就是function (e)的参数e的资料。

例子1:

let el = document.querySelector(".button");
let input = document.querySelector(".span");
el.addEventListener("click", function (e) {
    console.log(e.target);
});

https://ithelp.ithome.com.tw/upload/images/20211224/20143762R8UANH61yt.jpg


例子2:

let el = document.querySelector(".button");
let list = document.querySelector(".list");
console.log(list);
list.addEventListener("click", function (e) {
    console.log(e.target);
});

https://ithelp.ithome.com.tw/upload/images/20211224/20143762T8lbUPWKSL.jpghttps://ithelp.ithome.com.tw/upload/images/20211224/20143762DfV6B4e2Os.jpg

在例子2中,因为可以侦测点击的范围变大
当点击第1点的空白处时会出现下图:
https://ithelp.ithome.com.tw/upload/images/20211224/20143762csN41EIxTa.jpg
当点击第2点的空白处时会出现下图:
https://ithelp.ithome.com.tw/upload/images/20211224/20143762f1vBrA1hn1.jpg

可以利用e.target.nodeName来进行进一步取的事件触发当下的DOM位置:

从chrome可以观察到下列资讯
https://ithelp.ithome.com.tw/upload/images/20211226/20143762WeMZ1PgtBE.jpg

https://ithelp.ithome.com.tw/upload/images/20211226/20143762euLwXx01aW.jpg

let list = document.querySelector(".list");
list.addEventListener("click", function (e) {
    console.log(e.target.nodeName);             //呈现滑鼠点击事件的DOM节点(值)
    if (e.target.nodeName == "LI") {
        alert("没点到按钮唷");
    }
    if (e.target.nodeName == "INPUT") {
        alert("恭喜,点到按钮了");
    }
});

参考文章:

  1. O3noBLOG:addEventListener 的第三个参数:https://blog.othree.net/log/2007/02/06/third-argument-of-addeventlistener/
  2. O3noBLOG:addEventListener 的第三个参数(2):https://blog.othree.net/log/2019/03/20/third-argument-of-addeventlistener-2/

<<:  django新手村3 -----models 一对多

>>:  STM32开发笔记02---新建库函数工程

[Day08] Flutter with GetX image_cropper 照片裁切

承袭上一篇 Image_picker 这篇使用image_cropper 把选到的照片做裁切或旋转等...

Day 29 : 撰写LineBot,利用短短三天认识自动化机器人(下)

今天来继续接着昨天的LineBot。我们昨天讲到,我们可以使用ngrok来让程序连上公开网路,也就是...

Day13:终於要进去新手村了-Javascript-判断式基本结构-if…else

今天要来提到的是判断式的部分,在JS中判断式有两种语法:if...else和 switch。 这篇我...

Day 17:图与演算法

有一些演算法是在图(graph)上操作,我们可以先想一些实际的例子,例如: 开车的时候,使用导航系统...

28. 解释 CSS Box Model ( box-sizing )

今天也是复习CSS,是非常之基础的box-sizing。 Box Model 前一篇文提到,HTML...