前端学习-事件对象与典型案例(二十六)

news2025/1/15 2:03:14

目录

前言

事件对象

目标

事件对象是什么

语法

获取事件对象

部分常用属性

示例代码

示例代码:评论回车发布

总结


前言

长风破浪会有时,直挂云帆济沧海。


事件对象

目标

能说出什么是事件对象

事件对象是什么

也是个对象,这个对象里有事件触发时的相关信息例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息

使用场景可以判断用户按下哪个键,比如按下回车键可以发布新闻

可以判断鼠标点击了哪个元素,从而做相应的操作

语法

如何获取

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

一般命名为event,ev,e

元素.addEventListener('click',function(e){}//e为事件对象

获取事件对象

目标:能够使用常见事件对象属性

部分常用属性

type口 获取当前的事件类型>

clientX/clientY口 获取光标相对于浏览器可见窗口左上角的位置>

offsetX/offsetY获取光标相对于当前DOM元素左上角的位置 key口 用户按下的键盘键的值口 现在不提倡使用keyCode

示例代码

<!DOCTYPE html>
<html lang="en">
​
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
​
<body>
  <button>按钮</button>
  <script>
    const btn = document.querySelector('button');
    btn.addEventListener('click', function (e) {
      console.log(e.type);
    });
  </script>
</body>
​
</html>

示例代码:评论回车发布

<!DOCTYPE html>
<html lang="en">
​
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Input Box</title>
  <style>
    body {
      font-family: Arial, sans-serif;
    }
​
    .input-container {
      display: flex;
      justify-content: space-between;
      align-items: flex-start;
      margin-bottom: 10px;
      width: 500px;
    }
​
    textarea {
      width: 70%;
      height: 100px;
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: 5px;
      resize: none;
      position: relative;
      /* 设置相对定位,以便伪元素可以绝对定位 */
      box-sizing: border-box;
      /* 确保内边距和边框包含在宽度内 */
    }
​
    textarea::after {
      content: '庞嘉欣专属评论框';
      /* 伪元素内容 */
      position: absolute;
      /* 绝对定位 */
      bottom: 5px;
      /* 距离底部 5px */
      right: 5px;
      /* 距离右侧 5px */
      font-size: 0.8em;
      /* 字体大小 */
      color: #888;
      /* 字体颜色 */
      pointer-events: none;
      /* 确保伪元素不影响交互 */
      z-index: 1;
      /* 确保伪元素在内容之上 */
    }
​
    .button-counter-container {
      display: flex;
      flex-direction: column;
      align-items: flex-end;
    }
​
    button {
      padding: 20px 20px;
      background-color: #007bff;
      color: white;
      border: none;
      border-radius: 5px;
      cursor: pointer;
      margin-bottom: 10px;
      margin-right: 40px;
      margin-top: 10px;
    }
​
    .counter {
      text-align: right;
      margin-right: 50px;
      margin-top: 25px;
    }
​
    .counter span {
      font-weight: bold;
    }
​
    #comments-container {
      margin-top: 20px;
      width: 500px;
    }
​
    .comment {
      margin-bottom: 10px;
      padding: 10px;
      border: 1px solid rgba(0, 0, 0, 0.5);
      border-radius: 5px;
      background-color: #ffffff;
    }
​
    .comment-time {
      font-size: 0.9em;
      color: #888;
      margin-top: 5px;
      display: flex;
      justify-content: space-between;
      align-items: center;
    }
​
    .comment-time span {
      font-size: 0.8em;
      color: #888;
    }
  </style>
</head>
​
<body>
  <div class="input-container">
    <textarea id="input-text" placeholder="发布一条友善的评论"></textarea>
    <div class="button-counter-container">
      <button id="submit-button">发布</button>
      <div class="counter">
        <span id="current-count">0</span>/200字
      </div>
    </div>
  </div>
​
  <div id="comments-container"></div>
​
  <script>
    document.addEventListener('DOMContentLoaded', function () {
      const inputText = document.getElementById('input-text');
      const currentCount = document.getElementById('current-count');
      const submitButton = document.getElementById('submit-button');
      const commentsContainer = document.getElementById('comments-container');
​
      inputText.addEventListener('input', function () {
        const count = inputText.value.length;
        currentCount.textContent = count;
      });
​
      function addComment() {
        const commentText = inputText.value.trim();
        if (commentText) {
          const now = new Date();
          const formattedTime = now.toLocaleString();
​
          const commentElement = document.createElement('div');
          commentElement.className = 'comment';
​
          const commentContent = document.createElement('span');
          commentContent.textContent = commentText;
​
          const commentTime = document.createElement('div');
          commentTime.className = 'comment-time';
​
          const timeSpan = document.createElement('span');
          timeSpan.textContent = formattedTime;
​
          const signatureSpan = document.createElement('span');
          signatureSpan.textContent = '^-^';
          signatureSpan.style.fontSize = '0.8em';
          signatureSpan.style.color = '#87CEEB';
​
          commentTime.appendChild(timeSpan);
          commentTime.appendChild(signatureSpan);
​
          commentElement.appendChild(commentContent);
          commentElement.appendChild(commentTime);
​
          commentsContainer.appendChild(commentElement);
​
          inputText.value = '';
          currentCount.textContent = '0';
        }
      }
​
      submitButton.addEventListener('click', addComment);
​
      inputText.addEventListener('keydown', function (event) {
        if (event.key === 'Enter' && !event.shiftKey) {
          event.preventDefault();
          addComment();
        }
      });
    });
  </script>
</body>
​
</html>


总结

千磨万击还坚劲,任尔东西南北风。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验

在 UniApp 中&#xff0c;由于需要兼容多端应用&#xff0c;我们通常使用 rpx 作为尺寸单位。然而&#xff0c;在某些情况下&#xff0c;如需要实现内容居中且两边留白时&#xff0c;直接使用 rpx 可能会带来一些限制。这时&#xff0c;我们可以考虑使用 px 或 rem 等单位&…

【Uniapp-Vue3】pages.json页面路由globalStyle的属性

项目的全局配置在pages.json中。 一、导航栏设置 二、下拉刷新设置 下拉就可以看到设置的样式 三、上拉触底 这个页面中&#xff0c;向下滑动页面到底部就会输出“到底了” 现在将触底距离设置为500 走到半路就会输出“到底了”

Type-C双屏显示器方案

在数字化时代&#xff0c;高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步&#xff0c;一款结合了便携性和高效视觉输出的设备——双屏便携屏&#xff0c;逐渐崭露头角&#xff0c;成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

Linux下部署Redis(本地部署超详细)

非docker 1、下载Redis 历史版本&#xff1a; http://download.redis.io/releases 我的&#xff1a; http://download.redis.io/releases/redis-7.0.5.tar.gz 2.安装教程 1.Redis是基于c语言编写的需要安装依赖&#xff0c;需要安装gcc yum install gcc-c 2.查看gcc版…

使用 Multer 上传图片到阿里云 OSS

文件上传到哪里更好&#xff1f; 上传到服务器本地 上传到服务器本地&#xff0c;这种方法在现今商业项目中&#xff0c;几乎已经见不到了。因为服务器带宽&#xff0c;磁盘 IO 都是非常有限的。将文件上传和读取放在自己服务器上&#xff0c;并不是明智的选择。 上传到云储存…

UE5 打包项目

UE5 打包项目 flyfish 通过 “文件”->“打开项目”&#xff0c;然后在弹出的对话框中选择项目文件&#xff08;通常是以.uproject为后缀的文件&#xff09; 选择目标平台&#xff1a; 在 UE5 主界面中&#xff0c;找到 “平台”&#xff08;Platforms&#xff09;。根据…

自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器

使用 Open AI 兼容的 API&#xff0c;可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑&#xff0c;私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量&#xff0c;为了简化网络配置&#…

杭州铭师堂的云原生升级实践

作者&#xff1a;升学e网通研发部基建团队 公司介绍 杭州铭师堂&#xff0c;是一个致力于为人的全面发展而服务的在线教育品牌。杭州铭师堂秉持“用互联网改变教育&#xff0c;让中国人都有好书读”的使命&#xff0c;致力于用“互联网教育”的科技手段让更多的孩子都能享有优…

STM32 FreeRTOS移植

目录 FreeRTOS源码结构介绍 获取源码 1、 官网下载 2、 Github下载 源码结构介绍 源码整体结构 FreeRTOS文件夹结构 Source文件夹结构如下 portable文件夹结构 RVDS文件夹 MemMang文件夹 FreeRTOS在基于寄存器项目中移植步骤 目录添加源码文件 工程添加源码文件 …

可以进行重复测量的方差分析的AI agent

可以进行重复测量的方差分析的AI agent 前几天做了机器学习的AI agent&#xff0c;把一个糖尿病机器学习模型采用API的形式接入到LLM模型中&#xff0c;结合LLM的智能性和机器学习模型的准确性&#xff0c;利用两者的有点&#xff0c;有可以避免两者的缺点&#xff0c;是一条合…

OpenCV实现Kuwahara滤波

Kuwahara滤波是一种非线性的平滑滤波技术&#xff0c;其基本原理在于通过计算图像模板中邻域内的均值和方差&#xff0c;选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明&#xff1a; 一、基本思想 Kuwahara滤波的基本思想…

[文献精汇]使用 LSTM Networks 的均值回归交易策略

Backtrader 策略实例 [Backtrader]实例:均线策略[Backtrader] 实例:MACD策略[Backtrader] 实例:KDJ 策略[Backtrader] 实例:RSI 与 EMA 结合[Backtrader] 实例:SMA自定义数据源[Backtrader] 实例:海龟策略[Backtrader] 实例:网格交易[Backtrader] 实例: 配对交[Backtrader] 机…

IDEA Maven构建时报错:无效的目标发行版17

报错分析 报错原因&#xff1a;Maven 构建时&#xff0c;Java 版本配置不匹配 我安装的JDK版本是1.8&#xff0c;但由于种种原因&#xff0c;Maven构建时指定了 Java 17 作为目标发行版&#xff0c;从而导致错误 解决方案 首先&#xff0c;java -version&#xff0c;查看环…

计算机网络 (39)TCP的运输连接管理

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它在计算机网络中扮演着至关重要的角色。TCP的运输连接管理涉及连接建立、数据传送和连接释放三个阶段。 一、TCP的连接建立 TCP的连接建立采用三次握手机制&#xff0c;其过程如下&…

Navicat Premium 16.0.90 for Mac 安装与free使用

步骤 0.下载 通过网盘分享的文件&#xff1a;Navicat Premium 16.0.90 链接: https://pan.baidu.com/s/12O22rXa9MiBPKKTGMELNIg 提取码: yyds 1.打开下好的 dmg 文件 (这个界面不要关闭&#xff09; 2.将Navicat Premium 拖动至 Applications 这时出现 点击取消。 3.点开…

小创新模型!6种2024算法优化BiTCN-SVM单变量输入单步预测,MATLAB机器学习预测全家桶再更新...

截止到本期MATLAB机器学习预测全家桶&#xff0c;一共发了26篇关于机器学习预测代码的文章。算上这一篇&#xff0c;一共27篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测…

3_CSS3 渐变 --[CSS3 进阶之路]

CSS3 引入了渐变&#xff08;gradients&#xff09;&#xff0c;它允许在两个或多个指定的颜色之间显示平滑的过渡。CSS3 支持两种类型的渐变&#xff1a; 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a;颜色沿着一条线性路径变化&#xff0c;可以是水平、垂直…

25/1/13 嵌入式笔记 继续学习Esp32

PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09; 是一种通过快速切换高低电平来模拟中间电压值的技术。它广泛应用于控制 LED 亮度、电机速度、音频生成等场景。 analogWrite函数:用于在微控制器&#xff08;如 Arduino&#xff09;上生成模拟信号。 …

【端云一体化】云函数的使用

前言 为丰富HarmonyOS对云端开发的支持、实现端云联动&#xff0c;DevEco Studio以Cloud Foundation Kit&#xff08;云开发服务&#xff09;为底座、在传统的“端开发”基础上新增“云开发”能力&#xff0c;开发者在创建工程时选择合适的云开发工程模板&#xff0c;即可在De…

行业案例:高德服务单元化方案和架构实践

目录 为什么要做单元化 高德单元化的特点 高德单元化实践 服务单元化架构 就近接入实现方案 路由表设计 路由计算 服务端数据驱动的单元化场景 总结 系列阅读 为什么要做单元化 单机房资源瓶颈 随着业务体量和服务用户群体的增长,单机房或同城双机房无法支持服…