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 点击整页变灰的效果(可做退出效果)。
Jan 09 Javascript
json的前台操作和后台操作实现代码
Jan 20 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
Jan 08 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
js读写json文件实例代码
Oct 21 Javascript
JS截取字符串实例详解
Nov 24 Javascript
JS图片轮播与索引变色功能实例详解
Jul 06 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
js canvas实现简单的图像扩散效果
Jun 28 Javascript
swiper插件自定义切换箭头按钮
Dec 28 Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 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
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
基于python实现KNN分类算法
2020/04/23 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
大专生自我评价
2014/01/28 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
七夕活动策划方案
2014/08/16 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL