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 相关文章推荐
firefox插件Firebug的使用教程
Jan 02 Javascript
商城常用滚动的焦点图效果代码简单实用
Mar 28 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
使用javascript实现监控视频播放并打印日志
Jan 05 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
解析javascript图片懒加载与预加载的分析总结
Oct 27 Javascript
JS自定义混合Mixin函数示例
Nov 26 Javascript
vue中页面跳转拦截器的实现方法
Aug 23 Javascript
vue实现nav导航栏的方法
Dec 13 Javascript
JavaScript判断日期时间差的实例代码
Mar 01 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
vue兄弟组件传递数据的实例
Sep 06 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
博士208HAF收音机实习报告
2021/03/02 无线电
很实用的一个完整email发送程序
2006/10/09 PHP
PHP6 先修班 JSON实例代码
2008/08/23 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
2015/12/10 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
JavaScript如何操作css
2020/10/24 Javascript
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python实现的RSS阅读器实例
2015/07/25 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python探索之SocketServer详解
2017/10/28 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
学习Django知识点分享
2019/09/11 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
分享一个python的aes加密代码
2020/12/22 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
大学生实习期自我评价范文
2013/10/03 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
党员个人总结自评
2015/02/14 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书