我的按需加载的导航栏无法正常显示高度,哪有问题

我的按需加载的导航栏无法正常显示高度,哪有问题

//dropdowm

(function($) {

    // 构造函数的方式

    function Dropdown(elem, options) {

        this.$elem = $(elem);

        this.option = options;

        this.className = options.active +'-active';

        this.$layer = this.$elem.find('.dropdown-layer');


        this._init();

    }


    Dropdown.DEFAULTS = {

        css3: false,

        active: 'dropdown',

        js: false,

        animation: 'fade',

        event: 'hover',

        delay:0

    }


    Dropdown.prototype._init = function() {

        this.$layer.showHide(this.option);


        var self = this;

        this.$layer.on('show shown hide hidden', function(e) {

            self.$elem.trigger('dropdown-' + e.type, function() {

                self.$layer.height('auto')

                    .height(self.$layer.height())

            });

        })

        

        if(this.option.event === 'click') {

            this.$elem.on('click',function(e) {

                self.show();

                e.stopPropagation();

            })

            $(document).on('click',$.proxy(this.hide, this))

        } else {

            this.$elem.hover($.proxy(this.show, this),$.proxy(this.hide, this)); 

        }

    }

    Dropdown.prototype.show = function() {

        var self = this;

        

        if(this.option.delay) {

            this.timer = setTimeout(function() {

                self.$elem.addClass(self.className);

                self.$layer.showHide('show');

            },this.option.delay)

        }else {

            this.$elem.addClass(this.className);

            this.$layer.showHide('show');

        }

        

    };

    Dropdown.prototype.hide = function() {

        if(this.option.delay) {

            clearTimeout(this.timer);

        }

        this.$elem.removeClass(this.className);

        this.$layer.showHide('hide');

    };

    // function dropdown(elem, options) {

    //     var $elem = $(elem);

    //     var className = $elem.data('active')+'-active';

    //     var $layer = $elem.find('.dropdown-layer');


    //     $layer.showHide(options)

    //     $elem.hover( function() {

    //             $elem.addClass(className);

    //             $layer.showHide('show');

    //         },function() {

    //             $elem.removeClass(className);

    //             $layer.showHide('hide');

    //     }); 

    // }


    // var defaults = {

    //    css3: false,

    //    js: false,

    //    animation: 'fade' 

    // }


    //以插件的形式将模块暴露出去

    $.fn.extend({

        dropdown:function(option){

            return this.each(function(){

                var dropdown = $(this).data('dropdown');

                var options = $.extend({},this.DEFAULTS,$(this).data,typeof option === 'object'&& option);


                if(!dropdown) {

                    $(this).data('dropdown', dropdown = new Dropdown(this,options));

                }


               if(typeof dropdown[option] === 'function') {

                     dropdown[option]();

               }

            });

        }

    });

})(jQuery)


//index

(function ($) {


    $('.dropdown').dropdown({

        css3:true,

        js:true,

        animation: 'slideUpDown',

        active: 'menu',

        event:'hover',

        delay: 200

    });

    

    

    $('.dropdown').on('dropdown-show', function (e) {

        var $this = $(this),

            dataLoad = $this.data('load');

            

        if (!dataLoad) return;


        if (!$this.data('loaded')) {

            var $layer = $this.find('.dropdown-layer'),

                html = '';


            $.getJSON(dataLoad, function (data) {

                // console.log(1);

                // setTimeout(function () {

                    for (var i = 0; i < data.length; i++) {

                        html += '<li><a href="' + data[i].url + '" target="_blank" class="menu-item">' + data[i].name + '</a></li>'

                    }

                    $layer.html(html);

                    $this.data('loaded', true);

                // }, 1000);

            });

        }

    });

})(jQuery);


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,因为同学写的代码和源码并不一样,所以无法准确判断。不过这里可给同学一个思路:

在dropdown.js中init方法中添加一个函数用来更新下拉层的高, 第一遍将下拉层高度设置为auto, 让其由填充的内容撑开,然后在获取到填充内容后的高度, 赋值给下拉层,让其在页面中显示正常。

http://img1.sycdn.imooc.com//climg/5de8e23709edabd709820486.jpg

调用这个函数, 在请求到json数据后,将拼接的html结构添加到页面后调用这个函数更新下拉层的高。

http://img1.sycdn.imooc.com//climg/5de8e248093c70d108070498.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕码 2019-12-05 15:56:51

同学你好,测试同学提供的代码是没有问题的,如下:

http://img1.sycdn.imooc.com//climg/5de8b804094d6bf004840225.jpg

建议同学粘贴其他相关代码到问答区进行提问,或者同学可以和源码比较一下,看是否哪里写的有问题。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 慕盖茨6589387 #1
    这两部分代码没问题的话,那问题在哪
    2019-12-05 16:04:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师