IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js事件操作语法 -> 正文阅读

[JavaScript知识库]js事件操作语法

一、事件的绑定语法

语法形式1

? ? 事件监听? 标签对象.addEventListener('click',function(){});

语法形式2

? ? on语法绑定??标签对象.onclick = function(){}

on语法是通过 = 等于赋值绑定的事件处理函数 ,= ? 等于赋值本质上执行的是覆盖赋值,后赋值的数据会覆盖之前存储的数据,也就是on语法 一个标签对象相同的事件类型,只能赋值绑定 一个事件处理函数,如果赋值绑定多个事件处理函数,后赋的事件处理函数会覆盖之间存储的事件处理函数

事件绑定的三要素

? ? 标签对象 ? ?事件源 也就是绑定事件的标签对象

? ? 'click'? ? ? ? ? 事件类型 也就是绑定给标签对象的事件的类型

? ? function(){} ? ?事件处理函数 也就是触发事件时执行的函数程序

? ? ? ? ? ? ? ? ? ? ? ? ? 是回调函数语法形式,可以是函数名称,也可以是匿名函数

二、事件的删除语法

1.on语法绑定事件的删除

? ? 因为 on语法是 = 等于赋值操作,只要赋值一个 null / 空函数,触发事件时就没有调用执行的函数程序达到删除事件的效果

2.事件监听语法的删除

? ? 需要专门的删除函数方法:标签对象.removeEventListener('事件类型',事件处理函数);

? ? 只能删除绑定的是函数名称的事件处理函数,如果绑定的是匿名函数,不能删除

注意:

? ? 实际操作中,如果不需要删除事件处理函数,推荐使用匿名函数语法形式

? ? 实际操作中,如果必须要删除事件处理函数,只能绑定函数名称

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

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

<body>
  <div>我是div标签对象</div>
  <button>绑定</button>
  <button>删除</button>

  <script>
    //获取标签对象
    var oDiv = document.querySelector('div');
    var oBtn1 = document.querySelectorAll('button')[0];
    var oBtn2 = document.querySelectorAll('button')[1];

    oBtn1.addEventListener('click', function () {
      //on语法绑定事件
      //oDiv.onclick = function(){console.log(111)};

      //事件监听语法绑定
      //绑定的匿名函数
      oDiv.addEventListener('click', function () { console.log(111) });

      //绑定的函数名称
      oDiv.addEventListener('click', funA);
      oDiv.addEventListener('click', funB);
      oDiv.addEventListener('click', funC);

    })

    //删除绑定的事件
    oBtn2.addEventListener('click', function () {
      //删除on语法绑定的事件
      //oDiv.onclick = null;
      //oDiv.onclick = function(){};

      //绑定的匿名函数无法删除,因为两个匿名函数内存地址不同
      //假设绑定的内存地址是 00ff11
      //删除的内存地址可能是 00ffzz 
      //不能设定正确的删除的内存地址
      oDiv.removeEventListener('click', function () { console.log(111) });

      //绑定的是函数名称,函数名称中存储的是内存地址
      //以下可以删除
      oDiv.removeEventListener('click', funA);
      oDiv.removeEventListener('click', funB);
      oDiv.removeEventListener('click', funC);
    });

    function funA() {
      console.log('aaa');
    }
    function funB() {
      console.log('bbb');
    }
    function funC() {
      console.log('ccc');
    }
  </script>
</body>

</html>

三、默认事件

默认事件是html标签默认执行的程序效果

? ? 有:超链接的点击跳转,form标签的点击跳转,鼠标右键

阻止默认事件

事件处理函数中定义一个形参 形参名称一般是 e / event

? ? 标签对象.addEventListener('事件类型' , function( e / event ){

? ? ? ? ? ?// 阻止默认事件执行

? ? ? ? ? ?形参.prevenDefault();

? ? })

超链接

? ? 给 超链接标签 添加 点击事件

form标签

? ? 给 form标签 添加 submit 提交事件

鼠标右键

? ? 给 document 添加 contextmenu 鼠标右键事件

四、阻止事件的传播

父级标签和后代标签添加了相同类型的事件,后代标签触发事件父级标签也会触发相同类型的事件,这样的执行原理称为事件的传播或者冒泡事件

阻止事件的传播语法

? ? 标签对象.addEvenListener(事件类型,function(e/event){

? ? ? ? ? ?e.stopPropagation();??

? })

事件传播的方式

之前 旧版本 中 事件的传播方式有两种

? ? 冒泡? 子级 --- 父级

? ? 捕获? 父级 --- 子级

现在 新版本 浏览器中 默认只有 冒泡方式 没有 捕获方式

? ? 事件监听语法绑定 事件处理函数

? ? 参数3 如果设定 为 true 事件的传播 执行 捕获方式

五、常见的事件类型

1. window相关的事件类型

1.1 浏览器视窗窗口大小监听事件

? ? window.addEventListener( 'resize' ,function(){} )

1.2 页面滚动监听事件

? ? window.addEventListener( 'scrool',function(){} )

1.3 浏览器加载事件

? ? window.addEventListener( 'load',function(){})

1.5 新窗口打开url连接

? ? window.open(url地址)

1.6 关闭当前窗口

? ? window.close()

2. 鼠标相关的事件类型

? click? ? ? ? ? ? ? 鼠标左键单击

? dblclick? ? ? ? ?鼠标左键双击

contextmenu? 鼠标右键单击

? mousedown 鼠标按键按下

? mouseup? ? ? 鼠标按键抬起

? mousemove 鼠标移动

? mouseover? ?鼠标移入? ?mouseenter

? mouseout? ? ?鼠标移出? ?mouseleave

3. 键盘相关的事件类型

? ?keydown ? ? 键盘按键按下

? ?keyup? ? ? ? ? 键盘按键抬起

? ?keypress? ? ?键盘按键按下

4. 表单相关事件

? ?submit ? ? ?表单提交事件

? ?focus? ? ? ? 标签获取焦点

? ?blur? ? ? ? ? ?标签失去焦点

? ?change ? ? 标签失去焦点同时数据改变

? ?input? ? ? ? ?输入数据

5. 移动端事件

? ?touchstart ?触摸开始

? ?touchend ? 触摸结束

? ?touchmove ? 触摸移动

6. 特殊事件

? ?transitionstart ? ? 过渡开始

? ?transitionend ? ? ?过渡结束

? ?animationstart ? ?动画开始

? ?animationend ? ? 动画结束

一定是绑定事件的标签 也就是 事件源 范围内 才能触发事件

全屏触发事件 需要给

? ? document

? ? document.documentElement

? ? document.body

绑定事件

? ? 有些事件都能支持, 有些事件只有某个对象支持

六、事件对象

事件对象(event),事件处理函数中参数存储的数据数值,是触发事件的对象

触发事件的对象和绑定事件的不一定是同一个对象

触发事件时 JavaScript程序 自动向形参中存储实参

也就是 向 事件对象 中 自动储存 触发事件的标签对象 相关的数据信息

事件源.addEventListener(事件类型,function(时间对象){})

? ? ? ?事件对象.target

? ? ? ? ? ? ? 存储的是触发事件的标签对象

? ? ? ? ? ? ? 支持所有DOM操作语法

七、事件委托语法

不是直接给标签对象绑定事件,而是给父级标签绑定事件,通过事件对象.target判断触发事件的不同的标签对象,执行不同的函数程序

标签对象.target 就是一个DOM标签对象

? ? 标签对象.target.tagName 是大写英文字符的标签名称

? ? 标签对象.target 执行DOM操作,判断点击的是什么标签

如果有div标签包含span标签 h1标签 a标签 p标签 ,给各标签添加不同的点击事件

一般是获取每一个标签对象,绑定点击事件,阻止事件的传播

实际操作中,只要根据不同的条件,触发不同的if判断,执行不同的程序,就OK了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        我是div标签对象<br>
        <span>我是span标签</span>
        <h1 id="h1">我是h1标签</h1>
        <a href="JavaScript:;">我是a标签</a>
        <p>我是p标签</p>
    </div>

    <script>
        // 事件委托 
        // 给父级div标签添加点击事件
        // 通过 事件对象.target 判断 触发事件的是什么标签 
        // 根据不同的标签 触发执行不同的程序
        var oDiv = document.querySelector('div');

        oDiv.addEventListener('click' , function(e){
            // 事件委托 点击事件会触发 
            // 触发事件标签 标签名称是 div 证明点击的是div标签
            if( e.target.tagName === 'DIV' ){
                console.log( '您点击的是div标签' );


            }else if( e.target.tagName === 'SPAN' ){
                console.log( '您点击的是span标签' );
            
            
            }else if( e.target.id === 'h1' ){
                console.log( '您点击的是h1标签' );

            }else if( e.target.getAttribute('href') === 'JavaScript:;' ){
                console.log( '您点击的是a标签' );

            }else if( e.target.innerHTML === '我是p标签' ){
                console.log( '您点击的是p标签' );

            }
        });

    </script>
</body>
</html>

分别点击各标签,执行结果如下:

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:25:24  更:2022-01-17 11:26:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:04:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码