jQuery实现Loading

1 目的:使用jQuery实现的处理结果出现前的加载效果

2 目录结构

目录结构展示

3 images中的两张图片

(1)loading.gif

loading.gif图片

(2)loading-bars.gif

loading-bars.gif图片

4代码展示

(1)showLoading.html内容如下:

<!-- lang: html -->
<!DOCTYPE HTML>
<!-- lang: html -->
<html>
<!-- lang: html -->
    <head>
<!-- lang: html -->
            <title>jQuery showLoading example</title>
<!-- lang: html -->
            <meta charset="utf-8">
<!-- lang: html -->
            <link href="showLoading.css" rel="stylesheet" media="screen" />
<!-- lang: html -->
            <script type="text/javascript" src="jquery-1.5.2.min.js"></script>
<!-- lang: html -->
            <script type="text/javascript" src="jquery.showLoading.js"></script>
<!-- lang: html -->
            <style>
<!-- lang: html -->
                    a{
<!-- lang: html -->
                        color:blue;
<!-- lang: html -->
                        cursor:pointer;
<!-- lang: html -->
                        text-decoration:underline;
<!-- lang: html -->
                    }
<!-- lang: html -->
                    
<!-- lang: html -->
                    div.instructions_container{
<!-- lang: html -->
                        float:left;
<!-- lang: html -->
                        width:350px;
<!-- lang: html -->
                        margin-right:50px;
<!-- lang: html -->
                    }
<!-- lang: html -->

<!-- lang: html -->
                    div#activity_pane{
<!-- lang: html -->
                        float:left;
<!-- lang: html -->
                        width:350px;
<!-- lang: html -->
                        height:200px;
<!-- lang: html -->
                        border:1px solid #CCCCCC;
<!-- lang: html -->
                        background-color:#EEEEEE;
<!-- lang: html -->
                        padding-top:200px;
<!-- lang: html -->
                        text-align:center;
<!-- lang: html -->
                    }
<!-- lang: html -->

<!-- lang: html -->
                    div.exmple_links .link_category{
<!-- lang: html -->
                        margin-bottom:15px;
<!-- lang: html -->
                    }
<!-- lang: html -->

<!-- lang: html -->
                    .loading-indicator-bars{
<!-- lang: html -->
                        background-image:url('images/loading-bars.gif');
<!-- lang: html -->
                        width:150px;
<!-- lang: html -->
                    }
<!-- lang: html -->
            </style>
<!-- lang: html -->
            <script type="text/javascript">
<!-- lang: html -->
                jQuery(document).ready(function(){
<!-- lang: html -->
                    //
<!-- lang: html -->
                    // When a user clicks the 'loading-default' link,
<!-- lang: html -->
                    // call showLoading on the activity pane
<!-- lang: html -->
                    // with default options
<!-- lang: html -->
                    //
<!-- lang: html -->
                    jQuery('a.loading-default').click(function(){
<!-- lang: html -->
                       jQuery('#activity_pane').showLoading(); 
<!-- lang: html -->
                    });
<!-- lang: html -->

<!-- lang: html -->
                    //
<!-- lang: html -->
                    //  When a user clicks the 'loading-ajax' link,
<!-- lang: html -->
                    //  call showLoading,sleep,then call hide loading
<!-- lang: html -->
                    //  with default options
<!-- lang: html -->
                    //
<!-- lang: html -->
                    jQuery('a.loading-ajax').click(function(){
<!-- lang: html -->
                        jQuery('#activity_pane').showLoading({
<!-- lang: html -->
                            'afterShow':
<!-- lang: html -->
                            function(){
<!-- lang: html -->
                                setTimeout("jQuery('#activity_pane').hideLoading()",1000);
<!-- lang: html -->
                            }
<!-- lang: html -->
                        });
<!-- lang: html -->
                    });
<!-- lang: html -->

<!-- lang: html -->
                    //
<!-- lang: html -->
                    // When a user clicks the 'loading-bars' link,
<!-- lang: html -->
                    //  call showLoading with addClass specified
<!-- lang: html -->
                    //
<!-- lang: html -->
                    jQuery('a.loading-bars').click(function(){
<!-- lang: html -->

<!-- lang: html -->
                       jQuery('#activity_pane').showLoading(
<!-- lang: html -->
                            {
<!-- lang: html -->
                                'addClass':'loading-indicator-bars'
<!-- lang: html -->
                            }
<!-- lang: html -->
                        );
<!-- lang: html -->
                     
<!-- lang: html -->
                    });
<!-- lang: html -->

<!-- lang: html -->
                    //
<!-- lang: html -->
                    // When a user clicks the 'loading-bars' link,
<!-- lang: html -->
                    //call hideLoading on the activity pane
<!-- lang: html -->
                    //
<!-- lang: html -->
                    jQuery('a.loading-hide').click(function(){
<!-- lang: html -->
                        jQuery('#activity_pane').hideLoading();
<!-- lang: html -->
                    });
<!-- lang: html -->

<!-- lang: html -->
                });
<!-- lang: html -->
            </script>
<!-- lang: html -->
    </head>
<!-- lang: html -->
    <body>
<!-- lang: html -->
        <div class="instructions_container">
<!-- lang: html -->
            <div class="example_links">
<!-- lang: html -->

<!-- lang: html -->
                <div class="link_category">
<!-- lang: html -->
                    <div class="link">
<!-- lang: html -->
                        <a class="loading-default">Show default loading indicator</a>
<!-- lang: html -->
                    </div>
<!-- lang: html -->
                     <div class="link">
<!-- lang: html -->
                        <a class="loading-hide">Hide default loading indicator</a>
<!-- lang: html -->
                     </div>
<!-- lang: html -->
                </div>
<!-- lang: html -->

<!-- lang: html -->
                <div class="link_category">
<!-- lang: html -->
                        <div class="link">
<!-- lang: html -->
                            <a class="loading-ajax">simulate 1-second Ajax load</a>
<!-- lang: html -->
                        </div>
<!-- lang: html -->
                </div>
<!-- lang: html -->

<!-- lang: html -->
                <div class="link_category">
<!-- lang: html -->
                        <div class="link">
<!-- lang: html -->
                                <a class="loading-bars">show 'bars'-style loading indicator</a>
<!-- lang: html -->
                        </div>
<!-- lang: html -->
                        <div class="link">
<!-- lang: html -->
                                <a class="loading-hide">Hide 'bars'-style loading indicator</a>
<!-- lang: html -->
                        </div>
<!-- lang: html -->

<!-- lang: html -->
                </div>                
<!-- lang: html -->

<!-- lang: html -->
            </div>
<!-- lang: html -->

<!-- lang: html -->
            <div class="usage">
<!-- lang: html -->
                Usage with jQuery load method:
<!-- lang: html -->
                <pre>
<!-- lang: html -->
 jQuey('#activity_pane').showLoading();
<!-- lang: html -->
 jQuery('#activity_pane').load(
<!-- lang: html -->
     '/path/to/my/url',
<!-- lang: html -->
    {},
<!-- lang: html -->
    function(){
<!-- lang: html -->
     //
<!-- lang: html -->
    // this is the ajax callback
<!-- lang: html -->
     //
<!-- lang: html -->
    jQuery('#activity_pane').hideLoading();
<!-- lang: html -->
 });
<!-- lang: html -->
                </pre>
<!-- lang: html -->
            </div>            
<!-- lang: html -->
        </div>
<!-- lang: html -->

<!-- lang: html -->
        <div id="activity_pane">
<!-- lang: html -->
                Here is where we will load something via ajax.
<!-- lang: html -->
                <br/>
<!-- lang: html -->
                This container <b>must</b> have an id attribute
<!-- lang: html -->
        </div>
<!-- lang: html -->

<!-- lang: html -->
        <div style="clear:both;"></div>
<!-- lang: html -->
    </body>
<!-- lang: html -->
</html>

(2)showLoading.css内容展示:

<!-- lang: css -->
.loading-indicator{
<!-- lang: css -->
    height:80px;
<!-- lang: css -->
    width:80px;
<!-- lang: css -->
    background:url('images/loading.gif');
<!-- lang: css -->
    background-repeat: no-repeat;
<!-- lang: css -->
    background-position:center center;
<!-- lang: css -->
}
<!-- lang: css -->

<!-- lang: css -->
.loading-indicator-overlay{
<!-- lang: css -->
    background-color:#FFFFFF;
<!-- lang: css -->
    opacity:0.6;
<!-- lang: css -->
    filter:alpha(opacity = 60);
<!-- lang: css -->
}

(3)jquery.showLoading.js

<!-- lang: js -->
/*
<!-- lang: js -->
 * jQuery showLoading plugin v1.0
<!-- lang: js -->
 * 
<!-- lang: js -->
 * Copyright (c) 2009 Jim Keller
<!-- lang: js -->
 * Context - http://www.contextllc.com
<!-- lang: js -->
 * 
<!-- lang: js -->
 * Dual licensed under the MIT and GPL licenses.
<!-- lang: js -->
 *
<!-- lang: js -->
 */
<!-- lang: js -->

<!-- lang: js -->
	jQuery.fn.showLoading = function(options) {
<!-- lang: js -->
		
<!-- lang: js -->
		var indicatorID;
<!-- lang: js -->
       		var settings = {
<!-- lang: js -->
       			'addClass': '',
<!-- lang: js -->
	       		'beforeShow': '', 
<!-- lang: js -->
       			'afterShow': '',
<!-- lang: js -->
       			'hPos': 'center', 
<!-- lang: js -->
	       		'vPos': 'center',
<!-- lang: js -->
       			'indicatorZIndex' : 5001, 
<!-- lang: js -->
       			'overlayZIndex': 5000, 
<!-- lang: js -->
	       		'parent': '',
<!-- lang: js -->
       			'marginTop': 0,
<!-- lang: js -->
       			'marginLeft': 0,
<!-- lang: js -->
	       		'overlayWidth': null,
<!-- lang: js -->
       			'overlayHeight': null
<!-- lang: js -->
	       	};
<!-- lang: js -->

<!-- lang: js -->
		jQuery.extend(settings, options);
<!-- lang: js -->
       	
<!-- lang: js -->
       		var loadingDiv = jQuery('<div></div>');
<!-- lang: js -->
		var overlayDiv = jQuery('<div></div>');
<!-- lang: js -->

<!-- lang: js -->
		//
<!-- lang: js -->
		// Set up ID and classes
<!-- lang: js -->
		//
<!-- lang: js -->
		if ( settings.indicatorID ) {
<!-- lang: js -->
			indicatorID = settings.indicatorID;
<!-- lang: js -->
		}
<!-- lang: js -->
		else {
<!-- lang: js -->
			indicatorID = jQuery(this).attr('id');
<!-- lang: js -->
		}
<!-- lang: js -->
			
<!-- lang: js -->
		jQuery(loadingDiv).attr('id', 'loading-indicator-' + indicatorID );
<!-- lang: js -->
		jQuery(loadingDiv).addClass('loading-indicator');
<!-- lang: js -->
		
<!-- lang: js -->
		if ( settings.addClass ){
<!-- lang: js -->
			jQuery(loadingDiv).addClass(settings.addClass);
<!-- lang: js -->
		}
<!-- lang: js -->

<!-- lang: js -->

<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Create the overlay
<!-- lang: js -->
		//
<!-- lang: js -->
		jQuery(overlayDiv).css('display', 'none');
<!-- lang: js -->
		
<!-- lang: js -->
		// Append to body, otherwise position() doesn't work on Webkit-based browsers
<!-- lang: js -->
		jQuery(document.body).append(overlayDiv);
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Set overlay classes
<!-- lang: js -->
		//
<!-- lang: js -->
		jQuery(overlayDiv).attr('id', 'loading-indicator-' + indicatorID + '-overlay');
<!-- lang: js -->
		
<!-- lang: js -->
		jQuery(overlayDiv).addClass('loading-indicator-overlay');
<!-- lang: js -->
		
<!-- lang: js -->
		if ( settings.addClass ){
<!-- lang: js -->
			jQuery(overlayDiv).addClass(settings.addClass + '-overlay');
<!-- lang: js -->
		}
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Set overlay position
<!-- lang: js -->
		//
<!-- lang: js -->
		
<!-- lang: js -->
		var overlay_width;
<!-- lang: js -->
		var overlay_height;
<!-- lang: js -->
		
<!-- lang: js -->
		var border_top_width = jQuery(this).css('border-top-width');
<!-- lang: js -->
		var border_left_width = jQuery(this).css('border-left-width');
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// IE will return values like 'medium' as the default border, 
<!-- lang: js -->
		// but we need a number
<!-- lang: js -->
		//
<!-- lang: js -->
		border_top_width = isNaN(parseInt(border_top_width)) ? 0 : border_top_width;
<!-- lang: js -->
		border_left_width = isNaN(parseInt(border_left_width)) ? 0 : border_left_width;
<!-- lang: js -->
		
<!-- lang: js -->
		var overlay_left_pos = jQuery(this).offset().left + parseInt(border_left_width);
<!-- lang: js -->
		var overlay_top_pos = jQuery(this).offset().top + parseInt(border_top_width);
<!-- lang: js -->
		
<!-- lang: js -->
		if ( settings.overlayWidth !== null ) {
<!-- lang: js -->
			overlay_width = settings.overlayWidth;
<!-- lang: js -->
		}
<!-- lang: js -->
		else {
<!-- lang: js -->
			overlay_width = parseInt(jQuery(this).width()) + parseInt(jQuery(this).css('padding-right')) + parseInt(jQuery(this).css('padding-left'));
<!-- lang: js -->
		}
<!-- lang: js -->

<!-- lang: js -->
		if ( settings.overlayHeight !== null ) {
<!-- lang: js -->
			overlay_height = settings.overlayWidth;
<!-- lang: js -->
		}
<!-- lang: js -->
		else {
<!-- lang: js -->
			overlay_height = parseInt(jQuery(this).height()) + parseInt(jQuery(this).css('padding-top')) + parseInt(jQuery(this).css('padding-bottom'));
<!-- lang: js -->
		}
<!-- lang: js -->

<!-- lang: js -->

<!-- lang: js -->
		jQuery(overlayDiv).css('width', overlay_width.toString() + 'px');
<!-- lang: js -->
		jQuery(overlayDiv).css('height', overlay_height.toString() + 'px');
<!-- lang: js -->

<!-- lang: js -->
		jQuery(overlayDiv).css('left', overlay_left_pos.toString() + 'px');
<!-- lang: js -->
		jQuery(overlayDiv).css('position', 'absolute');
<!-- lang: js -->

<!-- lang: js -->
		jQuery(overlayDiv).css('top', overlay_top_pos.toString() + 'px' );
<!-- lang: js -->
		jQuery(overlayDiv).css('z-index', settings.overlayZIndex);
<!-- lang: js -->

<!-- lang: js -->
		//
<!-- lang: js -->
		// Set any custom overlay CSS		
<!-- lang: js -->
		//
<!-- lang: js -->
       		if ( settings.overlayCSS ) {
<!-- lang: js -->
       			jQuery(overlayDiv).css ( settings.overlayCSS );
<!-- lang: js -->
       		}
<!-- lang: js -->

<!-- lang: js -->

<!-- lang: js -->
		//
<!-- lang: js -->
		// We have to append the element to the body first
<!-- lang: js -->
		// or .width() won't work in Webkit-based browsers (e.g. Chrome, Safari)
<!-- lang: js -->
		//
<!-- lang: js -->
		jQuery(loadingDiv).css('display', 'none');
<!-- lang: js -->
		jQuery(document.body).append(loadingDiv);
<!-- lang: js -->
		
<!-- lang: js -->
		jQuery(loadingDiv).css('position', 'absolute');
<!-- lang: js -->
		jQuery(loadingDiv).css('z-index', settings.indicatorZIndex);
<!-- lang: js -->

<!-- lang: js -->
		//
<!-- lang: js -->
		// Set top margin
<!-- lang: js -->
		//
<!-- lang: js -->

<!-- lang: js -->
		var indicatorTop = overlay_top_pos;
<!-- lang: js -->
		
<!-- lang: js -->
		if ( settings.marginTop ) {
<!-- lang: js -->
			indicatorTop += parseInt(settings.marginTop);
<!-- lang: js -->
		}
<!-- lang: js -->
		
<!-- lang: js -->
		var indicatorLeft = overlay_left_pos;
<!-- lang: js -->
		
<!-- lang: js -->
		if ( settings.marginLeft ) {
<!-- lang: js -->
			indicatorLeft += parseInt(settings.marginTop);
<!-- lang: js -->
		}
<!-- lang: js -->
		
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// set horizontal position
<!-- lang: js -->
		//
<!-- lang: js -->
		if ( settings.hPos.toString().toLowerCase() == 'center' ) {
<!-- lang: js -->
			jQuery(loadingDiv).css('left', (indicatorLeft + ((jQuery(overlayDiv).width() - parseInt(jQuery(loadingDiv).width())) / 2)).toString()  + 'px');
<!-- lang: js -->
		}
<!-- lang: js -->
		else if ( settings.hPos.toString().toLowerCase() == 'left' ) {
<!-- lang: js -->
			jQuery(loadingDiv).css('left', (indicatorLeft + parseInt(jQuery(overlayDiv).css('margin-left'))).toString() + 'px');
<!-- lang: js -->
		}
<!-- lang: js -->
		else if ( settings.hPos.toString().toLowerCase() == 'right' ) {
<!-- lang: js -->
			jQuery(loadingDiv).css('left', (indicatorLeft + (jQuery(overlayDiv).width() - parseInt(jQuery(loadingDiv).width()))).toString()  + 'px');
<!-- lang: js -->
		}
<!-- lang: js -->
		else {
<!-- lang: js -->
			jQuery(loadingDiv).css('left', (indicatorLeft + parseInt(settings.hPos)).toString() + 'px');
<!-- lang: js -->
		}		
<!-- lang: js -->

<!-- lang: js -->
		//
<!-- lang: js -->
		// set vertical position
<!-- lang: js -->
		//
<!-- lang: js -->
		if ( settings.vPos.toString().toLowerCase() == 'center' ) {
<!-- lang: js -->
			jQuery(loadingDiv).css('top', (indicatorTop + ((jQuery(overlayDiv).height() - parseInt(jQuery(loadingDiv).height())) / 2)).toString()  + 'px');
<!-- lang: js -->
		}
<!-- lang: js -->
		else if ( settings.vPos.toString().toLowerCase() == 'top' ) {
<!-- lang: js -->
			jQuery(loadingDiv).css('top', indicatorTop.toString() + 'px');
<!-- lang: js -->
		}
<!-- lang: js -->
		else if ( settings.vPos.toString().toLowerCase() == 'bottom' ) {
<!-- lang: js -->
			jQuery(loadingDiv).css('top', (indicatorTop + (jQuery(overlayDiv).height() - parseInt(jQuery(loadingDiv).height()))).toString()  + 'px');
<!-- lang: js -->
		}
<!-- lang: js -->
		else {
<!-- lang: js -->
			jQuery(loadingDiv).css('top', (indicatorTop + parseInt(settings.vPos)).toString() + 'px' );
<!-- lang: js -->
		}		
<!-- lang: js -->

<!-- lang: js -->

<!-- lang: js -->
		 
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Set any custom css for loading indicator
<!-- lang: js -->
		//
<!-- lang: js -->
       		if ( settings.css ) {
<!-- lang: js -->
       			jQuery(loadingDiv).css ( settings.css );
<!-- lang: js -->
       		}
<!-- lang: js -->

<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Set up callback options
<!-- lang: js -->
		//
<!-- lang: js -->
		var callback_options = 
<!-- lang: js -->
			{
<!-- lang: js -->
				'overlay': overlayDiv,
<!-- lang: js -->
				'indicator': loadingDiv,
<!-- lang: js -->
				'element': this
<!-- lang: js -->
			};
<!-- lang: js -->
	
<!-- lang: js -->
		//
<!-- lang: js -->
		// beforeShow callback
<!-- lang: js -->
		//
<!-- lang: js -->
		if ( typeof(settings.beforeShow) == 'function' ) {
<!-- lang: js -->
			settings.beforeShow( callback_options );
<!-- lang: js -->
		}
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Show the overlay
<!-- lang: js -->
		//
<!-- lang: js -->
		jQuery(overlayDiv).show();
<!-- lang: js -->
		
<!-- lang: js -->
		//
<!-- lang: js -->
		// Show the loading indicator
<!-- lang: js -->
		//
<!-- lang: js -->
		jQuery(loadingDiv).show();
<!-- lang: js -->

<!-- lang: js -->
		//
<!-- lang: js -->
		// afterShow callback
<!-- lang: js -->
		//
<!-- lang: js -->
		if ( typeof(settings.afterShow) == 'function' ) {
<!-- lang: js -->
			settings.afterShow( callback_options );
<!-- lang: js -->
		}
<!-- lang: js -->

<!-- lang: js -->
		return this;
<!-- lang: js -->
    	 };
<!-- lang: js -->

<!-- lang: js -->

<!-- lang: js -->
	jQuery.fn.hideLoading = function(options) {
<!-- lang: js -->
		
<!-- lang: js -->
		
<!-- lang: js -->
       		var settings = {};
<!-- lang: js -->
	
<!-- lang: js -->
       		jQuery.extend(settings, options);
<!-- lang: js -->

<!-- lang: js -->
		if ( settings.indicatorID ) {
<!-- lang: js -->
			indicatorID = settings.indicatorID;
<!-- lang: js -->
		}
<!-- lang: js -->
		else {
<!-- lang: js -->
			indicatorID = jQuery(this).attr('id');
<!-- lang: js -->
		}
<!-- lang: js -->
       	
<!-- lang: js -->
   		jQuery(document.body).find('#loading-indicator-' + indicatorID ).remove();
<!-- lang: js -->
		jQuery(document.body).find('#loading-indicator-' + indicatorID + '-overlay' ).remove();
<!-- lang: js -->
		
<!-- lang: js -->
		return this;
<!-- lang: js -->
     	};

转载于:https://my.oschina.net/syc2013/blog/140394

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值