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开发包大全整理
Dec 22 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
Jul 28 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
javascript题目,重写函数让其无限相加
Feb 15 Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
jquery创建并行对象或者合并对象的实现代码
Oct 10 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
Sep 01 Javascript
PHP中CURL的几个经典应用实例
Jan 23 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
javascript实现网页字符定位的方法
Jul 14 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
Apr 04 Javascript
基于JavaScript实现单例模式
Oct 30 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
20个PHP常用类库小结
2011/09/11 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
jquery实现数字输入框
2017/02/22 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
Python File readlines() 使用方法
2018/03/19 Python
简单实现Python爬取网络图片
2018/04/01 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
对python中list的五种查找方法说明
2020/07/13 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
医学类个人求职信范文
2014/02/05 职场文书
班主任新年寄语
2014/04/04 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书