jQuery-devPlugin(3)

何乐
2023-12-01
<!DOCTYPE html>
<!--
    	声明:练习素材来自于jquery基础教程
    -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Developing Plugins</title>
    <link rel="stylesheet" href="../../css/08.css" type="text/css" />
    <link rel="stylesheet" href="../../ui-themes/smoothness/jquery-ui-1.10.0.custom.min.css" type="text/css" />
    <script src="../../lib/jquery.js"></script>
    <script src="../../lib/jquery-ui-1.10.0.custom.min.js"></script>
    <script>
    	/*提供灵活的方法参数*/
    	//我们看到了一些通过调整参数来使插件满足自己需求的例子。那些巧妙构思的插件通过定义恰当
    	//的默认值,并允许我们覆盖这些默认值提供了极大的灵活性,在轮到我们编写的时候,也要为用户
    	//考虑到
    	(function($){
    		$.fn.shadow = function(){
    			return this.each(function(){
    				var $originalElement = $(this);
    				for(var i=0;i<5;i++){
    					$originalElement.clone().css({
    						position:'absolute',
    						left:$originalElement.offset().left+i,
    						top:$originalElement.offset().top+i,
    						margin:0,
    						zIndex:-1,
    						opacity:0.1
    					}).appendTo('body');
    				}
    			});
    		}
    	})(jQuery);
    	
//  	$(document).ready(function(){
//  		$('h1').shadow();
//  	});
		/*参数对象*/
		//作为一种向插件用户公开选项的方式,对象要比刚刚使用的参数列表更加友
		//好。 对象会为每个参数提供一个有意义的标签,同时也会让参数次序变得无关紧要
		(function($){
			$.fn.shadowUtils = function(options){
				return this.each(function(){
					var $originalElement = $(this);
					for(var i=0;i<options.copies;i++){
						$originalElement.clone().css({
							position:'absolute',
							left:$originalElement.offset().left+i,
							top:$originalElement.offset().top+i,
							margin:0,
							zIndex:-1,
							opacity:options.opacity
						}).appendTo('body');
					}
				});
			}
		})(jQuery);
		
		//TEST
//		$(document).ready(function(){
//			var options = {copies:6,opacity:0.1};
//			$('h1').shadowUtils(options);
//		});
		
		/*默认参数值*/
		/*
		 随着方法的参数逐渐增多,始终指定每个参数并不是必须的。此时,一组合理的默认值可以
		增强插件接口的易用性。所幸的是,以对象作为参数可以帮我们很好地达成这一目标,它可以为
		用户未指定的参数自动传入默认值
		 * */
		(function($){
			$.fn.shadowUtilsDefault = function(opts){
				return this.each(function(){
					var $originalElement = $(this);
					var defaultOpts = {copies:5,opacity:0.1};
					var options = $.extend(defaultOpts,opts);
					for(var i=0;i<options.copies;i++){
						$originalElement.clone().css({
							position:'absolute',
							left:$originalElement.offset().left+i,
							top:$originalElement.offset().top+i,
							margin:0,
							zIndex:-1,
							opacity:options.opacity
						}).appendTo('body');
					}
				});
			}
		})(jQuery);
		
//		$(document).ready(function(){
//			$('h1').shadowUtilsDefault({copies:6,margin:1});
//		});

		/*回调函数*/
		//当然,方法参数也可能不是一个简单的数字值,可能会更复杂。在各种jQuery API中经常可
		//以看到另一种参数类型,即回调函数
		(function($){
			$.fn.shadowUtilsCallback = function(opts){
				var defaults = {
					copies:5,
					opacity:0.1,
					copyOffset:function(index){
						return {x:index,y:index};
					}
				};
				var options = $.extend(defaults,opts);
				return this.each(function(){
					var $originalElement = $(this);
					for(var i=0;i<options.copies;i++){
						var offset = options.copyOffset(i);
						$originalElement.clone().css({
							position:'absolute',
							left:$originalElement.offset().left+offset.x,
							top:$originalElement.offset().top+offset.y,
							margin:0,
							zIndex:-1,
							opacity:options.opacity
						}).appendTo('body');
					}
				})
			}
		})(jQuery);
		
		//Test
//		$(function(){
			$('h1').shadowUtilsCallback();
//			//修改参数
//			$('h1').shadowUtilsCallback({
//				copyOffset:function(index){
//					return {x:-index,y:-index};
//				}
//			});
//		});
		
		/*可定制的默认值*/
		//要支持默认值的可定制,需要把它们从方法定义中移出,然后放到外部代码可以访问的地方
		(function($){
			$.fn.shadowCustomParamsMethod = function(opts){
				$.fn.shadowCustomParamsMethod.default = {
					copies:5,
					opacity:0.1,
					copyOffset:function(index){
						return {x:index,y:index};
					}
				};
				var options = $.extend({},$.fn.shadowCustomParamsMethod.default,opts);
				return this.each(function(){
					var $originalElement = $(this);
					for(var i=0;i<options.copies;i++){
						var offset = options.copyOffset(i);
						$originalElement.clone().css({
							position:'absolute',
							left:$originalElement.offset().left+offset.x,
							top:$originalElement.offset().top+offset.y,
							margin:0,
							zIndex:-1,
							opacity:options.opacity
						}).appendTo('body');
					}
				});
			}
		})(jQuery);
		
		//Test
		$(function(){
			$.fn.shadowCustomParamsMethod.default = {
				copies:10,
				opacity:0.1
			}
			
			$('h1').shadowCustomParamsMethod({copies:8});
		});
    </script>
  </head>
  <body>
    <div id="container">
      <h1>Inventory</h1>
      <table id="inventory">
        <thead>
          <tr class="one">
            <th>Product</th>
            <th>Quantity</th>
            <th>Price</th>
          </tr>
        </thead>
        <tfoot>
          <tr class="two" id="sum">
            <td>Total</td>
            <td></td>
            <td></td>
          </tr>
          <tr id="average">
            <td>Average</td>
            <td></td>
            <td></td>
          </tr>
        </tfoot>
        <tbody>
          <tr>
            <td><a href="spam.html" data-tooltip-text="Nutritious and delicious!">Spam</a></td>
            <td>4</td>
            <td>2.50</td>
          </tr>
          <tr>
            <td><a href="egg.html" data-tooltip-text="Farm fresh or scrambled!">Egg</a></td>
            <td>12</td>
            <td>4.32</td>
          </tr>
          <tr>
            <td><a href="gourmet-spam.html" data-tooltip-text="Chef Hermann's recipe.">Gourmet Spam</a></td>
            <td>14</td>
            <td>7.89</td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>

 

转载于:https://my.oschina.net/Craft/blog/1589238

 类似资料: