【Web API DOM04】事件类型、对象、解绑

一:事件类型

1 鼠标事件

常见鼠标事件

鼠标点击事件:’click‘

鼠标移入事件:‘mouseenter’

鼠标离开事件:‘mouseleave’

鼠标经过事件区别

mouseover和mouseout会有冒泡效果

mouvseenter和mouseleave没有冒泡效果

2 焦点事件

获得焦点:focus

失去焦点:blur

3 键盘事件

键盘按下触发:keydown

键盘弹起触发:keyup

4 文本事件

文本框输入内容触发:input

以上事件类型,通常搭配侦听器一起使用

二:事件对象

1 什么是事件对象

事件是一个对象,事件对象中存储着事件触发时的相关信息

例如:

文本事件触发,能获取到在哪个文本框输入的信息

鼠标点击时,事件对象存储了鼠标点击的位置

2 事件对象在哪里

在事件绑定的回调函数的第一个参数就是事件对象

//以按钮点击事件为例
btn.addEventListener('click',function(event/e){
    
})
//在回调函数第一个参数中填写event或者e,就可以在回调函数中
//通过event/e.属性/方法的方式找到事件对象中有的属性和方法

3 事件对象常用属性

  1. type,获取当前的事件类型
  2. clientX/clientY,获取光标相对于浏览器可见窗口左上角的位置
  3. offsetX/offsetY,获取光标相对于当前DOM元素左上角的位置
  4. key用户按下的键盘键的值
    1. 现在keyCode已经被抛弃

三:事件解绑

语法格式:

removeEventListener(事件类型,事件处理函数,[获取捕获或冒泡阶段])
function fn(){
....
}
btn.removeEventListener('click',fn)

重点:匿名函数无法解绑

四:案例评论回车发布消息

1 需求:

2 代码实现后样式:

3 代码:

<!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>评论回车发布</title>
  <style>
    .wrapper {
      min-width: 400px;
      max-width: 800px;
      display: flex;
      justify-content: flex-end;
    }
    .avatar {
      width: 48px;
      height: 48px;
      border-radius: 50%;
      overflow: hidden;
      background: url(./images/avatar.jpg) no-repeat center / cover;
      margin-right: 20px;
    }
    .wrapper textarea {
      outline: none;
      border-color: transparent;
      resize: none;
      background: #f5f5f5;
      border-radius: 4px;
      flex: 1;
      padding: 10px;
      transition: all 0.5s;
      height: 30px;
    }
    .wrapper textarea:focus {
      border-color: #e4e4e4;
      background: #fff;
      height: 50px;
    }
    .wrapper button {
      background: #00aeec;
      color: #fff;
      border: none;
      border-radius: 4px;
      margin-left: 10px;
      width: 70px;
      cursor: pointer;
    }
    .wrapper .total {
      margin-right: 80px;
      color: #999;
      margin-top: 5px;
      opacity: 0;
      transition: all 0.5s;
    }
    .list {
      min-width: 400px;
      max-width: 800px;
      display: flex;
    }
    .list .item {
      width: 100%;
      display: flex;
    }
    .list .item .info {
      flex: 1;
      border-bottom: 1px dashed #e4e4e4;
      padding-bottom: 10px;
    }
    .list .item p {
      margin: 0;
    }
    .list .item .name {
      color: #FB7299;
      font-size: 14px;
      font-weight: bold;
    }
    .list .item .text {
      color: #333;
      padding: 10px 0;
    }
    .list .item .time {
      color: #999;
      font-size: 12px;
    }
  </style>
</head>
<body>
  <div class="wrapper">
    <i class="avatar"></i>
    <textarea id="tx" placeholder="发一条友善的评论" rows="2" maxlength="200"></textarea>
    <button>发布</button>
  </div>
  <div class="wrapper">
    <span class="total">0/200字</span>
  </div>
  <div class="list">
    <div class="item" style="display: none;">
      <i class="avatar"></i>
      <div class="info">
        <p class="name">清风徐来</p>
        <p class="text">大家都辛苦啦,感谢各位大大的努力,能圆满完成真是太好了[笑哭][支持]</p>
        <p class="time">2022-10-10 20:29:21</p>
      </div>
    </div>
  </div>
  <script>
    const item = document.querySelector('.item')
    const textarea = document.querySelector('textarea')
    const pContent = document.querySelector('.text')
    textarea.addEventListener('keyup', function (e) {
      //Enter键,E大写
      if (e.key === 'Enter') {
        if (textarea.value.trim() !== '') {
          item.style.display = 'block'
          pContent.innerHTML = textarea.value
        }
        textarea.value = ''
      }
    })
  </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676449.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有哪些挣钱软件一天能赚几十元?盘点十个能长期做下去的挣钱软件

在这个信息爆炸的时代&#xff0c;每个人都在寻找快速赚钱的秘诀。很多人做兼职副业的目标并不是获得很大的成功&#xff0c;大部分人一天能赚几十就心满意足了。 今天&#xff0c;我要带你一探究竟&#xff0c;揭秘那些能让你日赚几十元的挣钱软件。准备好了吗&#xff1f;让我…

vue3+typescript 使用Codemirror

安装 // npm npm install codemirror-editor-vue3 codemirror^5.65.12// ts版 还需安装&#xff1a; npm install types/codemirror全局注册 修改main.ts&#xff1a; import { createApp } from vueimport App from ./App.vueimport { InstallCodemirro } from "code…

面向对象程序设计之从C到C++的初步了解

1. C语言 1. C的发展 C是从C语言发展演变而来的&#xff0c;首先是一个更好的C引入了类的机制&#xff0c;最初的C被称为“带类的C”1983年正式取名为C 从1989年开始C语言的标准化工作 于1994年制定了ANSIC标准草案 于1998年11月被国际标准化组织(ISO)批准为国际标准&#xf…

数据结构与算法06-树结构(二叉树)

介绍 树也是基于结点的数据结构&#xff0c;但树里面的每个结点&#xff0c;可以含有多个链分别指向其他多个结点。 基于树的数据结构有很多种&#xff0c;但本章只关注其中一种——二叉树。二叉树是一种遵守以下规则的树。 每个结点的子结点数量可为 0、1、2。如果有两个子…

码蹄杯 2024 初赛第一场

MC0301 求个最大值 code: #include<bits/stdc.h> #define int long long #define endl \nusing namespace std;int n;void solve(){cin >> n;int mx -1;for(int i 0;i < n;i ){int x; cin >> x;mx max(mx,x);}cout << mx << endl; }sig…

JAVA流程控制break,continue,goto

1.break在任何循环语句的主体成分&#xff0c;均可用break控制循环的流程。break用于强行退出循环&#xff0c;不执行循环中剩余的语句。&#xff08;break语句也在switch语句中使用&#xff09; 如图&#xff1a;break语句强行退出循环&#xff0c;结果输出1~30便结束&#xf…

防火墙基础基础篇:NAT转发功能之——Easy IP方式详解

防火墙基础基础篇&#xff1a;NAT转发功能之——Easy IP方式详解 1. 概念 Easy IP 是一种简化版的动态NAPT&#xff08;Network Address and Port Translation&#xff09;技术。在Easy IP中&#xff0c;我们只使用一个公网IP地址&#xff0c;无需建立公有IP地址池。这个公网…

【数据库专家揭秘】MySql数据库设计黄金法则,让你的数据更稳定、更高效!

文章目录 引言一、明确需求&#xff0c;合理规划二、规范命名&#xff0c;提高可读性三、选择合适的数据类型四、优化表结构五、性能优化六、注重安全性总结 引言 在当今数字化时代&#xff0c;数据库已成为企业信息管理的核心。而在众多数据库系统中&#xff0c;MySql以其稳定…

jar包部署到服务器,修改jar包配置文件

jar包部署到服务器 打包项目1.jar包分离2.整体打包配置文件配置文件分离整体打包修改配置文件 打包项目 maven项目打包有两种&#xff0c;一是将自己的项目和依赖包分离&#xff0c;二是打包成一个jar包 1.jar包分离 需要在pom文件中引入依赖 <build><finalName&…

积鼎流体仿真软件VirtualFlow: 锂电池液冷散热数值计算

电池包在运作的时候会产生大量的热&#xff0c;热会在电池包内积累&#xff0c;随着车辆的使用&#xff0c;电池包内的部件会老化损伤&#xff0c;安全隐患极高&#xff0c;如何给电池包散热就显得非常重要。本文采用积鼎VirtualFlow对电芯、冷板以及冷却液进行散热仿真计算&am…

进程线程(一.2)

进程与线程&#xff08;一&#xff09; 并发编程并发与并行高并发 进程特征什么是进程&#xff1f;线程&#xff1f;进程与程序的区别进程与线程区别进程的五状态进程的种类 查看进程命令ps auxps axjpstreekill 进程的创建fork函数fork总结vfork函数fork与vfork区别 获取进程I…

30天变现5位数,涨粉2w,用AI做治愈系插图,太香了!(附工具教程)

大家好&#xff0c;我是设计师阿威 前段时间和一位朋友聊天&#xff0c;他说现在靠 AI 赚到钱&#xff0c;基本不可能&#xff01; 我竟然一时不知道说什么好。 虽然我并不认同他的说法&#xff0c;但也没有再说什么了。 因为人们往往会根据自己已有的认知体系&#xff0c;…

vivado BD_ADDR_SPACE、BD_CELL

描述 地址空间或bd_addr_space对象是一个分配的逻辑可寻址空间 主机接口上的内存&#xff0c;或连接到AXI主机的AXI接口端口上的内存 块设计外部。 Vivado Design Suite的IP集成商遵循行业标准IP-XACT数据 用于捕获内存需求和功能的格式。有些区块可以有一个 与多个主接口相关联…

电力电子功率模块在工程应用中测温NTC的使用

电力电子功率模块在工程应用中测温NTC的使用 1.概述2.什么是NTC3.模块内部NTC3.1 绝缘隔离措施3.2 NTC热量考虑 4.使用模拟方法测量NTC温度4.1 分压电阻大小 5.使用数字方法测量NTC温度 1.概述 最近做项目的时候突然被问到一个问题。做实验测温用的NTC到底怎么用&#xff1f;为…

【西瓜书】5.神经网络

1.概念 有监督学习正向传播&#xff1a;输入样本---输入层---各隐层---输出层反向传播&#xff1a;误差以某种形式在通过隐层向输入层逐层反转&#xff0c;并将误差分摊给各层的所有单元&#xff0c;以用于修正各层的权值激活函数&#xff1a;也叫阶跃函数&#xff0c;目的是引…

特征工程技巧——字符串编码成数字序列

这段时间在参加比赛&#xff0c;发现有一些比赛上公开的代码&#xff0c;其中的数据预处理步骤值得我们参考。 平常我们见到的都是数据预处理&#xff0c;现在我们来讲一下特征工程跟数据预处理的区别。 数据预处理是指对原始数据进行清洗、转换、缩放等操作&#xff0c;以便为…

深入理解序列化:概念、应用与技术

在计算机科学中&#xff0c;序列化&#xff08;Serialization&#xff09;是指将数据结构或对象状态转换为可存储或传输的格式的过程。这个过程允许将数据保存到文件、内存缓冲区&#xff0c;或通过网络传输至其他计算机环境&#xff0c;不受原始程序语言的限制。相对地&#x…

MySQL(三) - 基础操作

一、索引 由于我们在使用数据库的时候&#xff0c;大部分操作的都是查询操作&#xff0c;但是我们每一次进行查询都需要遍历一遍表中所有数据&#xff0c;这会花费O(n)的时间&#xff0c;因此数据引入了“索引” 也就是在底层使用了数据结构来进行优化查询的操作&#xff0c;但…

C++ Primer 第五版 第15章 面向对象程序设计

面向对象程序设计基于三个基本概念&#xff1a;数据抽象、继承和动态绑定。 继承和动态绑定对编写程序有两方面的影响&#xff1a;一是我们可以更容易地定义与其他类相似但不完全相同的新类&#xff1b;二是在使用这些彼此相似的类编写程序时&#xff0c;我们可以在一定程度上…

java面试题及答案2024,java2024最新面试题及答案(之一)

发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望对大家有帮助哈~ 本套Java面试题大全&#xff0c;全的不能再全&#xff0c;哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Ja…