zoukankan      html  css  js  c++  java
  • 百度搜索热词下拉

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    </head>
    <style>
     *{ padding:0; margin:0}
     input,ul{ width:200px;}
     ul{ border:1px solid #ccc; display:none}
     li{ height:25px; line-height:25px;list-style:none;border-bottom:1px dashed #ddd}
     li:hover, li.active{ background:#f0f0f0;}
    </style>
    <body>
    <div class="select-box">
        <input type="text" placeholder="选择项目" class="input"> 
        <ul class="xl-box">
            <li>选项一</li>
            <li>选项二</li>
            <li>3333</li>
            <li>4444</li>
        </ul>
    </div>
    
    <div class="select-box">
        <input type="text" placeholder="选择项目" class="input"> 
        <ul class="xl-box">
            <li>选项一</li>
            <li>选项二</li>
            <li>3333</li>
            <li>4444</li>
        </ul>
    </div>
    
    <div class="select-box3">
        <input type="text" placeholder="选择项目" class="input"> 
        <ul class="xl-box">
            <li>选项一</li>
            <li>选项二</li>
            <li>3333</li>
            <li>4444</li>
        </ul>
    </div>
    
    <div class="select-box4">
        <input type="text" placeholder="用百度搜索" class="input"> 
        <ul class="xl-box">
            <!--<li>选项一</li>
            <li>选项二</li>
            <li>3333</li>
            <li>4444</li>-->
        </ul>
    </div>
    <script src="js/jquery.js"></script>
    </body>
    </html>

    第一部分: 以上为多种效果基础html代码布局,简单略过,重点在下面。

    第二部分:js代码,以及简单解释

    js面向对象从

    1.基础的下拉到;

    2.键盘方向键进行选取;

    3.再到百度热词ajax下拉

    一下三种方式可单一摘取出来进行使用,此组件还算完整。

    由于时间有限没有做站内搜索结果展示页,

    有时间再更新....

    <script>
        /**
        *@file 输入框获取焦点显示下拉框
        *@author Zhou
        *@time 2016/10/27
        */
        function Selectfn (o, options) {
            this.defaults = {
                input: '.input', // 输入框
                ul: '.xl-box' // 下拉框
            };
            this.opts = $.extend({}, this.defaults, options);
            this.obj = o;
            this.input = this.obj.find(this.opts.input);
            this.ul = this.obj.find(this.opts.ul);
            this.li = this.ul.find('li')
            this.init();
        }
        Selectfn.prototype = {
            constructor: Selectfn,
            init: function () {
                var _this = this;
                this.input.on('focus', function(){
                    _this.focusFn()  
                });
                this.input.on('blur', function(){
                    _this.blurFn()  
                });
                this.obj.on('click', 'li', function(){
                    var _this1 = $(this);
                    _this.selFn(_this1)  
                })
            },
            focusFn: function () {
                this.ul.slideDown()
            },
            blurFn: function () {
                this.ul.slideUp()
            },
            selFn: function (_this1) {
                console.log(_this1.text())
                this.input.val(_this1.text())
            }
        }
        
        
        $('.select-box').each(function(){// 实例化
            new Selectfn ($(this));
        });
        
        
        /**
        *@file 继承Selectkey,实现方向键选择下拉列表
        *@author Zhou
        *@time 2016/10/27
        */
        function Selectkey(o, options) {
            Selectfn.call(this, o, options); //继承属性
        }
        for (i in Selectfn.prototype) {
            Selectkey.prototype[i] = Selectfn.prototype[i]; //深拷贝方法
        }
        Selectkey.prototype.constructor = Selectkey; //改变constructor指向
        Selectkey.prototype.focusFn = function () {
            var _this = this;
            this.i = -1;
            this.ul.slideDown();
            $(document).on('keydown', function(e){ // 绑定键盘事件
                if (e.keyCode == 38 || e.keyCode == 40) {
                    _this.keybordFn(e);
                    _this.selFn(_this.li.eq(_this.i))
                }
            })
        }
        Selectkey.prototype.blurFn = function () {
            this.ul.slideUp()
            $(document).unbind('keydown'); // 解绑键盘事件
        }
        
        Selectkey.prototype.keybordFn = function (e) {// 方向键事件
            var dir = e.keyCode;
            if (dir == 38) {
                this.i <= 0 ? this.i = this.li.length - 1 : this.i--;
            } else if (dir == 40) {
                this.i >= this.li.length - 1 ? this.i = 0 : this.i++
            } else {return}
            this.li.eq(this.i).addClass('active').siblings().removeClass('active');
        }
        
        new Selectkey ($('.select-box3'));// 实例化
        
        
        /**
        *@file 百度热词下拉实例
        *@author Zhou
        *@time 2016/10/27
        *@ajaxUrl https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=js&cb=aa
        */
        function Baidusearch (o, options) {
            var _this = this;
            Selectkey.call(this, o, options); //继承属性
            this.input.bind('keyup', function(e){
                if (e.keyCode == 38 || e.keyCode == 40) return;
                _this.keyupFn(e, $(this))
            })
        }
        for (i in Selectkey.prototype) {
            Baidusearch.prototype[i] = Selectkey.prototype[i]; //深拷贝方法
        }
        
        Baidusearch.prototype.keyupFn = function (e, othis) {
            var oval = othis.val();
            var _this = this;
            $.ajax({
                url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+oval+'&cb=success_callback',
                dataType: "jsonp",
                jsonpCallback: "success_callback",
                success: function(data){
                    //console.log(data.s)
                    var html = '';
                    for(i in data.s){
                        html +='<li>' + data.s[i] + '</li>'
                    }
                    _this.ul.html(html);
                    _this.li = _this.ul.find('li')
                }
            })
        }
        
        
        new Baidusearch ($('.select-box4'));// 实例化
        
    </script>

    下面是实例效果:

    只展示百度热词下拉效果:

  • 相关阅读:
    代码中莫名其妙多出的空格
    hierarchyviewer偶然不能使用的解决方法
    HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法
    Android L Ripple的使用
    Android2.2 API —— ImageView
    android:tint
    Android特效--粒子效果之雨
    Android 简单的FC
    Google开源库-Volley
    Css总结
  • 原文地址:https://www.cnblogs.com/cainiaoz/p/6004000.html
Copyright © 2011-2022 走看看