当前位置: 首页 > article >正文

【JavaScript】JavaScript开篇基础(5)

1.❤️❤️前言~🥳🎉🎉🎉

Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。

如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。

当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区留言指正🗨️🗨️。让我们共同努力,一起进步!

加油,一起CHIN UP!💪💪

🔗个人主页:E绵绵的博客
📚所属专栏:

1. JAVA知识点专栏

        深入探索JAVA的核心概念与技术细节

2.JAVA题目练习

        实战演练,巩固JAVA编程技能

3.c语言知识点专栏

        揭示c语言的底层逻辑与高级特性

4.c语言题目练习

        挑战自我,提升c语言编程能力

5.Mysql数据库专栏

        了解Mysql知识点,提升数据库管理能力

6.html5知识点专栏

        学习前端知识,更好的运用它

7. css3知识点专栏

        在学习html5的基础上更加熟练运用前端

8.JavaScript专栏

        在学习html5和css3的基础上使我们的前端使用更高级

📘 持续更新中,敬请期待❤️❤️

2. 注册事件

给元素添加事件,称为注册事件

注册事件有两种方式∶传统方式和方法监听注册方式。

传统注册方式:on开头
用on开头的事件:onclick

<button onclick = “alert(‘hi~’)”></button>
btn.onclick = function{}

特点:注册事件的唯一性(同一个元素同一个事件只能设置一个处理函数)



方法监听注册方式:addEventListener()

特点:同一个元素同一个事件可以注册多个监听器(监听处理函数function),按注册顺序依次执行

eventTarget.addEventListener(type, listener, useCapture)

将指定的监听器注册到eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数,涉及到的参数为:

type:事件类型为字符串,比如’click’、‘mouseover’,注意这里不要带on
listener:事件处理函数,事件发生时,会调用该监听函数,这里只要输入函数名即可。
useCapture:可选参数,是一个布尔值,默认是false(冒泡阶段,true是捕获阶段)

3.删除事件 

传统注册方式

eventTarget.onclick = null;

方法监听注册方式

eventTarget.removeEventListener(type, listener, useCapture);

4.Dom事件流 

  • 事件流: 从页面中接收事件的顺序
  • DOM 事件流:事件发生时会在元素节点之间按照特定的顺序传播传播过程

DOM 事件流分为3个阶段:

  1. 捕获阶段
  2. 当前目标阶段
  3. 冒泡阶段(更常用)

JS代码中只能执行捕获或者冒泡其中的一个阶段,并且要执行冒泡或者捕获阶段必需用方法监听注册方式注册事件才能执行,且由它控制。

5.事件对象 

eventTarget.onclick = function(event) {}

eventTarget.addEventListener('click', function(event) {})

这个event 是个形参,系统帮我们设定为事件对象,不需要传递实参过去当我们注册事件。event对象是被系统自动创建,并传递给事件监听器(事件处理函数),event对象代表事件的状态,比如键盘按键的状态、鼠标的位置、鼠标按钮的状态。
事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象 event,它有很多属性和方法。

常用的属性和方法:

 

  • this :返回绑定事件的元素, 这个函数的调用者,绑定的谁
  • e.target :返回触发事件的元素,点击的谁
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>

<body>
    <div>123</div>
    <ul>
        <li>abc</li>
        <li>abc</li>
        <li>abc</li>
    </ul>
    <script>
        // `e.target`返回点击的谁,`this`返回绑定的谁
        var div = document.querySelector('div');
        div.addEventListener('click', function(e) {
            console.log(e.target);   // 触发事件的元素,返回<div>123</div>
            console.log(this);   // 绑定事件的元素,返回<div>123</div>
        })
        
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function(e) { 
            console.log(this);   // 绑定事件的元素,返回<ul>...</ul>
            console.log(e.target);  // 触发事件的元素,返回<li>abc</li>
		})
    </script>
</body>

</html>

 

e.type 返回是事件的类型 

 

阻止默认事件

 

阻止冒泡发生 

6.事件委托

原理: 不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响其每个子节点。


例子: 给 ul 注册点击事件,然后利用事件对象的 target 来找到当前点击的 li,因为点击 li,事件会冒泡到 ul 上, ul 有注册事件,就会触发事件监听器。


作用: 我们只操作了一次 DOM ,提高了程序的执行效率。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <ul>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
    </ul>
    <script>
        // 事件委托的核心原理:给父节点添加侦听器,利用事件冒泡影响每一个子节点
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function(e) {
            alert('知否知否,点我应有弹框在手!');  // 点li就会出现弹框
            e.target.style.backgroundColor = 'pink';  // e.target可以得到我们点击的哪个小li,哪个小li背景就变粉
        })
    </script>
</body>

</html>

 7.鼠标事件

禁止鼠标右键菜单:

contextmenu主要控制应该何时显示上下文菜单,主要用于取消默认的上下文菜单

document.addEventListener('contextmenu', function(e) {
	e.preventDefault();
})

禁止鼠标选中selectstart 开始选中)

document.addEventListener('selectstart', function(e) {
	e.preventDefault();
})
  • event对象 代表事件的状态,跟事件相关的一系列信息的集合
  • MouseEvent 鼠标事件对象
  • KeyboardEvent 键盘事件对象

8.常用的键盘事件 

  • 更多的使用keydownkeyup, 它能识别所有的键(包括功能键)
  • Keypress不识别功能键


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // 1. 我们的keyup 和keydown事件不区分字母大小写  a 和 A 得到的都是65
        // 2. 我们的keypress 事件 区分字母大小写  a  97 和 A 得到的是65
        document.addEventListener('keyup', function(e) {
            console.log(e);  // 按下1,返回KeyboardEvent{key:"1",keyCode:49...}
            console.log('up:' + e.keyCode);  // 按下a/A返回65(不区分大小写),返回用户按下键的ASCII码值
            if (e.keyCode === 65) {
                alert('您按下的A键');
            } else {
                alert('您没有按下A键')
            }
        })
        
        document.addEventListener('keypress', function(e) {
            console.log('press:' + e.keyCode);  // 按下a返回97,A返回65(区分大小写)
        })
    </script>
</body>

</html>

 要注意如果有文本框输入,且为onkeydown事件,事件触发是在文本框填充文字之前。

 

 


http://www.kler.cn/a/389705.html

相关文章:

  • 卓胜微嵌入式面试题及参考答案(2万字长文)
  • Unity3D实现视频和模型融合效果
  • TCP/IP协议,TCP和UDP区别
  • 基于Python+Django+Vue3+MySQL实现的前后端分类的商场车辆管理系统
  • 深度学习代码笔记
  • 【日志】392.判断子序列
  • 每日一题|3258. 统计满足 K 约束的子字符串数量 I|滑动窗口
  • 手写JDK动态代理实现AOP
  • c# 开发web服务 webserver
  • MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
  • sql速度优化多条合并为一条语句
  • 关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
  • 调整TCP参数, 优化网络性能
  • 基于springboot的家装平台设计与实现
  • 【HCIP园区网综合拓扑实验】配置步骤与详解(已施工完毕)
  • 整合本地市场机会 同城小程序打造社区商圈
  • Uniapp去除顶部导航栏-小程序、H5、APP适用
  • 专业140+总分430+复旦大学875信号与系统考研经验原957电子信息通信考研,真题,大纲,参考书。
  • ssm基于BS的仓库在线管理系统的设计与实现+vue
  • 单链表算法题(数据结构)
  • 【网络安全 | 漏洞挖掘】Google SSO用户的帐户接管
  • 人工智能学习--分类模型的训练和应用
  • 了解 Open RAN 架构中的 DU 和 CU
  • c语言编程题(函数)
  • 如何在MT4中实现神经网络EA?
  • AI与隐私:Facebook如何在数据保护中平衡创新与安全