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操纵Cookie实现购物车程序
Feb 15 Javascript
直接生成打开窗口代码,不必下载
May 14 Javascript
Jquery实战_读书笔记2 选择器
Jan 22 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 Javascript
jQuery切换所有复选框选中状态的方法
Jul 02 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
jqGrid中文文档之选项设置
Dec 02 Javascript
js匿名函数作为函数参数详解
Jun 01 Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
如何在Vue.js中实现标签页组件详解
Jan 02 Javascript
微信小程序在线客服自动回复功能(基于node)
Jul 03 Javascript
javascript中Set、Map、WeakSet、WeakMap区别
Dec 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
MooTools 1.2介绍
2009/09/14 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
一份软件工程师的面试试题
2016/02/01 面试题
财务人员个人自荐信范文
2013/09/26 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
五年级学生评语
2014/04/22 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
保研推荐信格式
2015/03/25 职场文书
永远是春天观后感
2015/06/12 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书