js实现搜索栏效果


Posted in Javascript onNovember 16, 2018

小编这边主要是介绍一个js中搜索栏的实现(没有提交数据那些),重点在于对焦点问题的理解。

那么这边小编就是要实现这样的一个搜索框

js实现搜索栏效果

对焦点的理解:

通俗来讲当我们鼠标单击一个盒子时光标停留在该盒子事件上实现用户与栏之间的交互,这样就表明该盒子获取了焦点,以案例来说我们平常搜索栏点击可以输入文字,这个时候该搜索栏就获得了焦点。

同理失去焦点也是同样当点击页面其余位置时失去对先前盒子可以进行的操作。

那么直接以小编这个案例来说代码如下:

CSS部分:

<style> 
 *{
  margin: 0;
  padding: 0;
 }
 input,button{
  border: 0 none;
  padding: 0;
  outline-style: none;
 }
 .search{
  margin: 100px auto;
  width: 258px;
  height: 40px;
  overflow: hidden;
 }
 .search input{
  float: left;
  width: 208px;
  height: 40px;
  background: url("left.jpg") no-repeat;
 
  padding-left:8px;
  color: #ccc;
 }
 .search button{
  float: left;
  height: 40px;
  width: 42px;
  background: url("right.jpg") no-repeat;
  cursor: pointer;
 } 
</style>
 
<body>
<div class="search">
 <input type="text" value="请输入..." id="txt"> //盒子架构div中一个文本框一个按钮
 <button id="btn"></button>
</div>
 
</body>

js部分:

<script>
  window.onload=function () {
   function $id(id) {
    return document.getElementById(id);
   } //虽然该案例中这种获取id方式比较麻烦但这是通常的一种方法避免一直去写获取
   $id("txt").onfocus=function () {
    if (this.value=="请输入..."){
     this.value=""; //这边是赋值别搞错了
     this.style.color="#333"; //黑色
    }
   } //当用户点击时初始文字消失
   $id("txt").onblur=function () {
    if (this.value==""){
     this.value="请输入..."
     this.style.color="#ccc"; //透明灰
    } //谁调用this指向谁
   }//当为空时用户点击其他地方显示初始化状态
  $id("btn").onclick=function () {
   alert("我可以点击");
  } //这边只是试验一下按钮功能还在不在
  }
 </script>

这边另外介绍一些关于搜索栏实用方法:

1.进入页面时搜索栏已经自动获取了焦点

那么在js之中我们只需要将对象加上  对象.focus();

方法就可以实现进入页面时光标已经显示在添加该方法的对象上。

2.鼠标进过(或点击搜索框)搜索栏搜索栏内容被全选(该方法方便用户输入后鼠标经过可以直接删除搜索栏所有,当不想删除所有时用户可以点击在进行一个一个删除操作)

对象.事件=function(){

    this.select();

}  //这样就更便捷用户的删除操作

常见的(点击后全选):

js实现搜索栏效果

同时这边应用到了文本框同样也提及一下:

获取文本框中内容:以value属性获取

获取标签中内容:innerHTML属性获取

搜索栏在实战中运用还是很多的,这边主要是对于焦点问题的一个介绍,当然获取焦点方法不止这单单一种,之后小编会补充。     

当然的我们在站中看到的搜索框有更完善的

js实现搜索栏效果

我们看一下京东的搜索框,这边只是举例那么现在很多都是用到这样的搜索框,获取焦点以后框内文字还是有显示但你一输入内容他就消失了。那么怎样实现这样的搜索框呢?

首先我们明确一点,类似这样的搜索框显示的文字并非是文本框的value值

话不多说撸上代码(以小编做的那个简单的导航框实现):

首先div中我们加上了label标签,也就是我们点击后看到的文字

js实现搜索栏效果

然后给他加上CSS属性(注意label标签只能以定位的方式定位到文本框中):

.search label {
  font-size: 12px;
  color:#ccc;
  position: absolute; /*以绝对定位来定位label到文本框合适位置当然同时也要为父亲div盒子加上相对定位*/
  top:12px;
  left:12px;
  cursor: text; /*使鼠标放到lable文字上时还是光标*/
 }

那么这样的话js部分有很大差异:

<script>
  window.onload=function () {
   function $id(id) {
    return document.getElementById(id);
   }
   $id("txt").oninput=function () { //判断用户输入栏是否为空来使得label是否消失
 
    if (this.value==""){
     $id("lab").style.display="block";
    }
    else {
     $id("lab").style.display="none";
    }
   }
 
  }
 </script>

效果图如下,若输入则浅文字消失

js实现搜索栏效果

当然小编这个案例考虑到了一些兼容性问题,如果是在IE9后的浏览器用H5有的方法直接给文本框加上一个属性就可以实现这样的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript查找字符串中出现最多的字符和次数的小例子
Oct 29 Javascript
深入理解JavaScript中的箭头函数
Jul 28 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
js中开关变量使用实例
Feb 24 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
webpack@v4升级踩坑(小结)
Oct 08 Javascript
js中的闭包实例展示
Nov 01 Javascript
node+express框架中连接使用mysql(经验总结)
Nov 10 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
JS实现的排列组合算法示例
Jul 16 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 Javascript
JavaScript实现简单音乐播放器
Apr 17 #Javascript
Vue 全家桶实现移动端酷狗音乐功能
Nov 16 #Javascript
微信小程序自定义toast的实现代码
Nov 16 #Javascript
vue实现简单的星级评分组件源码
Nov 16 #Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 #Javascript
layui-laydate时间日历控件使用方法详解
Nov 15 #Javascript
laydate如何根据开始时间或者结束时间限制范围
Nov 15 #Javascript
You might like
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
详解django中自定义标签和过滤器
2017/07/03 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python实现KNN分类算法
2019/10/16 Python
python装饰器的特性原理详解
2019/12/25 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
东方通信股份有限公司VC面试题
2014/08/27 面试题
给校长的建议书600字
2014/05/15 职场文书
音乐课外活动总结
2015/05/09 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
六年级数学教学反思
2016/02/16 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL