Jquery防止重复点击,处于加载中.

$.LoadEvents("showLoading",$("#tt"),"#902D2D");

$.LoadEvents("hideLoading",$("#tt"));

原生代码:

!(function ($) {
    $.extend({
        "LoadEvents": function (eventType, $parent, loadColor, bgColor, opacity, fn) {
            switch (eventType) {
                case "showLoading": {
                    if($(document.head).find('#css_loader').length == 0){
                        $(document.head).append('<link rel="stylesheet" type="text/css" id="css_loader" href="loader.css">');
                    }
                    var loaderTargets = [];
                    var $body = $(document.body);
                    var _bgColor = 'rgba(238,238,238,0.5)';
                    var _opacity = 1;
                    var _loadColor = '#67CF22';
                    if (typeof(bgColor) != "undefined") {
                        _bgColor = bgColor;
                    }
                    if(typeof(opacity) != "undefined") {
                        _opacity = opacity;
                    }
                    if($parent.find("#events_loader").length == 0){
                        // 可以有多个加载实例,所以需要用loaders管理
                        var $loader = $("<div id='events_loader'></div>").css({
                            background: _bgColor,
                            opacity:_opacity,
                            position: 'absolute',
                            top: 0,
                            left: 0,
                            width: '100%',
                            height: '100%'
                        });
                        // loading动画
                        var $icon = $('<div class="spinner">'+
                            '<div class="rect1"></div>'+
                            '<div class="rect2"></div>'+
                            '<div class="rect3"></div>'+
                            '<div class="rect4"></div>'+
                            '<div class="rect5"></div>'+
                            '</div>');
                        if(typeof(loadColor) != "undefined") {
                            _loadColor = loadColor;
                        }
                        $icon.children().css({"background":_loadColor});
                        $loader.append($icon);
                        $parent.append($loader);
                    }
                    break;
                }
                case "hideLoading": {
                    $parent.find("#events_loader").remove();
                    break
                }
            }
        }
    })
})(jQuery);

CSS

.spinner {
    width: 60px;
    height: 60px;
    text-align: center;
    font-size: 10px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
}

.spinner > div {
    height: 100%;
    width: 6px;
    display: inline-block;

    margin-left: 6px;
    -webkit-animation: stretchdelay 1.2s infinite ease-in-out;
    animation: stretchdelay 1.2s infinite ease-in-out;
}

.spinner .rect2 {
    -webkit-animation-delay: -1.1s;
    animation-delay: -1.1s;
}

.spinner .rect3 {
    -webkit-animation-delay: -1.0s;
    animation-delay: -1.0s;
}

.spinner .rect4 {
    -webkit-animation-delay: -0.9s;
    animation-delay: -0.9s;
}

.spinner .rect5 {
    -webkit-animation-delay: -0.8s;
    animation-delay: -0.8s;
}

@-webkit-keyframes stretchdelay {
    0%, 40%, 100% {
        -webkit-transform: scaleY(0.4)
    }
    20% {
        -webkit-transform: scaleY(1.0)
    }
}

@keyframes stretchdelay {
    0%, 40%, 100% {
        transform: scaleY(0.4);
        -webkit-transform: scaleY(0.4);
    }
    20% {
        transform: scaleY(1.0);
        -webkit-transform: scaleY(1.0);
    }
}

实现效果

引伸:$.extend({}),(function(){})(jQuery)的使用;

$.extend()深拷贝,浅拷贝的作用;

因为其本身存在一些重载原型

举个栗子:

var dog1={height:"60cm",age:3,color:{head:"yellow",body:"white"}};
var dog2={sex:"female",color:{body:"red"}};

var dog=$.extend(dog1,dog2);//默认false
var dog1=$.extend(true,dog1,dog2);
var dog2=$.extend(false,dog1,dog2);
//输出结果:
dog={height:"60cm",age:3,sex:"female",color:{body:"red"}};
dog1={height:"60cm",age:3,sex:"female",color:{head:"yellow",body:"red"}};
dog2={height:"60cm",age:3,sex:"female",color:{body:"red"}};

(function(){})(jQuery)有关匿名立即执行函数的理解;

(function(arg){...})(param),这个定义了一个带有arg参数的匿名函数,然后再通过param方法调用执行;

其实也就是相当于Var fuc =  function(){};fn(param)Jquery也是一样的操作。

$.extend()还可以针对jquery进行二次自定义封装方法

当你想要开发一个公用插件的时候就可以通过这种方式结合实现。

比如我想要将原生的js属性封装到自己的jquery里面去

举个栗子:将原生的document.getElementsByTagName封装给jquery去使用

JS模块

(function($){
    $.extend({
        "getTagname" : function(colval){
            var tagname = document.getElementsByTagName(colval);
            return tagname;
        }
    });
})(jQuery);
var tagval = $.getTagname("h1")[0];
console.log("tagval="+tagval.innerText);

Html模块

<h1>黄大大</h1>

上诉的LoadEvents也是同样的方法来封装实现的,主要介绍原理,实现可以自己尝试或留言询问。

转载于:https://www.cnblogs.com/b-code/p/9042432.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值