首页 > 其他分享 >前端学习-事件对象与典型案例(二十六)

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

时间:2025-01-12 14:57:17浏览次数:3  
标签:二十六 const color 前端 案例 事件 5px document margin

目录

前言

事件对象

目标

事件对象是什么

语法

获取事件对象

部分常用属性

示例代码

示例代码:评论回车发布

总结


前言

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


事件对象

目标

能说出什么是事件对象

事件对象是什么

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

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

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

语法

如何获取

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

一般命名为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>


总结

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

标签:二十六,const,color,前端,案例,事件,5px,document,margin
From: https://blog.csdn.net/m0_74246993/article/details/145093120

相关文章

  • 了解Webpack:现代前端开发的静态模块打包器
            在现代前端开发中,Webpack已成为不可或缺的工具之一。作为一个静态模块打包器(modulebundler),Webpack通过分析和处理项目中的资源依赖关系,将它们打包成一个或多个bundle(捆绑包),这些bundle可以在浏览器中加载和执行。本文将详细介绍Webpack的概念、核心功能、安装......
  • 前端必知必会-Node.js 发送电子邮件
    文章目录Node.js发送电子邮件Nodemailer模块发送电子邮件多个接收者发送HTML总结Node.js发送电子邮件Nodemailer模块Nodemailer模块让您可以轻松地从计算机发送电子邮件。可以使用npm下载和安装Nodemailer模块:C:\Users\YourName>npminstallnodemai......
  • 前端必知必会-Node.js连接MySQL
    文章目录Node.jsMySQLMySQL数据库安装MySQL驱动程序创建连接查询数据库总结Node.jsMySQLNode.js可用于数据库应用程序。最流行的数据库之一是MySQL。MySQL数据库为了能够试验代码示例,您应该在计算机上安装MySQL。您可以在https://www.mysql.com/down......
  • 【架构师从入门到进阶】第四章:前端优化思路——第三节:前置资源和缓存
    【架构师从入门到进阶】第四章:前端优化思路——第三节:前置资源和缓存前置资源缓存http缓存什么是http缓存http缓存如何做缓存风险更改文件名使用后端验证缓存的有效性基于资源最后修改时间验证基于资源版本号的验证方式客户端缓存各种客户端缓存风险本篇文章我们......
  • 前端埋点,有哪些上报的方法?
    前端埋点主要是为了收集和分析用户在网页或应用上的行为数据,以便优化产品、提升用户体验和进行精准营销。以下是一些常见的前端埋点数据上报方法:HTTP请求上报:使用Ajax或FetchAPI定期发送包含埋点数据的HTTP请求到后端服务器。这种方法简单直接,但需要注意不要过于频繁地发送......
  • 前端音频录制要怎么做呢?
    前端音频录制可以通过以下步骤实现:获取媒体流:使用navigator.mediaDevices.getUserMedia()API来获取用户的音频流。这个API返回一个Promise,解析后得到MediaStream对象,该对象代表来自用户的麦克风或其他音频输入设备的实时音频流。创建音频上下文:利用AudioContext来创......
  • 毕业设计-SSM宠物领养互助管理系统(案例分析)-附源码
    摘 要如今,随着人们生活水平不断提高,人们的生活在物质满足的基础上,更多的人将生活的重点放在追求精神享受的过程中。于此同时,Internet铺天盖地的普及,使得这样的人纷纷通过Internet的方式去寻找精神的满足。然而领养宠物正是人们现在炙手可热的一种精神寄托。对于宠物的热爱让......
  • 前端加密对抗-2
    分析加密过程    点击登录可以发现有两个请求。查看载荷可以分析出第一个是获得密钥加密的,并且每次过去到的密钥是不会变化的,第二个则是加密过后的数据。这次的类型是从服务端获得密钥,一样使用autodecoder来加解密。    设置autodecoder的参数,这里的正则如果不会......
  • 30.绝地求生吃鸡游戏网页 Web前端网页制作 大学生期末大作业 html5+css3
    目录一、前言二、网页文件三、网页效果四、代码展示1.HTML2.CSS五、更多推荐一、前言本实例以游戏绝地求生为主题设计,应用html5+css,包括DIV布局、点击事件、超链接、留言板等,供大家参考。【本网页支持如Dreamweaver、HBuilder、Text、Vscode等任意html编辑软件进行......
  • 前端加密对抗-1
    改包的防范目前流行的防止改包方式主要是这么几个方面请求参数和路径的加密如果原始请求是GET请求,或防止访问者获取请求路径,通常会将用户实际的请求路径和GET请求参数封装都封装为POST请求的请求体,通过加解密网关再还原为原始GET请求传入后端分布式服务上。在APP中比较常见......