js微博发布案例

news2024/9/20 1:32:05

思路:

需求1:检测用户输入的字数

注册input事件

将输入文本长度赋值给对应的数值

需求2:输入不能为空

点击按钮之后判断 如果输入为空,则提示不能输入为空,并直接return

为了防止无意义的一些输入,利用字符串.trim()可以去掉首尾空格

当输入为空点击发布按钮以后 将输入内容清空 计数器也变为0

需求3 新增留言 应写在点击事件内部

创建li 然后里面通过innerHTML追加数据

追加给父元素ul ,用父元素.insertBefore(插入到当前元素的前面)

需求4:删除事件必须写在点击事件里面

删除事件应该放在追加ul的前面这样创建元素的同时顺便绑定了点击事件

删除操作 删除li 父元素.removeChild(子元素)

需求5:重置

发布完一条消息后将表单的内容重置为空

 代码部分:

HTML代码

<!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>
  <link rel="stylesheet" href="./css/weibo.css">
  <script src="../发布微博案例/jquery-3.7.1.slim.js"></script>
</head>

<body>
  <div class="w">
    <div class="controls">
      <img src="images/tip.png" alt=""><br>
      <textarea placeholder="说点什么吧..." id="area" cols="30" rows="10" maxlength="200"></textarea>
      <div>
        <span class="useCount">0</span>
        <span>/</span>
        <span>200</span>
        <button id="send">发布</button>
      </div>
    </div>
    <div class="contentList">
      <ul id="list">
      </ul>
    </div>
  </div>
  <script src="./index.js"></script>
</body>

</html>

css代码

* {
  margin: 0;
  padding: 0;
}

ul {
  list-style: none;
}

.w {
  width: 900px;
  margin: 0 auto;
}

.controls textarea {
  width: 878px;
  height: 100px;
  resize: none;
  border-radius: 10px;
  outline: none;
  padding-left: 20px;
  padding-top: 10px;
  font-size: 18px;
}

.controls {
  overflow: hidden;
}

.controls div {
  float: right;
}

.controls div span {
  color: #666;
}

.controls div .useCount {
  color: red;
}

.controls div button {
  width: 100px;
  outline: none;
  border: none;
  background: rgb(0, 132, 255);
  height: 30px;
  cursor: pointer;
  color: #fff;
  font: bold 14px '宋体';
  transition: all 0.5s;
}

.controls div button:hover {
  background: rgb(0, 225, 255);
}

.controls div button:disabled {
  background: rgba(0, 225, 255, 0.5);
}

.contentList {
  margin-top: 50px;
}

.contentList ul {
  height: 800px;
}

.contentList li {
  /* display: none; */
  padding: 20px 0;
  border-bottom: 1px dashed #ccc;
  height: 60px;
}

.contentList li a {
  margin-left: 800px;
}

js代码

const data =[
            {uname:'张三',imgSrc:'images/03.jpg'},
            {uname:'李四',imgSrc:'images/03.jpg'},
            {uname:'王麻子',imgSrc:'images/03.jpg'},
            {uname:'小刘',imgSrc:'images/03.jpg'},

];
// 需求1:检测用户输入的字数
let textarea = document.querySelector('textarea');
let useCount = document.querySelector('.useCount');
let btn = document.querySelector('#send');
let ul = document.querySelector('#list');
// 注册input事件
textarea.addEventListener('input', function () {
  // 将输入文本长度赋值给对应的数值
  useCount.innerHTML = this.value.length;
});
// 需求2:输入不能为空
// 点击按钮之后判断 如果输入为空,则提示不能输入为空,并直接return
btn.addEventListener('click', function () {
  // 为了防止无意义的一些输入 利用字符串.trim()可以去掉首尾空格
  if (textarea.value.trim() === '') {
    // 当输入为空点击发布按钮以后 将输入内容清空 计数器也变为0
    textarea.value = '';
    useCount.innerHTML = 0;
    return alert('内容不能为空');
  }
// 随机函数
  function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  let index = getRandom(0, data.length - 1);
  // 需求3 新增留言 应写在点击事件内部
  // 创建一个小li 然后里面通过innerHTML追加数据
  let li = document.createElement('li');
  li.innerHTML = `
    <div class="info">
      <img class="imgs" src=${data[index].imgSrc}>
      <span class="username">${data[index].uname}</span>
      <button class="del">×</button>
      <div class="content">${textarea.value}</div>
      <div class="send-time">${new Date().toLocaleString()}</div>
    </div>
  `
// 需求4:删除事件必须写在点击事件里面
// 删除事件应该放在追加ul的前面这样创建元素的同时顺便绑定了点击事件

  let del = li.querySelector('.del');
  del.addEventListener('click', function () {
    // 删除操作 删除li 父元素.removeChild(子元素)
    ul.removeChild(li);
  });
// 追加给父元素ul ,用父元素.insertBefore(插入到当前元素的前面)
  ul.insertBefore(li, ul.children[0]);
// 需求5:重置
// 发布完一条消息后将表单的内容重置为空
  textarea.value = '';
  useCount.innerHTML = 0;
});

拓展:按下回车键发布信息
这里需要用到事件对象来实现,通过文本输入框的'keyup'(按键弹起)事件的key属性值,来判断当前用户输入键盘的类型,只要event.key === 'Enter',就调用btn.click()方法,自动触发发布按钮。

注意这里不宜使用keydown属性,使用keydown则会导致文本输入框的内容无法清空,始终有回车键存在于文本输入框内。

textarea.addEventListener('keyup',function(event){
           // 只要 event.key === 'Enter'
           if (event.key === 'Enter'){
             // 回车发布新闻 与点击发布按钮效果等价
              // 回车后 自动触发点击按钮
              btn.click() 
           }       
         })

效果:


 

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

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

相关文章

NLP预训练模型-GPT-3

ChatGPT GPT-3是OpenAI开发的一个自然语言处理&#xff08;NLP&#xff09;预训练模型。GPT代表“生成式预训练变换器”&#xff08;Generative Pretrained Transformer&#xff09;。GPT-3是GPT系列的第三代模型&#xff0c;是一种采用了深度学习技术的强大语言模型&#xff…

C++:类与对象完结篇

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;运算符重载》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 重新认识构造函数1.初始化列表2.explicit关键字 static成员1.sta…

通信原理(1)--信息的度量,通信系统的性能指标

通信原理(1)–信息的度量&#xff0c;通信系统的性能指标 1.1通信的基本概念 消息、信息与信号通信系统的组成模型数字通信的特点通信系统的分类通信的方式 1.1.1通信的发展 1.1.2消息、信息与信号 消息的定义 消息是通信系统要传输的对象&#xff0c;包含连续消息和离散…

车控操作系统

车控操作系统 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看…

从 Android 恢复已删除文件的 3 种简单方法

如何从 Android 恢复已删除的文件&#xff1f;毫不犹豫&#xff0c;有些人可能会认为从 Google 备份恢复 Android 文件太容易了。但是&#xff0c;如果删除的文件未同步到您的帐户或未备份怎么办&#xff1f;您错误的恢复可能会永久删除您想要的数据。因此&#xff0c;我们发布…

seatable部署之后network error【seatable】

这里写自定义目录标题 问题汇总 问题汇总 seatable服务部署后&#xff0c;组件显示正常运行&#xff0c;创建表单&#xff0c;显示Network error 点击错误信息&#xff0c;查看其跳转至另一个页面

数据结构----顺序表

在学习顺序表之前&#xff0c;我们先来了解一下数据结构。 数据是什么呢&#xff1f; 我们在生活中常见的名字&#xff0c;数字&#xff0c;性别等都属于数据。 结构又是什么呢&#xff1f; 在计算机中&#xff0c;结构就是用来保存数据的方式。 总的来说&#xff0c;数据…

【抽代复习笔记】13-群(七):变换群引理

引理&#xff1a;考虑等边三角形123—— 这个等边三角形的对称性可用(1),(12),(13),(23),(123),(132)表示&#xff0c;其中&#xff1a; (1)表示这个等边三角形绕着其中心点旋转360/720/.../360n&#xff0c;得到的图形与原图形完全重合的旋转对称变换&#xff1b; (12)表示这…

selenium_使用XPATH定位

selenium_使用XPATH定位 """需求&#xff1a;1. 使用绝对路径定位 用户名 输入 admin2. 暂停2秒钟3. 使用相对路径定位 密码框 输入 123方法&#xff1a;driver.find_element_by_xpath() """# 导包 from selenium import webdriver from time im…

Elasticsearch常用查询语法及RestClient操作

DSL Query基本语法 1&#xff0c;查询所有数据matchall&#xff08;当然并不是会显示所有数据&#xff09; #查询所有数据 GET /索引名/_search {"query": {"查询类型": {"查询条件":"条件值"}} }2&#xff0c;全文搜索检索-分词搜索…

第07-4章 网络层详解

7.1 网络层协议 IP协议ARP&#xff08;地址解析协议&#xff09;RARP&#xff08;反向地址解析协议&#xff09;ICMP&#xff08;互联网控制消息协议&#xff09; 7.2 IP协议详解 7.2.1 IP协议功能 寻址和路由传递服务&#xff08;不可靠&#xff0c;尽最大努力&#xff0c…

牛客小白月赛91 ----- Bingbong的回文路径 ---- 题解

Bingbong的回文路径&#xff1a; 题目描述&#xff1a; 思路解析&#xff1a; 现在有一棵树&#xff0c;树上每个结点上都有一个小写字母&#xff0c;那么如果唯一确定了x和y两个结点&#xff0c;那么就唯一确定了一个字符串路径&#xff08;最短路径&#xff09;。 -现在给出…

linux内核初始化成功后是如何过渡到android初始化的

Android用的linux内核&#xff0c;以完成OS该有的功能&#xff0c;例如&#xff0c;文件系统&#xff0c;网络&#xff0c;内存管理&#xff0c;进程调度&#xff0c;驱动等 &#xff0c;向下管理硬件资源向上提供系统调用。另一些Android特有驱动也放在内核之中。 当linux内核…

Vue3+TS版本Uniapp:封装uni.request请求配置

作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 封装请求配置项 封装拦截器封装uni.request 封装拦截器 uniapp的封装逻辑不同于Vue3项目中直接使用axios.create()方法创建实例&#xff08;在create方法中写入请求…

ChatGPT基础(三) 让ChatGPT回答质量提高十倍的提示词模版

上篇文章介绍了ChatGPT使用提示词的一些方法策略和如何优化我们的提示词。这里呢&#xff0c;我介绍一下参照大佬的方法总结的一个提示词的一个用法的模板。使用这个模板之后&#xff0c;我们的提问和获得答案的效率和收集素材的完整度能提高很多。 首先我介绍一下这个模板&am…

实战|哈尔滨等保2.0 Linux主机测评过程之身份鉴别

一、身份鉴别 a)应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换。 输入 more /etc/shadow,得知系统所有用户&#xff0c;此语句字段格式有九段。 第一字段&#xff1a;用户名&#xff08;也被称为登录名…

Nature Communications 构筑了具备优异形状记忆功能的聚合物材料

2024年2月29日&#xff0c;华东理工大学化学与分子工程学院、费林加诺贝尔奖科学家联合研究中心曲大辉教授团队在形状记忆功能聚合物材料研究中取得新进展&#xff0c;相关研究成果发表于《自然通讯》&#xff0c;这项研究取得了在形状记忆功能聚合物材料领域的新进展。研究团队…

国内ai人工智能软件大全

很多人一直在寻找一个稳定且可靠的全球AI大模型测试平台&#xff0c;希望它不仅真实可信&#xff0c;而且能提供稳定、快速的服务&#xff0c;不会频繁出现故障或响应缓慢。迄今为止&#xff0c;我已经尝试了国内外至少10个不同的服务站点。不幸的是&#xff0c;这些站点总是存…

【UE 材质】雨滴效果

在上一篇博客&#xff08;【UE 材质】表面湿润效果&#xff09;的基础上继续实现物体表面附加雨滴的效果 效果 步骤 1. 下载所需纹理 2. 创建一个材质并打开&#xff0c;添加如下节点&#xff0c;我们将纹理的RG通道输出的值和1组成一个三维向量&#xff0c;作为基本的法线效…

Shapley量化调峰成本?高比例可再生能源电力系统的调峰成本量化与分摊模型程序代码!

前言 在能源安全、环境污染和气候变化的大背景下&#xff0c;大力发展可再生能源是应对全球气候变化&#xff0c;实现“碳达峰、碳中和”和可持续发展的重大需求。截至2020年底&#xff0c;中国风电总装机容量为281GW&#xff0c;风力发电466.5TWh&#xff0c;同比增长约15%&a…