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 相关文章推荐
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
jquery ajax 调用失败的原因示例介绍
Sep 27 Javascript
node.js使用nodemailer发送邮件实例
Mar 10 Javascript
javascript与jquery动态创建html元素示例
Jul 25 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
Aug 10 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 Javascript
微信小程序 实战程序简易新闻的制作
Jan 09 Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 Javascript
对VUE中的对象添加属性
Sep 18 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 Javascript
在vue项目中使用sass语法问题
Jul 18 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加密解密类代码
2011/11/27 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
常用简易JavaScript函数
2009/04/09 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
js继承call()和apply()方法总结
2014/12/08 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
美国创意之家:BulbHead
2017/07/12 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技