news 2026/4/15 17:53:35

运用VS Code前端开发工具完成微博发布案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
运用VS Code前端开发工具完成微博发布案例

要求:完成微博发布案例,运行结果如下:

解题思路:

1.创建HTML文件,运用内嵌式CSS完成输入框部分,运行效果如下:

2.创建英雄表,用于存放英雄名字与头像

3.获取元素有输入框,输入时随字数变化的0,发布按钮,还有发布的位置

4.各个元素绑定相应的事件:

输入框:读取所输入的内容和长度,长度传给输入时随字数变化的0,内容传给发布按钮

输入时随字数变化的0:接收输入框传给的长度,修改原本的0变为对应长度的数字,随输入框的变化而变化

发布按钮:读取输入框传给的内容,点击按钮后,输入框将变为空,长度为0,在div下方生成微博

5.使用事件委托处理删除按钮点击绑定到整个列表

更多细节请看源代码!

源代码:

<!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>微博发布</title> <style> * { 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 li { padding: 20px 0; border-bottom: 1px dashed #ccc; position: relative; } .contentList li .info { position: relative; } .contentList li .info span { position: absolute; top: 15px; left: 100px; font: bold 16px '宋体'; } .contentList li .info p { position: absolute; top: 40px; left: 100px; color: #aaa; font-size: 12px; } .contentList img { width: 80px; border-radius: 50%; } .contentList li .content { padding-left: 100px; color: #666; word-break: break-all; } .contentList li .the_del { position: absolute; right: 0; top: 0; font-size: 28px; cursor: pointer; } </style> </head> <body> <div class="w"> <!-- 操作的界面 --> <div class="controls"> <img src="./images/9.6/tip.png" alt="" /><br /> <!-- maxlength 可以用来限制表单输入的内容长度 --> <textarea placeholder="说点什么吧..." id="area" cols="30" rows="10" maxlength="200"></textarea> <div> <span class="useCount" id="useCount">0</span> <span>/</span> <span>200</span> <button id="send">发布</button> </div> </div> <!-- 微博内容列表 --> <div class="contentList"> <ul id="list"></ul> </div> </div> <!-- 添加了hidden属性元素会直接隐藏掉 --> <li hidden> <div class="info"> <img class="userpic" src="./images/9.6/03.jpg" /> <span class="username">死数据:百里守约</span> <p class="send-time">死数据:发布于 2020年12月05日 00:07:54</p> </div> <div class="content">死数据:111</div> <span class="the_del">X</span> </li> <script> // maxlength 是一个表单属性, 作用是给表单设置一个最大长度 // 模拟数据 - 王者荣耀英雄 let dataArr = [ { uname: '司马懿', imgSrc: './images/9.5/01.jpg' }, { uname: '女娲', imgSrc: './images/9.5/02.jpg' }, { uname: '百里守约', imgSrc: './images/9.5/03.jpg' }, { uname: '亚瑟', imgSrc: './images/9.5/04.jpg' }, { uname: '虞姬', imgSrc: './images/9.5/05.jpg' }, { uname: '张良', imgSrc: './images/9.5/06.jpg' }, { uname: '安其拉', imgSrc: './images/9.5/07.jpg' }, { uname: '李白', imgSrc: './images/9.5/08.jpg' }, { uname: '阿珂', imgSrc: './images/9.5/09.jpg' }, { uname: '墨子', imgSrc: './images/9.5/10.jpg' }, { uname: '鲁班', imgSrc: './images/9.5/11.jpg' }, { uname: '嬴政', imgSrc: './images/9.5/12.jpg' }, { uname: '孙膑', imgSrc: './images/9.5/13.jpg' }, { uname: '周瑜', imgSrc: './images/9.5/14.jpg' }, { uname: '老夫子', imgSrc: './images/9.5/15.jpg' }, { uname: '狄仁杰', imgSrc: './images/9.5/16.jpg' }, { uname: '扁鹊', imgSrc: './images/9.5/17.jpg' }, { uname: '马可波罗', imgSrc: './images/9.5/18.jpg' }, { uname: '露娜', imgSrc: './images/9.5/19.jpg' }, { uname: '孙悟空', imgSrc: './images/9.5/20.jpg' }, { uname: '黄忠', imgSrc: './images/9.5/21.jpg' }, { uname: '百里玄策', imgSrc: './images/9.5/22.jpg' }, ]; // 1. 获取元素 let area = document.querySelector('#area'); let useCount = document.querySelector('.useCount'); let send = document.querySelector('#send'); let list = document.querySelector('#list'); // 2. 绑定输入事件 area.oninput = function () { // 2.1 获取输入框的值 let value = area.value; // 2.2 计算输入框的值的长度 let len = value.length; // 2.3 把长度赋值给 useCount useCount.innerHTML = len; } // 3. 点击发布按钮, 把输入框的值添加到列表中 send.onclick = function () { // 3.1 获取输入框的值 let value = area.value.trim(); // 3.2 获取输入框的值的长度 let len = value.length; // 3.3 判断输入框的值是否为空 if (len == 0) { alert('请输入内容'); return; } // 3.4 判断输入框的值的长度是否大于200 if (len > 200) { alert('输入框的值不能大于200'); return; } // 3.5 随机选择一个用户 let randomIndex = Math.floor(Math.random() * dataArr.length); let randomUser = dataArr[randomIndex]; // 3.6 获取当前时间并格式化 let now = new Date(); let year = now.getFullYear(); let month = (now.getMonth() + 1).toString().padStart(2, '0'); let day = now.getDate().toString().padStart(2, '0'); let hour = now.getHours().toString().padStart(2, '0'); let minute = now.getMinutes().toString().padStart(2, '0'); let second = now.getSeconds().toString().padStart(2, '0'); let timeStr = `${year}年${month}月${day}日 ${hour}:${minute}:${second}`; // 3.7 创建一个新的 li 元素 let newLi = document.createElement('li'); // 3.8 把输入框的值添加到 li 元素中 newLi.innerHTML = ` <div class="info"> <img class="userpic" src="${randomUser.imgSrc}" /> <span class="username">${randomUser.uname}</span> <p class="send-time">发布于 ${timeStr}</p> </div> <div class="content">${value}</div> <span class="the_del">X</span> `; // 3.9 把 li 元素添加到 ul 中 list.insertBefore(newLi, list.children[0]); // 3.10 清空输入框的值并重置计数器 area.value = ''; useCount.innerHTML = '0'; } // 4. 使用事件委托处理删除按钮点击 - 绑定到整个列表 list.addEventListener('click', function (e) { // 4.1 判断点击的是不是 X 按钮 if (e.target.className == 'the_del') { // 4.2 获取点击的 X 按钮所在的 li 元素 let li = e.target.parentNode; // 4.3 删除 li 元素 list.removeChild(li); } }) </script> </body> </html>

运行结果:

实验到此结束!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 4:40:19

HG-ha/MTools快速部署:Windows WSL2环境下Linux版MTools运行

HG-ha/MTools快速部署&#xff1a;Windows WSL2环境下Linux版MTools运行 1. 为什么要在WSL2里跑Linux版MTools&#xff1f; 你可能已经试过在Windows原生系统上安装MTools&#xff0c;界面确实漂亮&#xff0c;功能也全——但有个现实问题&#xff1a;很多AI工具在Windows下要…

作者头像 李华
网站建设 2026/4/10 22:25:43

光线不均怎么办?科哥镜像自带亮度补偿功能

光线不均怎么办&#xff1f;科哥镜像自带亮度补偿功能 1. 为什么光线不均会让人脸融合效果“翻车” 你有没有试过这样&#xff1a;精心挑了一张帅气的正脸照当源人脸&#xff0c;又选了张风景优美的背景图当目标图像&#xff0c;结果融合出来——人脸一半亮得发白&#xff0c…

作者头像 李华
网站建设 2026/4/15 12:18:03

当技术圈的“水货”焦虑遇上AI时代新赛道

最近一篇《入职美团了&#xff0c;但其实我是水货怎么办……》的帖子刷屏了&#xff01;没想到一石激起千层浪&#xff0c;评论区秒变大型“水货”认亲现场&#xff1a; “同款水货1&#xff0c;每天在工位如履薄冰” “我也巨水&#xff0c;leader让我写技术方案&#xff0c;憋…

作者头像 李华
网站建设 2026/4/14 6:37:06

告别环境配置烦恼,YOLOv9镜像让目标检测简单高效

告别环境配置烦恼&#xff0c;YOLOv9镜像让目标检测简单高效 你是否经历过这样的场景&#xff1a;花一整天配环境&#xff0c;结果卡在CUDA版本不兼容、PyTorch编译失败、OpenCV安装报错&#xff1b;好不容易跑通demo&#xff0c;换台机器又得重来一遍&#xff1b;想快速验证一…

作者头像 李华
网站建设 2026/4/11 9:54:40

像差优化迷思:为什么你的Zemax默认评价函数总在‘假装工作’?

像差优化迷思&#xff1a;为什么你的Zemax默认评价函数总在‘假装工作’&#xff1f; 当你在Zemax中点击"优化"按钮时&#xff0c;是否曾怀疑过软件只是在敷衍了事&#xff1f;那些看似完美的评价函数曲线背后&#xff0c;可能隐藏着光学设计师最常忽视的系统性陷阱。…

作者头像 李华
网站建设 2026/4/15 9:09:50

为什么我推荐BSHM?人像抠图真实体验分享

为什么我推荐BSHM&#xff1f;人像抠图真实体验分享 前言&#xff1a;我是一名专注AI工程落地的开发者&#xff0c;日常要为内容团队、电商运营和设计部门提供稳定可靠的图像处理能力。过去半年&#xff0c;我测试过12款人像抠图方案——从在线API到开源模型&#xff0c;从轻量…

作者头像 李华