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 相关文章推荐
popdiv
Jul 14 Javascript
jquery 查找iframe父级页面元素的实现代码
Aug 28 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
理解javascript中的严格模式
Feb 01 Javascript
jQuery实现的无限级下拉菜单功能示例
Sep 12 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
关于在mongoose中填充外键的方法详解
Aug 14 Javascript
微信小程序实现图片上传功能
May 28 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
Aug 31 Javascript
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
JS解析XML实例分析
2015/01/30 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
总结Python编程中三条常用的技巧
2015/05/11 Python
Python reduce()函数的用法小结
2017/11/15 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
python实现键盘输入的实操方法
2019/07/16 Python
如何使用python进行pdf文件分割
2019/11/11 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
乌克兰在线药房:Аптека24
2019/10/30 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
小学开学寄语
2014/01/19 职场文书
档案信息化建设方案
2014/05/16 职场文书
重点工程汇报材料
2014/08/27 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
银行稽核岗位职责
2015/04/13 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
企业催款函范本
2015/06/24 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书