vue实现百度搜索下拉提示功能实例


Posted in Javascript onJune 14, 2017

这段代码用到vuejs和vue-resouece。实现对接智能提示接口,并通过上下键选择提示项,按enter进行搜索

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script type="text/javascript" src="vue.js"></script>
 <script type="text/javascript" src="vue-resource.js"></script>
 <script type="text/javascript">
 window.onload = function() {
  var app = new Vue({
   el: '#box',
   data: {
    myData: [],
    tt: '',
    now: -1
   },
   methods: {
    get: function(e) {

     // 请求限制 按了上下箭头
     if (e.keyCode === 38 || e.keyCode === 40) {
      return
     }
     // enter跳转
     if (e.keyCode === 13) {
      window.open('https://www.baidu.com/s?wd=' + this.tt);
      this.tt = '';
     }
     this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su', {
      wd: this.tt
     }, {
      jsonp: 'cb'
     }).then(function(res) {
      // 请求成功
      this.myData = res.data.s;



this.now = -1;
     }, function(res) {
      // 请求失败
      console.log(res.status)
     })
    },
    changeDown: function() {
     this.now++;
     // 到了最后一个选项
     if (this.now === this.myData.length) {
      this.now = -1;
     }
     this.tt = this.myData[this.now]
    },
    changeUp: function() {
     this.now--;
     // 到了第一个选项
     if (this.now === -2) {
      this.now = this.myData.length - 1;
     }
     this.tt = this.myData[this.now]

    }
   }
  })
 }
 </script>
 <style type="text/css">
 .gray {
  background: gray
 }
 </style>
</head>

<body>
 <!-- 百度下拉接口 -->
 <div id="box">
  <input type="text" v-model="tt" name="" @keyup="get($event)" @keydown.down="changeDown()" @keydown.up="changeUp()">
  <ul>
   <li v-for="(item, index) in myData" :class="{gray:index===now}">{{item}}</li>
  </ul>
 </div>
</body>

</html>

效果图:

vue实现百度搜索下拉提示功能实例

这个ajax请求没有做节流,很多时候需要限制ajax频繁请求,可以小改一下:

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script type="text/javascript" src="vue.js"></script>
 <script type="text/javascript" src="vue-resource.js"></script>
 <script type="text/javascript">
 window.onload = function() {
  var app = new Vue({
   el: '#box',
   data: {
    myData: [],
    tt: '',
    now: -1
   },
   methods: {
    get: function(e) {

     // 请求限制 按了上下箭头
     if (e.keyCode === 38 || e.keyCode === 40) {
      return
     }
     // enter跳转
     if (e.keyCode === 13) {
      window.open('https://www.baidu.com/s?wd=' + this.tt);
      this.tt = '';
     }
     // 限制频繁请求
     this.throttle(this.getData,window)
    },
    changeDown: function() {
     this.now++;
     // 到了最后一个选项
     if (this.now === this.myData.length) {
      this.now = -1;
     }
     this.tt = this.myData[this.now]
    },
    changeUp: function() {
     this.now--;
     // 到了第一个选项
     if (this.now === -2) {
      this.now = this.myData.length - 1;
     }
     this.tt = this.myData[this.now]

    },
    // 把请求单独拿出来
    getData() {
     this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su', {
      wd: this.tt
     }, {
      jsonp: 'cb'
     }).then(function(res) {
      // 请求成功
      this.myData = res.data.s;



this.now = -1;
     }, function(res) {
      // 请求失败
      console.log(res.status)
     })
    },
    // 节流函数
    throttle(method,context){
      clearTimeout(method.tId);
      method.tId=setTimeout(function(){
        method.call(context);
      },300);
    }
   }
  })
 }
 </script>
 <style type="text/css">
 .gray {
  background: gray
 }
 </style>
</head>

<body>
 <!-- 百度下拉接口 -->
 <div id="box">
  <input type="text" v-model="tt" name="" @keyup="get($event)" @keydown.down="changeDown()" @keydown.up="changeUp()">
  <ul>
   <li v-for="(item, index) in myData" :class="{gray:index===now}">{{item}}</li>
  </ul>
 </div>
</body>

</html>

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

Javascript 相关文章推荐
在Javascript中为String对象添加trim,ltrim,rtrim方法
Sep 22 Javascript
JavaScript 在各个浏览器中执行的耐性
Apr 06 Javascript
jquery tools 系列 scrollable(2)
Sep 06 Javascript
基于javascript代码实现通过点击图片显示原图片
Nov 29 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
Feb 29 Javascript
javascript拖拽应用实例(二)
Mar 25 Javascript
用JS实现轮播图效果(二)
Jun 26 Javascript
JS实现的随机排序功能算法示例
Jun 09 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
Sep 10 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
Aug 03 Javascript
如何基于viewport vm适配移动端页面
Nov 13 Javascript
原生js实现自定义滚动条组件
Jan 20 Javascript
JS查找数组中重复元素的方法详解
Jun 14 #Javascript
JS设置手机验证码60s等待实现代码
Jun 14 #Javascript
jQuery ajax动态生成table功能示例
Jun 14 #jQuery
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 #Javascript
vue-loader教程介绍
Jun 14 #Javascript
JS中mouseup事件丢失的原因与解决办法
Jun 14 #Javascript
Vue2.0 从零开始_环境搭建操作步骤
Jun 14 #Javascript
You might like
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
js验证密码强度解析
2020/03/18 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
浅谈python锁与死锁问题
2020/08/14 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
个人自荐信
2013/12/05 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android
如何在Python中妥善使用进度条详解
2022/04/05 Python