位置: IT常识 - 正文

【JavaScript】JS实用案例分享:输入智能提示 | 打字机输出效果(js示例)

编辑:rootadmin
【JavaScript】JS实用案例分享:输入智能提示 | 打字机输出效果

推荐整理分享【JavaScript】JS实用案例分享:输入智能提示 | 打字机输出效果(js示例),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js类的实现,javascript+,javascript js,js类的实现,javascript js,javascript js,js javascript,javascript js,内容如对您有帮助,希望把文章链接给更多的朋友!

CSDN话题挑战赛第2期 参赛话题:学习笔记

🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 博主的前端之路(源创征文一等奖作品):前端之行,任重道远(来自大三学长的万字自述) 🖥️ TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结) 🧑‍💼个人简介:大三学生,一个不甘平庸的平凡人🍬 👉 你的一键三连是我更新的最大动力❤️! 🏆分享博主自用牛客网🏆:一个非常全面的面试刷题求职网站,点击跳转🍬

文章目录前言1、输入智能提示效果演示案例需求JavaScript实现2、打字机输出效果演示案例需求JavaScript实现结语前言

最近博主一直在牛客网刷题巩固基础知识,牛客网不仅具有公司真题、专项练习、面试题库、在线编程等功能,还具有非常强大的AI模拟面试功能,简直是求职者的福音!

牛客网里的题库非常全面的,无论你是前端还是后端,是想要备考还是准备面试又或者是想要提高自己,你都能在牛客网上找到适合自己的题,赶快点击链接去注册登录吧:点我进入牛客网

牛客网牛客网

本篇文章所有示例来自于牛客网题库/在线编程/JS篇,这些都是前端开发中常用的功能,借此记录一下刷题过程,巩固基础!

1、输入智能提示效果演示

有以下HTML和CSS:

HTML结构

<div class="search"> <div> <!-- 调用suggest函数 --> <input type="text" class="js-input" oninput="suggest(['河南加入下雪群聊','河南疫情','河南大学','河南疫情最新消息','河南地图','河南卫视重阳奇妙游2022节目单','河南天气预报','河南省高校学生资助在线'])"> </div> <div class="js-suggest"> <ul></ul> </div></div>【JavaScript】JS实用案例分享:输入智能提示 | 打字机输出效果(js示例)

CSS样式

.search { position: relative;}.js-input { width: 450px; height: 22px; line-height: 22px; font-size: 16px; padding: 8px; border: 1px solid #cccccc; outline: none;}.js-suggest { width: 466px; font-size: 14px; border: 1px solid #cccccc; background: #ffffff; position: absolute; left: 0; top: 39px;}.js-suggest.hide { display: none;}.js-suggest ul { display: block; list-style: none; padding: 0; margin: 0;}.js-suggest ul li { color: #000; font: 14px arial; line-height: 25px; padding: 0 8px; position: relative; cursor: default;}.js-suggest ul li:hover { background: #f0f0f0;}案例需求当输入框的值发生变化时,调用suggest函数,用于显示/隐藏智能提示数据,参数items为一个字符串数组。当items中的字符串和输入框的值匹配时,将匹配的数据依次渲染在ul下的li节点中,并显示.js-suggest节点,否则移除ul下的所有li节点,并隐藏.js-suggest节点输入框的值需要移除两侧空白再进行匹配输入框的值为空时,按照全部不匹配处理字符串使用模糊匹配,比如"北大"能匹配"北大"和"北京大学",但不能匹配"大北京",即按照 /北.*?大.*?/ 这个正则进行匹配通过在.js-suggest节点上添加/移除 hide 这个class来控制该节点的隐藏/显示JavaScript实现function suggest(items) { const val = document.getElementsByClassName('js-input')[0].value.trim() const suggest = document.getElementsByClassName('js-suggest')[0] // 创建输入内容的正表达式:使用split将字符串转换成数组 -> 使用map映射生成新数组 -> 使用join将数组连接成字符串 const valReg = new RegExp(val.split('').map(v => special(v)).join('')) // 通过filter方法过滤出items中符合的项:符合的条件是用户输入内容不为空(val != '')并且与用户输入的内容匹配 const item = items.filter(i => val != '' && valReg.test(i)) // 如果item.length不为0,代表有匹配的数据,则执行: // suggest.classList['remove']('hide')相当于suggest.classList.remove('hide') 效果是删除hide这个class suggest.classList[item.length ? 'remove' : 'add']('hide') // 渲染列表 suggest.children[0].innerHTML = item.map(i => `<li>${i}</li>`).join('')}// 对特殊字符的处理function special(val) { // 如果val是()[].+/?*这类的特殊字符,则在它前面加上转义字符:\ // 为什么是\\${val},两个\?因为在模板字符串``中\也需要使用\转义 return `${'()[].+/?*'.indexOf(val) === -1 ? val : `\\${val}`}.*?`}

这个案例中需要注意的地方就是不要忘记对特殊字符的转义(实现special函数)。

知识点:

RegExp(正则表达式)split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。Element.classList 是一个只读属性,返回一个元素 class 属性的动态 DOMTokenList集合。这可以用于操作 class 集合。indexOf() 方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。2、打字机输出效果演示

有以下HTML和CSS:

HTML结构

<div class="content"> <span class="word color23">h</span> <span class="word color22">e</span> <span class="word color4">l</span> <span class="word color24">l</span> <span class="word color17">o</span> <span class="word color2">&nbsp;</span> <span class="word color9">w</span> <span class="word color3">o</span> <span class="word color1">r</span> <span class="word color23">l</span> <span class="word color15">d</span> <br> <span class="word color15">你</span> <span class="word color13">好</span> <span class="word color16">世</span> <span class="word color19">界</span> <span class="blink" id="jsBlink">|</span></div>

CSS样式

html,body { margin: 0;}.color1 { color: #E60012;}.color2 { color: #EB6100;}.color3 { color: #F39800;}.color4 { color: #FCC800;}.color5 { color: #FFF100;}.color6 { color: #CFDB00;}.color7 { color: #8FC31F;}.color8 { color: #22AC38;}.color9 { color: #009944;}.color10 { color: #009B6B;}.color11 { color: #009E96;}.color12 { color: #00A0C1;}.color13 { color: #00A0E9;}.color14 { color: #0086D1;}.color15 { color: #0068B7;}.color16 { color: #00479D;}.color17 { color: #1D2088;}.color18 { color: #601986;}.color19 { color: #920783;}.color20 { color: #BE0081;}.color21 { color: #E4007F;}.color22 { color: #E5006A;}.color23 { color: #E5004F;}.color24 { color: #E60033;}.word { font-size: 20px;}.content { text-align: center; font-size: 0;}.blink { font-size: 20px; animation: fade 500ms infinite; -webkit-animation: fade 500ms infinite;}@keyframes fade { from { opacity: 1.0; } 50% { opacity: 0; } to { opacity: 1.0; }}案例需求

页面上存在id为jsBlink的下划线闪动节点,请按照如下需求实现 output 函数

函数 output 接收一个字符串参数,每隔200毫秒在闪动节点之前逐个显示字符请新建span节点放置每个字符,其中span必须存在class “word”,并随机加上 color1 ~ color24 中的任一个class(请使用系统随机函数)每次输出指定字符串前,请将闪动节点之前的所有其他节点移除不要销毁或者重新创建闪动节点如果输出字符为空格、<、>,请分别对其进行HTML转义,如果是\n请直接输出<br />,其他字符不需要做处理上面展示的效果为 output('hello world\n你好世界') 之后的界面JavaScript实现function output(str) { const content = document.getElementsByClassName('content')[0] const jsBlink = document.getElementById('jsBlink') // 将闪动节点之前的所有其他节点移除 while (content.children.length > 0) { if (content.children[0] == jsBlink) { // 如果content第1个孩子是jsBlink,说明闪动节点之前的所有其他节点移除完毕,则跳出循环 break; } // 删除content中的指定节点 content.removeChild(content.children[0]); } let i = 0; const stl = setInterval(() => { if (str[i] == '\n') { const br = document.createElement('br') // 在content中的jsBlink之前插入节点br content.insertBefore(br, jsBlink) } else { const span = document.createElement('span') span.classList.add('word') span.classList.add(`color${Math.floor(Math.random() * 24 + 1)}`) switch (str[i]) { case ' ': span.innerHTML = '&nbsp' break; case '<': span.innerHTML = '&lt' break; case '>': span.innerHTML = '&gt' break; default: span.innerHTML = str[i] break; } content.insertBefore(span, jsBlink) } i++; if (i >= str.length) { // 清除定时器 clearInterval(stl) } }, 200)}// 调用测试output('hello world\n你好世界')

知识点:

Node.insertBefore() 方法在参考节点之前插入一个拥有指定父节点的子节点。结语

这篇文章的所有内容都出自于牛客网的JS篇题库:

牛客网的JS题库非常贴合实际的,在写的过程中自己查漏补缺,收获了很多,强烈将牛客网推荐给大家!

如果本篇文章对你有所帮助,还请客官一件四连!❤️

基础不牢,地动山摇! 快来和博主一起来牛客网刷题巩固基础知识吧!

本文链接地址:https://www.jiuchutong.com/zhishi/298939.html 转载请保留说明!

上一篇:Transformer中的Q/K/V理解(transformer中的token)

下一篇:卷积神经网络CNN-全连接层(卷积神经网络CNN实验报告)

  • 华为nova4e有耳机孔吗(华为nova4e耳机孔怎么换)

    华为nova4e有耳机孔吗(华为nova4e耳机孔怎么换)

  • 苹果手机怎样在图片上编辑文字(苹果手机怎样在图片上画圈标记)

    苹果手机怎样在图片上编辑文字(苹果手机怎样在图片上画圈标记)

  • 苹果录屏微信视频聊天没声音(苹果录屏微信视频无法存储)

    苹果录屏微信视频聊天没声音(苹果录屏微信视频无法存储)

  • 如何退出小米专注模式(小米 退出)

    如何退出小米专注模式(小米 退出)

  • b站绑了身份证会被找回吗(b站绑了身份证能改吗)

    b站绑了身份证会被找回吗(b站绑了身份证能改吗)

  • 移动号码欠费变成空号了怎么办(移动号码欠费变成空号还需缴纳欠款吗)

    移动号码欠费变成空号了怎么办(移动号码欠费变成空号还需缴纳欠款吗)

  • 手机视频聊天没声音是怎么回事(手机视频聊天没有声音如何恢复正常)

    手机视频聊天没声音是怎么回事(手机视频聊天没有声音如何恢复正常)

  • 小米分屏能不能横屏(小米分屏能分几个)

    小米分屏能不能横屏(小米分屏能分几个)

  • 华为畅享9e上市时间和配置(华为畅享9e上市时间及价格)

    华为畅享9e上市时间和配置(华为畅享9e上市时间及价格)

  • 为什么哔咔无法注册(为什么哔咔无法下载最新版)

    为什么哔咔无法注册(为什么哔咔无法下载最新版)

  • mq8g2ch/a是什么版本(mq8f2ch/a是什么版本)

    mq8g2ch/a是什么版本(mq8f2ch/a是什么版本)

  • 苹果11音量键没弹性怎么修复(苹果11音量键没反应)

    苹果11音量键没弹性怎么修复(苹果11音量键没反应)

  • 越南手机号可以注册微信吗(越南手机号可以注册抖音吗)

    越南手机号可以注册微信吗(越南手机号可以注册抖音吗)

  • htc u ultra怎么截图(htc怎么截图手机屏幕)

    htc u ultra怎么截图(htc怎么截图手机屏幕)

  • 淘宝注销了手机号还能注册吗(淘宝注销了手机号也会跟着解绑吗)

    淘宝注销了手机号还能注册吗(淘宝注销了手机号也会跟着解绑吗)

  • 苹果x合约机怎么解锁(苹果x合约机多少钱)

    苹果x合约机怎么解锁(苹果x合约机多少钱)

  • 怎么删除京东评价记录(怎么删除京东评价过的商品)

    怎么删除京东评价记录(怎么删除京东评价过的商品)

  • 快手直播闪退怎么解决(快手开直播开一会闪退)

    快手直播闪退怎么解决(快手开直播开一会闪退)

  • 红米k20prodc调光有用吗(红米k20dc调光怎么开)

    红米k20prodc调光有用吗(红米k20dc调光怎么开)

  • ps4待命模式怎么唤醒(ps4待命模式怎么开)

    ps4待命模式怎么唤醒(ps4待命模式怎么开)

  • 11pro和11pro max有什么区别(11pro跟11pro max)

    11pro和11pro max有什么区别(11pro跟11pro max)

  • 如何取消朋友圈上次分组(如何取消朋友圈三天可见)

    如何取消朋友圈上次分组(如何取消朋友圈三天可见)

  • Sinutrain下载安装与开启OPC UA---kalrry(sinutrain破解版)

    Sinutrain下载安装与开启OPC UA---kalrry(sinutrain破解版)

  • 万字综述梳理ChatGPT----一文搞懂弄潮儿ChatGPT技术原理、行业现状、投资前景(一万字综述怎么写)

    万字综述梳理ChatGPT----一文搞懂弄潮儿ChatGPT技术原理、行业现状、投资前景(一万字综述怎么写)

  • 人头税是什么税
  • 运输业月末进销项税怎么结转
  • 手工发票可以抵增值税吗
  • 增值税不视同销售行为有哪些
  • 信息技术费如何做账
  • 有限合伙企业有经营权吗
  • 财务将利润表已申报还能修改吗
  • 小规模购买金税盘分录
  • 银行存款可以红字吗
  • 发票校验码看不清怎样查真伪
  • 预售房款预缴增值税
  • 哪些会计科目借方记增加
  • 出口关税如何做账
  • 成本类与费用类科目哪些区别
  • 去年的成本没有入账
  • 利息保障倍数为负数,是偿债能力弱的表现
  • 工程承建方给予的工期奖励如何做账?
  • 核定增收和查账增收的区别
  • 计提营业账簿印花税怎么做账
  • 个体户生产经营所得税税率表
  • 所得税费用税率规定
  • 新注册公司季度资产为零
  • 培训费发票如何入账
  • 开票软件上怎么抄税
  • 存货中的生产成本是指
  • 购买电力维修材料怎么做分录?
  • 已进行账务处理怎么处理
  • 企业所得税赞助费是否可税前扣除
  • mac怎么修改图片格式jpg
  • macbook自动弹出页面
  • 商誉减值会计准则
  • 完成交易预付账怎么做账
  • phpwind教程
  • win7右键设置方法
  • 代收代付款项入账需要什么资料
  • PHP:Memcached::incrementByKey()的用法_Memcached类
  • 发票抬头可以是两个人吗
  • 水青冈是常绿还是落叶
  • 申报个人所得税是按应发工资还是实发工资
  • 在报税显示缺少税种信息
  • vue3 $bus
  • 利用php将图片转为文字
  • php实现评论回复功能
  • extract php函数
  • 欠别人钱可以用车抵押吗
  • 发票验证校验码为什么只能填6位
  • vue3子组件如何拿到父组件实例
  • php怎么关闭
  • 普通发票能不能重新开
  • 日本发票国内能用吗
  • 车间检测费会计分录
  • 公司在建厂房图片大全
  • 以汽车投资作为投资项目
  • 收到发票未抵扣,收票方也可以开红字信息表吗?
  • 购车是否有进项税额
  • 未开发票已收款如何做账?
  • 更新改造过程中的固定资产需要计提折旧吗
  • 计提坏账准备需要哪些资料
  • 新公司怎样
  • winxp/win2000/win2003
  • win7电脑开机声音怎么改
  • ubuntu更新版本
  • .exe是啥
  • vrvarp.exe是什么
  • win7禁用了管理员,怎么取消呢
  • pcalc是什么软件
  • win7旗舰版如何升级到win10
  • gzip: stdin: unexpected end of file tar: Unexpected EOF in archive tar: Unexpect
  • 铁嘴下山全文免费阅读
  • Unity3D游戏开发pdf
  • 炉石传说开发人员卡牌
  • 初始化opengl时出错
  • pythoni脚本
  • JavaScript中Object.prototype.toString方法的原理
  • 各种手机ui大全
  • python中lxml模块
  • 一般纳税人开劳务费税率是多少2023
  • 国家税务局网上江苏电子税务局官网
  • 2018城镇土地使用税减免政策
  • 发票验旧后还能开票吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设