带有jQuery的模块化AJAX加载指示器

时间:2013-06-18 19:30:14

标签: javascript jquery css ajax css3

我正在尝试为包含许多AJAX请求的页面显示加载图像(并将父透明化)。添加/删除每个div的加载图标和不透明度的最有效方法是什么?

这是我到目前为止所拥有的。我的方法的问题是不透明度也应用于gif,这不是我想要的。是否可以轻松修复我的代码或更好的方法?

示例:http://jsfiddle.net/justincook/x4C2t/

HTML:

<div id="a" class="box">A</div>
<div id="b" class="box">B</div>
<div id="c" class="box">C</div>

JavaScript的:

$.fn.loading = function(show){
    if(show){
        this.prepend('<div class="loading-centered"></div>');
        this.css({ opacity: 0.3 });
    }else{
        this.children('.loading-centered').remove();
        this.css({ opacity: 1 });
    }
};

$('#a').loading(true); //start  
setTimeout(function(){ $('#a').loading(false); }, 3000); // stop

2 个答案:

答案 0 :(得分:5)

我会将样式保留在CSS中,只需使用JS来注入/删除元素 http://jsfiddle.net/x4C2t/7/

$.fn.loading = function(show){
    if(show){
        this.prepend('<div class="loading-centered"></div>');
    }else{
        this.children('.loading-centered').remove();
    }
};

的CSS:

.box {
    float:left;
    width:100px;
    height:100px;
    border:1px solid #bbb;
    margin: 10px;
    padding:20px;
    text-align:center;
    border-radius:10px;
    background: #eee;    
    position: relative;
}

.loading-centered {
    background:url('http://www.ajaxload.info/images/exemples/24.gif') center center no-repeat white;
    position:absolute;
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
    border-radius:10px;
    zoom: 1;
    filter: alpha(opacity=50);
    opacity: 0.5;
}

答案 1 :(得分:0)

不透明度也适用于儿童元素。而不是使用不透明度只是使父级的背景具有更多的不透明度与rgba颜色。 Here就是一个例子。你也在使用

setInterval(function(){ $('#a').loading(false); }, 3000);

什么时候应该完成

setTimeout(function(){ $('#a').loading(false); }, 3000);

这导致页面崩溃。