VUE模仿百度搜索框,按上下方向键及回车键实现搜索选中效果
逻辑介绍:
1、表单获取焦点时,显示搜索建议框
2、输入内容时,请求后台接口,并将返回的数据展示在搜索建议框内
3、表单获取焦点情况下,按键盘上下箭头可实现搜索列表项的切换,按回车可以选择当前激活的选项并获取当前选项的数据,然后你可以用数据做其他事了
<template>
<div class="container">
<div class="d-searchBox">
<input
@keydown.down="selectResultItem"
@keydown.enter="goSearch(currentIndex)"
@blur="searchResultBoxShow = false"
@focus="searchResultBoxShow = true"
@input="inputHandle"
type="text"
placeholder="search"
v-model="searchValue"
ref="search"
>
<ul
v-show="searchResultBoxShow || isMouseOnSerchBox"
@mouseenter="isMouseOnSerchBox = true"
@mouseleave="isMouseOnSerchBox = false"
class="searchResult"
>
<li
v-if="!loading"
:class="[currentIndex === i ? 'active' : '']"
v-for="(item, i) of person"
@click="goSearch(i)"
:key="i"
>
<span>{{ item.name }}</span>
<span>{{ item.honor }}</span>
</li>
<li
style="text-align: center;line-height: 60px;"
v-if="loading"
>数据加载中...</li>
<li
v-if="!this.person.length && !loading"
style="text-align: center;line-height: 60px;"
>no Data</li>
</ul>
</div>
</div>
</template> <script> export default {
data () {
return {
searchResultBoxShow: false,
isMouseOnSerchBox: false,
searchValue: '',
currentIndex: -1,
person: [],
loading: false,
personData: [
{
'id': '001',
'age': '45',
'name': '晁盖',
'honor': '托塔天王'
},
{
'id': '002',
'age': '44',
'name': '宋江',
'honor': '及时雨'
},
{
'id': '003',
'age': '44',
'name': '吴用',
'honor': '智多星'
},
{
'id': '004',
'age': '44',
'name': '卢俊义',
'honor': '玉麒麟'
}
]
}
},
methods: {
goSearch (i) {
const item = this.person[i]
console.log('got the' + item + 'and yon can do something')
this.$refs.search.blur()
this.currentIndex = i
this.searchResultBoxShow = this.isMouseOnSerchBox = false
this.person = []
this.searchValue = ''
},
selectResultItem () {
if (this.currentIndex === this.person.length - 1) {
this.currentIndex = 0
} else {
this.currentIndex++
}
},
inputHandle () { // 此处应该做节流
this.searchResultBoxShow = true
this.loading = true
setTimeout(() => {
this.person = this.personData
this.loading = false
}, 2000)
}
}
}
</script> <style scoped lang="scss">
@import "../../assets/css/variate";
.container {
width: 100%;
.d-searchBox {
margin-left: 300px;
margin-top: 20px;
display: inline-block;
position: relative;
input {
height: 26px;
border-radius: 4px;
font-size: 14px;
}
.searchResult {
position: absolute;
top: 36px;
left: 0;
background-color: #fff;
box-shadow: 0 0 6px 0 $themecolor;
width: 100%;
li {
border-bottom: 1px solid #ddd;
padding: 4px 10px;
font-size: 14px;
color: $themecolor;
&.active {
background-color: rgba($themecolor, 0.1);
}
}
}
}
}
</style>
效果图如下:

VUE模仿百度搜索框,按上下方向键及回车键实现搜索选中效果的更多相关文章
- jQuery实现搜索框插件+豆瓣音乐接口实现豆瓣搜索框
jQuery实现搜索框插件 豆瓣音乐接口实现豆瓣搜索框 豆瓣接口有时不稳定,网络请求会报400,不要惊慌.我主要是练习一下jQuery的JSONP和封装插件. <div class=" ...
- [分享]IOS开发-简单实现搜索框显示历史记录的本地缓存及搜索历史每次只能获取到一个的解决方案
注:原文:http://www.zhimengzhe.com/IOSkaifa/40433.html 1.首先,我们需要对进行过搜索的textField的输入内容进行一个NSUserDefaults的 ...
- 微信小程序----搜索框input回车搜索事件
在微信小程序里的搜索框,按软键盘回车键触发搜索事件. <input type="text" placeholder="搜索" value="{ ...
- 随笔之——各大热门网站search 搜索框的写法,浅析!
随笔之——各大热门网站search 搜索框的写法,浅析! 关于搜索框,写法有很多种,搜索框这一块是一个比较细的活,要先计算好他的高.宽: 下面我就以京东搜索框为例,给大家浅析一下. 上面就是最终s ...
- iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)
很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...
- Android 浮动搜索框 searchable 使用(转)。
Android为程序的搜索功能提供了统一的搜索接口,search dialog和search widget,这里介绍search dialog使用.search dialog 只能为于activity ...
- SearchBox( 搜索框) 组件
一. 加载方式//class 加载方式<input id="ss" class="easyui-searchbox" style="width: ...
- [Qt] searchBox 搜索框实现
[Qt] searchBox 搜索框实现 也就是在lineEdit中加入button.在搜索框的右边会有个小小的搜索图标,输入内容之后,搜索的图标会变成叉叉. 类中的IconHelper见我的另一篇博 ...
- 第八十八节,html5+css3pc端固定布局,搜索区,插入大图,搜索框
html5+css3pc端固定布局,搜索区,插入大图,搜索框 设置一个div作为搜索区域 1.宽度为百分之百 2.最小宽度为1263,因为要考虑到手机,等小屏幕缩小后宽度会自适应,导致破坏布局,将最小 ...
随机推荐
- Oracle中为表设置自动增长的标识列
-- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 increment ...
- hadoop启动
安装完hadoop集群之后,第一次启动之前必须初始化,之后就可以不用再初始化(注意:初始化操作只可以一次) hdfs namenode -format (hadoop namenode -format ...
- Java程序员职业生涯规划
一.规划 工作3年了,感觉自己的技术现在到了一个瓶颈,在做一些重复性的业务性的工作,没有长进,提高太慢:因此停下脚步对自己的职业生涯做了一个规划,并为之努力奋斗: 20-27岁:技术积累阶段在这 5 ...
- ABP框架系列之五十:(Swagger-UI-集成)
Introduction From it's web site: "....with a Swagger-enabled API, you get interactive documenta ...
- 牛客练习赛42 C 反着计算贡献
https://ac.nowcoder.com/acm/contest/393/C 题意 给你一个矩阵, 每次从每行挑选一个数,组成一个排列,排列的和为不重复数字之和,求所有排列的和(n,m<= ...
- Java并发编程73道面试题及答案
原文出处:https://blog.csdn.net/qq_34039315/article/details/7854931 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线 ...
- PLL与PHY的连接:通道绑定或者不绑定
用到的术语: clock skew的产生 延时与时钟线的长度及被时钟线驱动的时序单元的负载电容.个数有关 由于时钟线长度及负载不同,导致时钟信号到达相邻两个时序单元的时间不同 于是产生所谓的clock ...
- Linux 防火墙相关
1.SELinux 防火墙 1.1 查看SELinux状态: 1) /usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 bamb ...
- BASH 环境
本节内容 1. 什么是shell 2. 命令的优先级 3. 元字符 4. 登录shell与非登录shell 一 什么是shell shell一般代表两个层面的意思,一个是命令解释器,如bas ...
- 【原创】【Android】揭秘 ART 细节 ---- Garbage collection
背景 Dalvik :http://zh.wikipedia.org/wiki/Dalvik%E8%99%9A%E6%8B%9F%E6%9C%BA ART :http://source.andro ...