分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

原生JS模拟百度搜索框

发布时间:2023-09-06 02:05责任编辑:赖小花关键词:暂无标签

近期有个新入行的小伙伴一直在问一些基础知识,突然觉得人的记忆力有限,有些平常很少用到的知识点虽简单却也其实很容易模糊,或者是一个单词,或者是一个语法。所以想着应该利用一下工作之余的碎片时间,记录一些工作上的问题和一些有趣的小案例,于是开通了播客,一方面便于自己日后翻阅,一方面给刚学习的小伙伴一个参考。

今天先写一个简单的小案例:原生JS模拟百度搜索框。

需求:

1.当在输入框输入时,每输入一个文字,就会在下方展示相关内容列表

2.每一次输入框输入,清空上一次内容

3.鼠标移入列表内容时,对应的内容高亮显示,移出时恢复原状

4.鼠标点击列表内容时,将列表内容显示到文本框,并且列表清空

HTML页面结构部分

1 <!-- 页面就只是一个简单文本框和按钮,在文本框底部用一个ul列表来展示相关内容 -->2 <div class="box">3 ????<div class="top">4 ????????<input type="text" id="txt"/><input type="button" value="百度一下" id="search"/>5 ????</div>6 ????<ul id="keywords"></ul>7 </div>

CSS样式部分

 1 <style> 2 ????????* { 3 ????????????margin: 0; 4 ????????????padding: 0; 5 ????????} 6 ????????body { 7 ????????????font-size: 20px; 8 ????????} 9 ????????.box {10 ????????????width: 600px;11 ????????????height: 40px;12 ????????????margin: 200px auto; ?/*大盒子页面居中 */13 ????????????position: relative;14 ????????}15 ????????.top{16 ????????????width: 605px;17 ????????????height: 40px;18 ????????}19 ????????#txt {20 ????????????width: 490px;21 ????????????height: 38px;22 ????????????border: 1px solid #CCCCCC;23 ????????????font-size: 18px;24 ????????????float: left;25 ????????????padding-left: 8px;26 ????????????outline: none; ?/* 去除文本框获取焦点时的默认样式 */27 ????????}28 ????????#txt:focus{29 ????????????border: 1px solid #3385FF; ???????????30 ????????}31 ????????#search {32 ????????????width: 100px;33 ????????????height: 40px;34 ????????????float: left;35 ????????????background-color: #3385FF;36 ????????????color: white;37 ????????????border: none;38 ????????????font-size: 16px;39 ????????}40 ????????#keywords {41 ????????????position: absolute; ?/* ul相对父盒子定位 */42 ????????????top: 40px;43 ????????????left: 0;44 ????????????border: 1px solid #CCCCCC;45 ????????????border-top: none;46 ????????????list-style: none; ?/* 去除无序列表默认自带的小圆点 */47 ????????????width: 498px;48 ????????????display: none; ?/* 把ul隐藏起来,在获得相关内容时再显示出来,这样在搜索之前,页面只有一个搜索框和按钮 */49 ????????}50 ????????li {51 ????????????line-height: 24px;52 ????????????font-size: 16px;53 ????????????padding-left: 8px;54 ????????}55 ????</style>

JS行为部分

 1 <script> ?2 ????// 定义一个存储相关内容的数组,模拟后台获取的数据,数组每个元素都是一个字符串 3 ????var keywords = ["周杰伦", "周杰伦新专辑", "周杰伦等你下课", "陈奕迅", "陈奕迅演唱会", "陈奕迅歌手", 4 ????????"陈奕迅王菲","前端","前端开发","前端入门到放弃","前端要学什么","周润发","周润发赌神","周润发澳门风云","周末双休是国家规定吗","super junior", 5 ????????"JavaScript","Java","super junior成员","super junior成员强仁","super junior成员金英云","A short journey"]; 6 ?7 ????// 获取文本框,按钮和列表 8 ????var txt=document.getElementById("txt"); 9 ????var search=document.getElementById("search");10 ????var kw=document.getElementById("keywords");11 12 ????// 给文本框注册一个键盘弹起事件,每按下一个按键弹起后,函数执行一遍13 ????txt.onkeyup= function () {14 ????????kw.innerHTML=""; ?//每一次匹配数据前,先把列表清空,如果不清空会导致每一次获取的内容都叠加显示在列表上15 16 ????????if(this.value){ //文本框里有输入内容时才进行数据匹配和显示17 ????????????for(var i=0;i<keywords.length;i++){ ?//遍历数组里的所有内容18 ????????????????if(keywords[i].indexOf(this.value)!=-1){ ?//如果文本框输入的字符或字符串能匹配到数组元素的字符串,就创建一个li标签,把数组的这个元素当成li标签的内容展示出来19 ????????????????????var li=document.createElement("li"); 20 ????????????????????li.innerHTML=keywords[i];21 ????????????????????kw.style.display="block";22 ????????????????????kw.appendChild(li); 23 ????????????????????24 ????????????????????//给新创建的每一个li标签注册一个鼠标移入和移出事件25 ????????????????????li.onmouseover= function () {26 ????????????????????????this.defaultColor=this.style.backgroundColor; //定义一个defaultColor属性来存储li标签本来的背景颜色27 ????????????????????????this.style.backgroundColor="#F1F1F1";28 ????????????????????};29 30 ????????????????????li.onmouseout= function () {31 ????????????????????????this.style.backgroundColor=this.defaultColor;32 ????????????????????};33 ????????????????????// 给新创建的每一个li标签注册一个点击事件34 ????????????????????li.onclick= function () {35 ????????????????????????txt.value=this.innerHTML; //将点击的列表内容显示到文本框 ???????????????????36 ????????????????????};37 ????????????????}38 ????????????}39 ????????}40 ????};41 ???// 给整个HTML注册一个点击事件,清空列表并将列表隐藏42 ????document.documentElement.onclick= function () {43 ????????kw.innerHTML="";44 ????????kw.style.display="none"; ???????????????????????????????45 ????}46 </script>

运行效果:

这样就完成了一个用原生JS模拟百度搜索框的小案例,后面会陆续整理一些简单常见的小案例,也会记录一下自己工作遇到的一些问题,第一次写博,欢迎指正

原生JS模拟百度搜索框

原文地址:https://www.cnblogs.com/linqb/p/9366108.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved