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实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
js 调整select 位置的函数
Feb 21 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
Jan 16 Javascript
javascript中基本类型和引用类型的区别分析
May 12 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
JS实现动态增加和删除li标签行的实例代码
Oct 16 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
Jun 04 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
layui table 获取分页 limit的方法
Sep 20 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
Oct 30 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
Jun 24 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
PHP实现货币换算的方法
2014/11/29 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
详解Vue组件实现tips的总结
2017/11/01 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
python读写二进制文件的方法
2015/05/09 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
python中map的基本用法示例
2018/09/10 Python
对python 自定义协议的方法详解
2019/02/13 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
python实现xml转json文件的示例代码
2020/12/30 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
信息技术毕业生自荐信范文
2014/03/13 职场文书
二年级小学生评语
2014/04/21 职场文书
校园演讲稿汇总
2014/05/21 职场文书
党性观念心得体会
2014/09/03 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
导游词之安徽九华山
2019/09/18 职场文书