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 相关文章推荐
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
详细介绍8款超实用JavaScript框架
Oct 25 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
Javascript的表单验证-提交表单
Mar 18 Javascript
javascript css红色经典选项卡效果实现代码
May 17 Javascript
js获取Get值的方法
Sep 29 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
Nov 24 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
关于JS模块化的知识点分享
Oct 16 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
Nov 27 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
php计算整个目录大小的方法
2015/06/01 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
农村结婚典礼司仪主持词
2014/03/14 职场文书
党员创先争优心得体会
2014/09/11 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Python 制作自动化翻译工具
2021/04/25 Python
Python预测分词的实现
2021/06/18 Python
PHP遍历数组的6种方式总结
2021/11/17 PHP
使用 Apache 反向代理的设置技巧
2022/01/18 Servers