前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript小技能:事件

JavaScript小技能:事件

作者头像
公众号iOS逆向
发布2022-08-22 13:10:58
1.4K0
发布2022-08-22 13:10:58
举报
文章被收录于专栏:iOS逆向与安全

引言

事件能为网页添加真实的交互能力,它可以捕捉浏览器操作并运行相关代码做为响应。

I 预备知识

1.1 箭头函数

代码语言:javascript
复制
const add = (num1, num2) => num1 + num2;
//`匿名函数`: 因为它没有名字,匿名函数还有另一种我们称之为`箭头函数`的写法,箭头函数使用` () => `代替 `function ()`:

1.2 事件模型

JavaScript 在不同环境下使用不同的事件模型:不同的编程环境下的事件机制是不同的,比如JavaScript 网页上的事件机制不同于在其他环境中的事件机制。(Node.js 的事件模型、浏览器插件WebExtensions技术的事件模型)

1.3 事件冒泡及捕获

当一个事件发生在具有父元素的元素上时,浏览器运行两个不同的阶段 - 捕获阶段和冒泡阶段

在现代浏览器中,默认情况下,所有事件处理程序都在冒泡阶段进行注册。

  1. 捕获阶段:浏览器检查元素的最外层祖先,是否在捕获阶段中注册了一个onclick事件处理程序,如果是,则运行它。然后,它移动到中单击元素的下一个祖先元素,并执行相同的操作,依此类推,直到到达实际点击的元素。
  2. 冒泡阶段:浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它。然后它移动到下一个直接的祖先元素,并做同样的事情,直到它到达元素。

事件委托: 如果你想要在大量子元素中单击任何一个都可以运行一段代码,您可以将事件监听器设置在其父节点上,并让子节点上发生的事件冒泡到父节点上,而不是每个子节点单独设置事件监听器。(利用了冒泡的特性)

1.4 事件对象

事件处理函数的eventevte参数称为事件对象,它被自动传递给事件处理函数,以提供额外的功能和信息。

  1. 通过事件对象获得事件源
代码语言:javascript
复制
function bgChange(e) {
  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  e.target.style.backgroundColor = rndCol;
  console.log(e);
      //获得事件源    var resurce = e.target;
    //事件发生的横坐标
    var x = e.clientX;
    //事件发生的纵坐标
    var y = e.clientY;
    alert(x);
    alert(y);
}

btn.addEventListener('click', bgChange);

大多数事件处理器的事件对象都有可用的标准属性和函数(方法),一些更高级的处理程序会添加一些专业属性,这些属性包含它们需要运行的额外数据。例如,媒体记录器 API 有一个dataavailable事件,它会在录制一些音频或视频时触发,并且可以用来做一些事情 (例如保存它,或者回放)。

  1. 通过标准事件对象的 stopPropagation()函数来修复事件冒泡问题

当在事件对象上调用该函数时,它只会让当前事件处理程序运行,但事件不会在冒泡链上进一步扩大,因此将不会有更多事件处理器被运行 (不会向上冒泡)。

代码语言:javascript
复制
video.onclick = function(e) {
  e.stopPropagation();
  video.play();
};

1.5 阻止默认行为

preventDefault()函数来阻止元素的默认行为

代码语言:javascript
复制
const form = document.querySelector('form');
form.onsubmit = function(e) {
  if (fname.value === '' || lname.value === '') {
    e.preventDefault();//停止表单提交
    para.textContent = 'You need to fill in both names!';
  }
}

II 事件

2.1 事件的三要素

事件源/ 事件/ 监听器

侦听事件发生的结构称为事件监听器(Event Listener),响应事件触发而运行的代码块被称为事件处理器(Event Handler)。

2.2 事件触发机制

  1. 以事件处理程序属性形式关联事件处理器
代码语言:javascript
复制
//onclick、onmouseover
document.querySelector('html').onclick = function() {
    alert('别戳我,我怕疼。');
}
  1. 通过DOM Level 2 Events 函数 addEventListener()关联事件处理器

(只支持到 Internet Explorer 9) 可以在一个元素上多次调用addEventListener('click', function() { ... }),并可在第二个参数中指定不同的函数。 对于事件处理程序属性来说,这是不可能的,因为后面任何设置的属性都会尝试覆盖较早的属性。

代码语言:javascript
复制
// 
document.querySelector('html').addEventListener('click', () => {
  alert('别戳我,我怕疼。');
});

//有一个相对应的方法,removeEventListener(),这个方法移除事件监听器。
const btn = document.querySelector('button');
btn.removeEventListener('click', bgChange);


2.3 监听属性

JavaScript的事件以属性形式onclick、onmouseover关联事件侦听器代码

事件监听属性

描述

onmouseover

鼠标移入事件

onmouseout

鼠标移出事件

onclick

鼠标单击事件

ondblClick

鼠标双击事件

onmousemove

鼠标的移动事件

onblur

鼠标失去焦点事件

onfocus

鼠标获得焦点事件

onmousedown

鼠标按下事件

onmouseup

鼠标弹起事件

onload

页面载入完成事件

onsubmit

表单提交事件 : 函数返回true表单提交 onsubmit=" return Function"

onchange

失去焦点并且值发生改变事件

onkeyup

键盘弹起事件

onkeydown

键盘按下事件

onscroll

滚动条滚动

onresize

窗口变大变小

onmove

窗口移动

onmousemove

在鼠标指针移到指定的对象时发生

注:网络事件不是 JavaScript 语言的核心——它们被定义成内置于浏览器的 JavaScript APIs。

代码语言:javascript
复制
//在鼠标指针移到指定的元素后执行Javascript代码:
<div onmousemove="myFunction()">鼠标指针移动到这。</div>

select下拉列表的特性

  1. select对象默认存在一个用来存放option对象的数组
  2. select对象.options 获得option数组对象
  3. select对象.selectedIndex 获得当前访问的option对象在数组中的位置
  4. select对象.options.length=0;清空数组。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • I 预备知识
    • 1.1 箭头函数
      • 1.2 事件模型
        • 1.3 事件冒泡及捕获
          • 1.4 事件对象
            • 1.5 阻止默认行为
            • II 事件
              • 2.1 事件的三要素
                • 2.2 事件触发机制
                  • 2.3 监听属性
                    • select下拉列表的特性
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档