星星评分 修改二

补充全局变量问题,多评分解决,代码复用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>星际评分一</title>
		<style>
			body,ul,li{
				padding: 0;
				margin: 0;
			}
			li{
				list-style-type:none;
				/*无标题*/
			
			}
			.rating{
				width:130px ;
				height: 26px;
				margin: 100px auto;
			}
			.rating-item{
				float: left;
				width: 26px;
				height: 26px;
				background:url(../img/te.png) no-repeat;
				cursor: pointer;/*手*/
				
			}
		</style>
	</head>
	<body>
		<!--第一种实现-->
		<ul class="rating" id ="rating">
			<li class="rating-item" title="很不好"></li>
			<li class="rating-item" title="不好"></li>
			<li class="rating-item" title="一般"></li>
			<li class="rating-item" title="好"></li>
			<li class="rating-item" title="很好"></li>
		</ul>
		
		<ul class="rating" id ="rating2">
			<li class="rating-item" title="很不好"></li>
			<li class="rating-item" title="不好"></li>
			<li class="rating-item" title="一般"></li>
			<li class="rating-item" title="好"></li>
			<li class="rating-item" title="很好"></li>
		</ul>
<script src="../js/jquery-2.1.1.min.js"></script>
	<script>
	//团队开发,便于维护,避免命名空间重复,造成的是事件覆盖,可以统一用lzk_num;
	//或者加入自运行函数。解决全局变量问题。加入闭包中(function(){ })();
	/*加入对象 var rating =*/
	var rating = (function(){	
		
		//点亮放在外面,只执行一次就好,可以放在外面,如下为linghtOn同一添加¥item参数
		        var lightOn =function($item,num) {
			       $item.each(function(index){
			         if(index < num)
			            {
				          $(this).css('background-position','0 -26px');
			            }else{
				           $(this).css('background-position','0 0');
			            }
			        });
		        };
		//多评分,利用函数产地参数。
	/*	3.4隐藏 * var num = 2,$rating =$('#rating'),$item = $rating.find('.rating-item');*/
		   /*3简历函数传递参数num,不同的列表可能需要不同的num初始值*/
             //3.1简历函数传递num,  el表示ul中的id
             var init = function (el, num){
             	//3.5将3.4中内容隐藏后,在init函数内部接收 num;用el传递进来的参数。
             	var $rating =$(el),
		             $item = $rating.find('.rating-item');
		        //3.6将点亮和事件运行也移动到这里,并进行相应的修改。
		         //点亮
//		        var lightOn =function(num) {
//			       $item.each(function(index){
//			         if(index < num)
//			            {
//				          $(this).css('background-position','0 -26px');
//			            }else{
//				           $(this).css('background-position','0 0');
//			            }
//			        });
//		        };
		        //初始化
                 lightOn($item,num);        
                 //事件绑定
                 //修改事案绑定,子元素事件交由父元素执行
                 $rating.on('mouseover','.rating-item',function(){
          	          lightOn($item,$(this).index() + 1);
                    }).on('click','.rating-item',function(){
                     	num = $(this).index() + 1;
                    }).on('mouseout',function(){
          	           lightOn($item,num);
                    });
                }  
                
                //JQuery插件
                $.fn.extend({
                	rating:function(num){
                		return this.each(function(){
                			init(this,num);
                		});
                	}
                });
             //3.2 当前建立的init函数是局部独立的,如何与外部进行参数传递,可以返回init
                 //通过建立一个对象,这个对象具有方法:init;所以在开头家兔var rating=,成为对象。
                return {
             	  init:init //没有;
                   };
          	})()
    
    /*3.3在这里设置init方法的参数。*/
   rating.init('#rating',2);
// rating.init('#rating2',3);
$('#rating2').rating(4);

</script>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/m0_37727198/article/details/81222399