当前位置: 首页 > news >正文

Day50阶段案例--登录页与首页制作

首页

<script>// 1.获取第一个小liconst li1 = document.querySelector('.xtx_navs li:first-child')const li2 = li1.nextElementSibling// 2.做过渲染函数来封装,因为后续更新数据需要重复渲染function render() {// 2.1读取本地存储的用户名const uname = localStorage.getItem('xtx-username')if (uname) {li1.innerHTML = `<a href="javascript:;"><i class="iconfont icon-user">${uname}</i></a>`li2.innerHTML = `<a href="javascript:;">退出登录</a>`} else {li1.innerHTML = '<a href="/login.html">请先登录</a>'li2.innerHTML = '<a href="/register.html">免费注册</a>'}}render()// 2.点击退出登录模块li2.addEventListener('click', function () {// 删除本地存储数据localStorage.removeItem('xtx-username')// 重新渲染render()})</script>

登录页

<script>//1.发送短信验证码模块const code = document.querySelector('.code')let flag = true//通过一个变量来控制  节流阀//1.1 点击事件code.addEventListener('click', function () {if (flag) {flag = falselet i = 5// 点击完之后立马触发code.innerHTML = `0${i}秒之后重新获取`let timerId = setInterval(function () {i--code.innerHTML = `0${i}秒之后重新获取`if (i === 0) {clearInterval(timerId)// 重新获取code.innerHTML = `重新获取`// 到时间了 开启flagflag = true}}, 1000)}})// 2.验证的是用户名// 2.1获取用户名表单const username = document.querySelector('[name=username]')// 2.2是用change事件 值发生变化时生效username.addEventListener('change', verifyName)// 2.3封装verifyName函数function verifyName() {const span = username.nextElementSibling// 2.4定规则 用户名const reg = /^[a-zA-Z0-9-_]{6,9}$/if (!reg.test(username.value)) {span.innerHTML = '输入不合法,请输入6~16位'return false}//2.5 合法的,就清空spanspan.innerHTML = ''return true}// 3.验证的是手机号// 2.1获取用户名表单const phone = document.querySelector('[name=phone]')// 2.2是用change事件 值发生变化时生效phone.addEventListener('change', verifyphone)// 2.3封装verifyName函数function verifyphone() {const span = phone.nextElementSibling// 2.4定规则 用户名const reg = /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/if (!reg.test(phone.value)) {span.innerHTML = '输入不合法,请输入正确的11位手机号'return false}//2.5 合法的,就清空spanspan.innerHTML = ''return true}// 4.验证的是验证码// 2.1获取用户名表单const codeIput = document.querySelector('[name=code]')// 2.2是用change事件 值发生变化时生效codeIput.addEventListener('change', verifycode)// 2.3封装verifyName函数function verifycode() {const span = codeIput.nextElementSibling// 2.4定规则 用户名const reg = /^\d{6}$/if (!reg.test(codeIput.value)) {span.innerHTML = '输入不合法,请输入正确的6位数字'return false}//2.5 合法的,就清空spanspan.innerHTML = ''return true}// 5.验证的是密码// 2.1获取用户名表单const password = document.querySelector('[name=password]')// 2.2是用change事件 值发生变化时生效password.addEventListener('change', verifyPwd)// 2.3封装verifyName函数function verifyPwd() {const span = password.nextElementSibling// 2.4定规则 用户名const reg = /^[a-zA-Z0-9_]{6,20}$/if (!reg.test(password.value)) {span.innerHTML = '输入不合法,请输入正确的6位数字'return false}//2.5 合法的,就清空spanspan.innerHTML = ''return true}// 5.密码的再次验证// 2.1获取用户名表单const confirm = document.querySelector('[name=confirm]')// 2.2是用change事件 值发生变化时生效confirm.addEventListener('change', verifyConfirm)// 2.3封装verifyName函数function verifyConfirm() {const span = confirm.nextElementSibling// 当前表单的值不等于密码框里的值  就是错误的if (confirm.value !== password.value) {span.innerHTML = '两次密码输入不一致'return false}//2.5 合法的,就清空spanspan.innerHTML = ''return true}// 7.我同意模块const queren = document.querySelector('.icon-queren')queren.addEventListener('click', function () {this.classList.toggle('icon-queren2')})// 8.提交模块const form = document.querySelector('form')form.addEventListener('submit', function (e) {// 判断是否勾选了同意按钮,如果有icon-queren2说明勾选了,否则就是没勾if (!queren.classList.contains('icon-queren2')) {alert('请勾选同意协议')// 阻止提交的默认行为e.preventDefault()}// 9.判断环节// 依次判断 上面的每个框框是否都通过 只要有一个不通过就阻止提交if (!verifyName()) e.preventDefault()if (!verifyConfirm()) e.preventDefault()if (!verifycode()) e.preventDefault()if (!verifyPwd()) e.preventDefault()if (!verifyphone()) e.preventDefault()})</script>

image

http://www.jsqmd.com/news/625252/

相关文章:

  • Yolov8在RK3588上进行自定义目标检测(二)
  • 2025届最火的五大AI辅助写作神器推荐榜单
  • Rust crate 构建与依赖管理
  • yolov5与yolov8的区别
  • STM32F103C8T6驱动OV2640摄像头:从1FPS到3FPS的性能优化实战(附源码)
  • 如何将PerfView与Azure DevOps集成:实现持续性能监控的完整指南
  • Pixel Epic · Wisdom Terminal 计算机视觉应用:YOLOv5目标检测模型协同优化案例
  • 员工轨迹软件有哪些?3类主流产品对比与企业选型指南 - 数智AI前沿
  • 超越传统检测:VMDE虚拟环境识别技术的深度解析与实战应用
  • 从Bulk CMOS到先进工艺:Sentaurus TCAD中几何结构与掺杂如何‘捏’出你的Ion和Ioff
  • MySQL优化全攻略:索引、SQL与分库分表的最佳实践记
  • 如何快速上手Remax:5分钟创建你的第一个跨平台小程序
  • KDE桌面Mac化实战:从Launchpad到全局菜单的完整改造指南
  • 重新學習日語 2026 年版
  • 抖音批量下载神器:5分钟搞定无水印视频批量下载
  • Yolov8在RK3588上进行自定义目标检测(四)
  • Go语言的sync.RWMutex中的分析源码
  • Razer-macos核心组件深度剖析:设备管理器与动画系统
  • 终极免费方案:如何让NVIDIA显卡完美解决显示器色彩过饱和问题
  • Klib未来展望:探索轻量级C库的无限可能与社区共建路线图
  • 旧安卓手机别扔!手把手教你搭建个人隐私安全检测环境(Kali+Metasploit实战)
  • LangGraph实战:Supervisor与Swarm多代理架构选型指南(附避坑清单)
  • 别再手动转换了!用这个批处理脚本,让Keil5编译后自动生成.elf文件(附完整配置流程)
  • 我不是狐狸,我是那Harness Engineering攀
  • 从REST到Serverless+WebAssembly:后端性能优化实战
  • FreakStudio炭
  • 2026年最新指南:教育部抽查论文AI率,4个检测工具+1个降AI神器必收藏 - 降AI实验室
  • 我不是狐狸,我是那Harness Engineering膳
  • AI Agent 跑完任务怎么通知你?我写了个微信推送服务谮
  • 数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)