JavaScript复习小案例

JavaScript实现简易留言板

效果图

完整代码 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>留言板</title><style>body {background-color: #f4f4f4;}/* 外部容器样式设置 */.wrapper {width: 400px;height: 500px;background-image: url(../img/689334441.jpg);background-size: contain;border-radius: 15px;opacity: .6;margin: auto;}/* 内部容器样式设置 */.inner {width: 300px;height: 500px;margin: 50px auto;}/* 提交留言按钮样式设置 */#student {outline: none;resize: none;margin-top: 20px;}#btn {display: block;width: 100px;height: 40px;margin: 20px 0 20px 0;font-size: 17px;color: rgb(90, 88, 88);border-radius: 8px;outline: none;border: 1px solid gray;}p {font-size: 20px;font-weight: bold;}#text {float: right;margin-top: 10px;font-size:14px;}#text-now {color: #777;}ul {margin-top: 10px;}ul>li {width: 100%;height: 35px;line-height: 35px;border-bottom: 1px solid #999;font-size: 18px;font-weight:bold;}ul>li>div {float: right;}ul>li>div>button {width: 50px;height: 25px;color: #333;margin-left: 5px;}</style></head><body><div class="wrapper"><div class="inner"><textarea name="student" id="student" cols="40" rows="10"></textarea><p id="text">已输入字数:<span id="text-now">0</span>/100</p><input type="button" id="btn" value="提交留言"><p>留言列表</p><ul></ul></div></div></body>
</html><script>var btn = document.getElementById('btn');var msg = document.getElementById('student');var ul = document.querySelector('ul');var li = ul.children;var del = document.getElementById('del');var text = document.getElementById('text-now');btn.onclick = function () {if (msg.value == '') {alert('留言不可为空哦!');} else {var li = document.createElement('li');var date = new Date();var time = date.toLocaleDateString();li.innerHTML = msg.value + '<div>' + '<span>' + time + '</span>' + '<button>' + '删除' + '</button>' + '</div>';var length = (msg.value).length;if (length > 100) {alert('当前输入字符长度不可超过100!');msg.value = '';} else {text.innerText = length;ul.insertBefore(li, ul.children[0]);msg.value = '';}ul.addEventListener('click', function (event) {if (event.target.nodeName == 'BUTTON') {ul.removeChild(event.target.parentNode.parentNode);}}, false);}}</script>

HTML结构

 <!-- 外部容器 --><div class="wrapper"><!-- 内部容器 --><div class="inner"><!-- 输入留言区域 --><textarea name="student" id="student" cols="40" rows="10"></textarea><!-- 统计文本域中的字数 --><p id="text">已输入字数:<span id="text-now">0</span>/100</p><!-- 提交留言按钮 --><input type="button" id="btn" value="提交留言"><p>留言列表</p><!-- 呈现留言区域 --><ul></ul></div></div>

CSS样式

 <style>body {background-color: #f4f4f4;}/* 外部容器样式设置 */.wrapper {width: 400px;height: 500px;background-image: url(../img/689334441.jpg);background-size: contain;border-radius: 15px;opacity: .6;margin: auto;}/* 内部容器样式设置 */.inner {width: 300px;height: 500px;margin: 50px auto;}/* 提交留言按钮样式设置 */#student {outline: none;resize: none;margin-top: 20px;}#btn {display: block;width: 100px;height: 40px;margin: 20px 0 20px 0;font-size: 17px;color: rgb(90, 88, 88);border-radius: 8px;outline: none;border: 1px solid gray;}p {font-size: 20px;font-weight: bold;}#text {float: right;margin-top: 10px;font-size:14px;}#text-now {color: #777;}/* 呈现留言区域样式设置 */ul {margin-top: 10px;}ul>li {width: 100%;height: 35px;line-height: 35px;border-bottom: 1px solid #999;font-size: 18px;font-weight:bold;}ul>li>div {float: right;}ul>li>div>button {width: 50px;height: 25px;color: #333;margin-left: 5px;}</style>

JS

    <!-- 实现留言功能的JS部分 --><script>// 获取提交留言按钮var btn = document.getElementById('btn');// 获取留言板var msg = document.getElementById('student');// 获取呈现留言区域var ul = document.querySelector('ul');// 获取每一个livar li = ul.children;// 获取删除留言按钮var del = document.getElementById('del');// 获取统计文本域中文字的元素var text = document.getElementById('text-now');// 为提交留言按钮添加单击事件btn.onclick = function () {if (msg.value == '') {alert('留言不可为空哦!');} else {var li = document.createElement('li');var date = new Date();var time = date.toLocaleDateString();li.innerHTML = msg.value + '<div>' + '<span>' + time + '</span>' + '<button>' + '删除' + '</button>' + '</div>';var length = (msg.value).length;if (length > 100) {alert('当前输入字符长度不可超过100!');msg.value = '';} else {text.innerText = length;ul.insertBefore(li, ul.children[0]);msg.value = '';}//   通过事件的委派实现删除功能,事件的委派也是利用到了事件的冒泡,通过给父元素绑定事件解决问题ul.addEventListener('click', function (event) {if (event.target.nodeName == 'BUTTON') {ul.removeChild(event.target.parentNode.parentNode);}}, false);}}</script>

登录-填写密码

效果图

<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><style>div {width: 600px;margin: 100px auto;}.message {display: inline-block;font-size: 12px;color: #999;background: url(images/mess.png) no-repeat left center;padding-left: 20px;}.wrong {color: red;background-image: url(images/wrong.png);}.right {color: green;background-image: url(images/right.png);}</style>
</head><body><div class="register"><input type="password" class="ipt"><p class="message">请输入6~16位密码</p></div><script>// 首先判断的事件是表单失去焦点 onblur// 如果输入正确则提示正确的信息颜色为绿色小图标变化// 如果输入不是6到16位,则提示错误信息颜色为红色 小图标变化// 因为里面变化样式较多,我们采取className修改样式// 1.获取元素// 获取表单var ipt = document.querySelector('.ipt');// 获取提示信息var message = document.querySelector('.message');//2. 注册事件 失去焦点ipt.onblur = function() {// 根据表单里面值的长度 ipt.value.lengthif (this.value.length < 6 || this.value.length > 16) {console.log('错误');message.className = 'message wrong';message.innerHTML = '您输入的位数不对要求6~16位';} else {message.className = 'message right';message.innerHTML = '您输入的正确';}}</script>
</body>

tab栏切换

效果图

<body><div class="tab"><div class="tab_list"><ul><li class="current">商品介绍</li><li>规格与包装</li><li>售后保障</li><li>商品评价(50000)</li><li>手机社区</li></ul></div><div class="tab_con"><div class="item" style="display: block;">商品介绍模块内容</div><div class="item">规格与包装模块内容</div><div class="item">售后保障模块内容</div><div class="item">商品评价(50000)模块内容</div><div class="item">手机社区模块内容</div></div></div><script>// 获取元素var tab_list = document.querySelector('.tab_list');var lis = tab_list.querySelectorAll('li');var items = document.querySelectorAll('.item');// for循环绑定点击事件for (var i = 0; i < lis.length; i++) {// 开始给5个小li 设置索引号 lis[i].setAttribute('index', i);lis[i].onclick = function() {// 1. 上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式// 干掉所有人 其余的li清除 class 这个类for (var i = 0; i < lis.length; i++) {lis[i].className = '';}// 留下我自己 this.className = 'current';// 2. 下面的显示内容模块var index = this.getAttribute('index');console.log(index);// 干掉所有人 让其余的item 这些div 隐藏for (var i = 0; i < items.length; i++) {items[i].style.display = 'none';}// 留下我自己 让对应的item 显示出来items[index].style.display = 'block';}}</script>
</body>

http://t.csdnimg.cn/vx3PF

发送短信案例

效果图

<body>手机号码: <input type="number"> <button>发送</button><script>// 按钮点击之后,会禁用 disabled 为true // 同时按钮里面的内容会变化, 注意 button 里面的内容通过 innerHTML修改// 里面秒数是有变化的,因此需要用到定时器// 定义一个变量,在定时器里面,不断递减// 如果变量为0 说明到了时间,我们需要停止定时器,并且复原按钮初始状态var btn = document.querySelector('button');var time = 3; // 定义剩下的秒数btn.addEventListener('click', function() {btn.disabled = true; //禁用var timer = setInterval(function() {if (time == 0) {// 清除定时器和复原按钮clearInterval(timer);btn.disabled = false;btn.innerHTML = '发送';} else {btn.innerHTML = '还剩下' + time + '秒';time--;}}, 1000);})</script>
</body>

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

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

相关文章

建造者模式深入理解:演示建造单个和多个产品的实践,结合模板模式;支持并行构建,通俗易懂

首先呢看下建造者的定义是什么样的&#xff0c;先读一遍 建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它主要用于将一个复杂对象的构建过程与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表现形式。这种模式…

微软Office 2019 批量授权版

软件介绍 微软办公软件套件Microsoft Office 2019 专业增强版2024年1月批量许可版更新推送&#xff01;Office2019正式版2018年10月份推出&#xff0c;主要为多人跨平台办公与团队协作打造。Office2019整合对过去三年在Office365里所有功能&#xff0c;包括对Word、Excel、Pow…

【PyQt小知识 - 7】:QLineEdit设置输入的文本以圆点或星号等方式显示

文章目录 setEchoMode setEchoMode 在PyQt中&#xff0c;QLineEdit是一种用于接收用户输入的小部件&#xff08;widget&#xff09;。setEchoMode是QLineEdit类中的一个方法&#xff0c;可以用于设置文本输入框中的文本显示模式。它接受一个参数来指定要使用的模式。 setEcho…

GEE查看MODIS的NDVI、EVI产品并生成逐日/逐月NDVI曲线

目录 MOD13Q1MOD09GA计算逐日/逐月NDVI生成曲线参考博文 MOD13Q1 MOD13Q1有两个产品&#xff1a;NDVI和EVI&#xff0c;每16天为全球提供&#xff0c;分辨率为250M 通过查看时间&#xff0c;该NDVI产品是16天一景 MOD09GA 提供逐日的表面反射率产品&#xff0c;分辨率为500m…

09Bean的生命周期/作用域不同管理方式不同/自己new的对象纳入Spring容器管理

Spring其实就是一个管理Bean对象的工厂。它负责对象的创建&#xff0c;对象的销毁等。 所谓的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程。 Bean的生命周期之5步 ● 第一步&#xff1a;实例化Bean(无参构造方法执行) ● 第二步&#xff1a;Bean属性赋值(注…

一文搞懂MongoDB

简介 什么是MongoDB MongoDB是一个基于分布式文件存储的NoSQL数据库&#xff0c;基于C语言开发而成的。它以文档存储格式&#xff08;BSON&#xff09;为基础&#xff0c;是由字段和值对组成的数据结构。 扩展&#xff1a; BSON&#xff08;Binary JSON&#xff09;是一种二进…

力扣日记1.11-【二叉树篇】450. 删除二叉搜索树中的节点

力扣日记&#xff1a;【二叉树篇】450. 删除二叉搜索树中的节点 日期&#xff1a;2024.1.11 参考&#xff1a;代码随想录、力扣 450. 删除二叉搜索树中的节点 题目描述 难度&#xff1a;中等 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key…

区间预测 | Matlab实现CNN-BiLSTM-KDE的卷积双向长短期神经网络结合核密度估计多变量时序区间预测

区间预测 | Matlab实现CNN-BiLSTM-KDE的卷积双向长短期神经网络结合核密度估计多变量时序区间预测 目录 区间预测 | Matlab实现CNN-BiLSTM-KDE的卷积双向长短期神经网络结合核密度估计多变量时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CNN-BiLSTM-KDE多…

【python】python新年烟花代码【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 新年的钟声即将敲响&#xff0c;为了庆祝这个喜庆的时刻&#xff0c;我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。 一、效果图&#xff1a; 二…

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性&#xff0c;它可以支持国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…

R语言下载安装及VScode配置

文章目录 1. R 下载和安装1.1 下载1.2 安装 2. VSCODE 配置2.1 安装R拓展2.2 安装R语言辅助功能包2.3 DEBUG 1. R 下载和安装 1.1 下载 网址&#xff1a;https://www.r-project.org/ 选择一个镜像地址下载 选择对应的版本 一般选择base即可 1.2 安装 下载安装包后按提示安装…

jupyter notebook 配置conda 虚拟环境python

conda创建python环境 conda create -n openvoice python3.9 激活环境 source activate openvoice 在虚拟环境中安装ipykernel pip install ipykernel 添加虚拟环境进到 jupyter notebook python -m ipykernel install --user --name openvoice --display-name openvoice …

Springboot+vue的毕业论文管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的毕业论文管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的毕业论文管理系统&#xff0c;采用M&#xff08;model&…

QT延时五种实现方法

QT中没有提供专用延时函数&#xff0c;但有多种实现方法&#xff0c;各有特点&#xff0c;如下所示&#xff1a; 一.阻塞方式 1.多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait()进行延时处理。 Sleep不会释放对象锁&#xff0c;其…

第3章:python的判断语句

学一门语言&#xff0c;无外乎多敲&#xff0c;多用&#xff0c;记得回顾昨天写过的代码呀 布尔类型和比较运算符 布尔类型的定义 使用比较运算符进行比较运算得到布尔类型的结果 比较运算符 """ 演示布尔类型的定义 以及比较运算符的应用 ​ """…

并发前置知识一:线程基础

一、通用的线程生命周期&#xff1a;“五态模型” 二、java线程有哪几种状态&#xff1f; New&#xff1a;创建完线程Runable&#xff1a;start(),这里的Runnable包含操作的系统的Running&#xff08;运行状态&#xff09;和Ready&#xff08;上面的可运行状态&#xff09;Blo…

vscode配置Todo Tree插件

一、在VSCode中安装插件Todo Tree ​​​​ 二、按下快捷键ctrlshiftP&#xff0c;输入setting.jspn 选择相应的配置范围&#xff0c;我们选择的是用户配置 Open User Settings(JSON)&#xff0c;将以下代码插入其中。 {//todo-tree 标签配置从这里开始 标签兼容大小写字母(…

强化学习9——免模型预测算法介绍(蒙特卡洛方法和时步差分方法)

对于大部分情况来说&#xff0c;环境是未知的&#xff0c;也就是说状态转移概率未知&#xff0c;对于这种情况的算法称为免模型预测算法。免模型算法与环境不断交互学习&#xff0c;但是需要大量的运算。 蒙特卡洛方法 蒙特卡罗方法通过重复随机抽选&#xff0c;之后运用统计…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中&#xff0c;可以用中文作为变量名&#xff0c;非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字&#xff0c;我们不能把它们用…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要&#xff1a;本文介绍了 GlobalSearch 函数的使用句式&#xff08;一&#xff09;、三个运行案例&#xff08;二&#xff09;、 GlobalSearch 函数的参数设置&#xff08;三&#xff09;、GlobalSearch 注意事项及必要说明&#xff08;五&#xff09;等内容。详细介绍如下&…