[原创] jquery插件开发--tab

兼职外快的项目中,tab要求仿照华为云平台的风格。在这里抽成插件,方便后面维护,和其他项目的复用。

下图为华为云tab效果,不过华为云的前端应该是用ng开发。自己的插件是用jquery
这里写图片描述

贴上自己jqeury代码

/**
 * @name: HWNavigation.js
 * @date: Sun 14 Jun 2018
 * @author: zhongmingyuan 
 */

(function($) {


    var defaults = {
        slideSpeed: 600,
        fadeSpeed: 200,
        delay: 500
    };

    var config = {
        item: '.navItem',
        dropdown: '.navContent',
        dropdownContent: '.navContent > li',
        itemsDelay: 300
    };

    $.fn.HWNavigation = function() {
        // Initialize the plugin with the given arguments
        init.apply(this, arguments);

        return this;
    };
    function init(opts) {
        $(config.dropdown).hide();
        var options = $.extend({}, defaults, opts);
        this.data(options);

        this.each(function(i, e) {
            var $e = $(e);
            $e.find(config.item).each(function(index, element) {
                var $el = $(element);

                $el.data('height', $el.find(config.dropdown).height());
                $el.data('id', index);
            });

            menuSlide($e, options);
        });
    }

    function menuSlide(selector, opts) {
        var $previousItem = null,
            $currentItem = null,
            delayHappened = false,  
            timer;

        $(selector).on("mouseleave", function(e) {
            delayHappened = false;
            $(config.dropdown).slideUp(opts.slideSpeed);
        });

        $(selector).find(config.item).hover(function(e) {

            if (delayHappened === false) {
                timer = setTimeout(function() {
                    delayHappened = true;
                    $currentItem = $(e.currentTarget);

                    $(e.currentTarget).find(config.dropdownContent).show();
                    $(e.currentTarget).find(config.dropdown).slideDown(opts.slideSpeed);
                }, opts.delay);
            } else {

                timer = setTimeout(function() {
                    if ($(e.currentTarget).data('id') !== $currentItem.data('id')) {
                        $previousItem = $currentItem;
                        $currentItem = $(e.currentTarget);
                        $previousItem.find(config.dropdown).height($previousItem.data('height'))
                            .end().find(config.dropdownContent).fadeOut(opts.fadeSpeed);
                        $previousItem.find(config.dropdown).animate({
                            height: $currentItem.data('height')
                        }, opts.slideSpeed, function() {
                            $currentItem.find(config.dropdown).height($currentItem.data('height'))
                                .end().find(config.dropdownContent).hide()
                                .end().find(config.dropdown).show();
                            $previousItem.find(config.dropdown).hide()
                                .end().find(config.dropdown).height($previousItem.data('height'));
                            $currentItem.find(config.dropdownContent).fadeIn(opts.fadeSpeed);
                        });
                    }
                }, config.itemsDelay);
            }

        }, function(e) {
            clearTimeout(timer);
        });
    }

})(jQuery);

dom结构如下

 <nav id="booNavigation" class="booNavigation">
                <ul>
                    <!-- <li class="navItem">
                        <a href="#" title="首页">首页</a>

                    </li> -->
                    <li class="navItem">
                        <a href="#" title="案例专区">案例专区</a>
                        <ul class="navContent">
                            <li>
                                <ul>
                                    <li><a href="#" title="案例专区">案例专区</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                    <li><a href="#" title="The best cat">The best cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                </ul>
                            </li>
                            <li>
                                <ul>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                    <li><a href="#" title="The best cat">The best cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                </ul>
                            </li>
                            <li>
                                <ul>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                    <li><a href="#" title="The best cat">The best cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                </ul>
                            </li>
                        </ul>
                    </li>

                    <li class="navItem">
                        <a href="#" title="产品介绍">产品介绍</a>
                        <ul class="navContent">
                            <li>
                                <ul>
                                    <li><a href="#" title="产品介绍">产品介绍</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                </ul>
                            </li>
                            <li>
                                <ul>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                </ul>
                            </li>
                            <li>
                                <ul>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                </ul>
                            </li>
                        </ul>
                    </li>

                    <li class="navItem">
                        <a href="#" title="服务介绍">服务介绍</a>
                        <ul class="navContent">
                            <li>
                                <ul>
                                    <li><a href="#" title="服务介绍">服务介绍</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                </ul>
                            </li>
                            <li>
                                <ul>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                </ul>
                            </li>
                            <li>
                                <ul>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Boo the cat">Boo the cat</a><li/>
                                    <li><a href="#" title="The invisible cat">The invisible cat</a><li/>
                                    <li><a href="#" title="The amazing cat">The amazing cat</a><li/>
                                    <li><a href="#" title="Play with Boo the cat">Play with Boo the cat</a><li/>
                                    <li><a href="#" title="Pictures of Boo">Pictures of Boo</a><li/>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </nav>

下面调用即可

 $('#booNavigation').HWNavigation({
    slideSpeed: 400
 });

效果如下,导航栏切换的动画效果也基本一致
这里写图片描述

猜你喜欢

转载自blog.csdn.net/daxianghaoshuai/article/details/80858192