zoukankan      html  css  js  c++  java
  • 使用 Vue.js 2.0+ Vue-resource 模仿百度搜索框

    使用 Vue.js 2.0 模仿百度搜索框

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=2.0, maximum-scale=1.0, minimum-scale=1.0">
      <title>Vue模拟百度搜索</title>
      <style type="text/css">
      body, html{
        padding: 0;
        margin: 0;
      }
      #box{
        margin-top: 80px;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
      }
      .input{
         500px;
        height: 30px;
        text-indent: 4px;
      }
      .baidu input{
        height: 30px;
        cursor: pointer;
        color: #fff;
        letter-spacing: 1px;
        background: #3385ff;
        border: 1px solid #2d78f4;
      }
      ul{
        padding: 0;
        margin-top: 6px;
      }
      li{
        list-style: none;
        margin: 4px;
      }
      li:hover{
        background: #ccc;
      }
      .bgcolor {
        background: #ccc;
      }
      </style>
      <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
      <script src="https://cdn.bootcss.com/vue-resource/1.3.1/vue-resource.min.js"></script>
      <script type="text/javascript">
      window.onload = function() {
        new Vue({
          el: '#box',
          data: {
            inputText: '',
            text: '',
            nowIndex: -1,
            result: []
          },
          methods: {
            show (ev) {
              if (ev.keyCode == 38 || ev.keyCode == 40) {
                if (this.nowIndex < -1){
                  return;
                }
                if (this.nowIndex != this.result.length && this.nowIndex != -1) {
                  this.inputText = this.result[this.nowIndex];
                }
                return;
              }
              if (ev.keyCode == 13) {
                window.open('https://www.baidu.com/s?wd=' + this.inputText, '_blank');
                this.inputText = '';
              }
              this.text = this.inputText;
              this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su', {
                params: {
                  wd: this.inputText
                },
                jsonp: 'cb'
              }).then(res => {
                this.result = res.data.s;
              })
            },
            goto () {
              window.open('https://www.baidu.com/s?wd=' + this.inputText, '_blank');
              this.inputText = '';
            },
            gotoItem(item) {
              window.open('https://www.baidu.com/s?wd=' + item, '_blank');
              this.inputText = '';
            },
            down () {
              this.nowIndex++;
              if (this.nowIndex == this.result.length) {
                this.nowIndex = -1;
                this.inputText = this.text;
              }
            },
            up () {
              this.nowIndex--;
              if (this.nowIndex < -1){
                this.nowIndex = -1;
                return;
              }
              if (this.nowIndex == -1) {
                this.nowIndex = this.result.length;
                this.inputText = this.text;
              }
            }
          }
        });
      }
      </script>
    </head>
     
    <body>
      <div id="box">
      <img src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png" width="270" height="129">
        <div>
          <div>
            <input 
              type="text" 
              class="input" 
              placeholder="请输入搜索内容 " 
              v-model='inputText' 
              @keyup='show($event)' 
              @keydown.down='down()' 
              @keydown.up.prevent='up()'
            >
            <span class="baidu"  @click="goto()">
    		  <input type="submit" value="百度一下" >
    		</span>
          </div>
          
          <ul>
            <li v-for="(item, index) in result" :class='{bgcolor: index==nowIndex}' @click="gotoItem(item)">
              {{item}}
            </li>
          </ul>
        </div>
    
      </div>
    </body> 
    </html>
  • 相关阅读:
    优化网站设计(四):对资源启用压缩
    优化网站设计(三):对资源添加缓存控制
    旧貌换新颜 华为助力甲壳虫科技打造智慧环卫
    软件开发项目云端All-In-One体验
    码农进“城”之路---我从机械男转入软件开发行业的亲身经历
    如何选择版本控制系统之三---代码托管操作
    推荐五款Android 应用的自动化测试工具
    移动应用/APP的测试流程及方法
    老程序员总结的16条经验教训
    30多个Android 开发者工具 带你开发带你飞
  • 原文地址:https://www.cnblogs.com/cckui/p/7461772.html
Copyright © 2011-2022 走看看