zoukankan      html  css  js  c++  java
  • UI设计星级评价

     经常上淘宝的童鞋应该知道,每次购物确认付款后系统都会提示你给对方做评价,差评,中评,好评。今天闲着没事我自己也做了个类似的星级评价组件。

    您给的评价是:

    function addEvent(obj,evtype,fn,useCapture) {
    		if (obj.addEventListener) {
    			obj.addEventListener(evtype,fn,useCapture);
    		} else {
    			obj.attachEvent("on"+evtype,function(){return fn.call(obj)});//IE不支持事件捕获,修复ie绑定事件this指向window的bug
    		} 
    	}
    
      (function(w){
         w.Star=Star||{};
    	 /*
    	   @totalStar:总星级数
    	   @defaultStar:默认星级数
    	   @result:评价结果的渲染位置
    	   @hover:鼠标画上去时的样式
    	   @select:鼠标点击时的样式
    	 */
    	 function Star(options){
    	    this.totlaStar=options.total||5;
    		this.defaultStar=options.defaultStar||4;
    		this.target=options.target||document.body;//新建UI渲染到哪个元素中
    		this.class={mouseover:options.hover||"hover",click:options.select||"select",mouseout:""}
    	    this.init();
    	 }
    	 
    	 Star.prototype={
    	   init:function(){
    	      var div=document.createElement('div'),tmpa=[],select=document.createElement("select");
    				select.name="starSelect";;
    		  for(var i=0;i<this.totlaStar;i++){
    		    var a=document.createElement('a');
    			select.options.add(new Option(i+1+"星级",i+1)); 
                a.index=i;
    			if(i<this.defaultStar){
    			    a.select=true;
    		        a.className="select";
    		    };
    			a.title=(i+1)+"星级";
    			tmpa.push(a);
    		    div.appendChild(a);
    		  };
    		  select.options[this.defaultStar-1].selected=true;
    		  div.className="star";
    		  this.div=div;
    		  this.select=select;
    		  this.a=tmpa;
    		  var self=this;
    		  this._eventHandler=function(e){
    			 self.eventHandler(e);
    		  };
    		   this._selectChangeHandler=function(){
    			 self.selectChangeHandler(this.value-1);
    		  };
    		  addEvent(div,"mouseover",this._eventHandler);
    		  addEvent(div,"click",this._eventHandler);
    		  addEvent(div,"mouseout",this._eventHandler);
    		  addEvent(select,"change",this._selectChangeHandler);
    		  this.render();
    	   },
    	   eventHandler:function(e){
    	      var e=e||window.event,target=e.target||e.srcElement;
    		  for(var i=0;i<this.totlaStar;i++){
    			   if(i<1+target.index){
    			   this.a[i].select=(e.type=="click")?true:this.a[i].select;
    		       this.a[i].className=(e.type=="mouseout")?
    			                        (this.a[i].select?"select":""):
    								     this.class[e.type];
    			   }else{
    				 if(e.type=="click"){
    				   this.a[i].className='';
    				   this.a[i].select=false;}
    			   }
    		  }
    		  if(e.type=="click"){
    			if(e.s!==1){this.select.options[target.index].selected=true;}
    		  }
    	   },
    	   selectChangeHandler:function(value){
    	       this.eventHandler({s:1,type:"click",target:{index:value}});//将select的onchange事件伪造成onclick好对它们进行统一处理
    	   },
    	   render:function(){
    	      this.target.appendChild(this.select);
    		  this.target.appendChild(this.div);
    	   }
    	 }
       
      })(this);
      new Star({target:document.getElementById("target"),total:10});
    附完整代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>UI-星级评分系统</title>
    <style>
    .star a{
    float:left;
    cursor:pointer;
    text-align:center;
    16px;
    height:16px;
    background:url(http://happy.hustonline.net/photo/photos3/hustxiaoc/43061/390137.gif) 0 -32px;}
    .star a.hover{
    background:url(http://happy.hustonline.net/photo/photos3/hustxiaoc/43061/390137.gif) 0 -48px;}
    .star a.select{
    background:url(http://happy.hustonline.net/photo/photos3/hustxiaoc/43061/390137.gif);}
    </style>
    </head>
    <body>
    您给的评价是:
    <div id="target" style="margin-bottom:40px;">
    </div>
    <script>
    function addEvent(obj,evtype,fn,useCapture) {
    		if (obj.addEventListener) {
    			obj.addEventListener(evtype,fn,useCapture);
    		} else {
    			obj.attachEvent("on"+evtype,function(){return fn.call(obj)});//IE不支持事件捕获,修复ie绑定事件this指向window的bug
    		} 
    	}
    
      (function(w){
         w.Star=Star||{};
    	 /*
    	   @totalStar:总星级数
    	   @defaultStar:默认星级数
    	   @result:评价结果的渲染位置
    	   @hover:鼠标画上去时的样式
    	   @select:鼠标点击时的样式
    	 */
    	 function Star(options){
    	    this.totlaStar=options.total||5;
    		this.defaultStar=options.defaultStar||4;
    		this.target=options.target||w.body;//新建UI渲染到哪个元素中
                    this.onchange=options.onchange||function(){};
    		this.class={mouseover:options.hover||"hover",click:options.select||"select",mouseout:""}
    	    this.init();
    	 }
    	 
    	 Star.prototype={
    	   init:function(){
    	      var div=document.createElement('div'),tmpa=[],select=document.createElement("select");
    				select.name="starSelect";;
    		  for(var i=0;i<this.totlaStar;i++){
    		    var a=document.createElement('a');
    			select.options.add(new Option(i+1+"星级",i+1)); 
                a.index=i;
    			if(i<this.defaultStar){
    			    a.select=true;
    		        a.className="select";
    		    };
    			a.title=(i+1)+"星级";
    			tmpa.push(a);
    		    div.appendChild(a);
    		  };
    		  select.options[this.defaultStar-1].selected=true;
    		  div.className="star";
    		  this.div=div;
    		  this.select=select;
    		  this.a=tmpa;
    		  var self=this;
    		  this._eventHandler=function(e){
    			 self.eventHandler(e);
    		  };
    		   this._selectChangeHandler=function(){
    			 self.selectChangeHandler(this.value-1);
    		  };
    		  addEvent(div,"mouseover",this._eventHandler);
    		  addEvent(div,"click",this._eventHandler);
    		  addEvent(div,"mouseout",this._eventHandler);
    		  addEvent(select,"change",this._selectChangeHandler);
    		  this.render();
    	   },
    	   eventHandler:function(e){
    	      var e=e||window.event,target=e.target||e.srcElement,cur=1+target.index;
    		  for(var i=0;i<this.totlaStar;i++){
    			   if(i<cur){
    			   this.a[i].select=(e.type=="click")?true:this.a[i].select;
    		       this.a[i].className=(e.type=="mouseout")?
    			                        (this.a[i].select?"select":""):
    								     this.class[e.type];
    			   }else{
    				 if(e.type=="click"){
    				   this.a[i].className='';
    				   this.a[i].select=false;}
    			   }
    		  }
    		  if(e.type=="click"){
    			this.onchange(cur);
    			if(e.s!==1){
    				this.select.options[target.index].selected=true;
    			}
    		  }
                     
    	   },
    	   selectChangeHandler:function(value){
    	       this.eventHandler({s:1,type:"click",target:{index:value}});
    	   },
    	   render:function(){
    	      this.target.appendChild(this.select);
    		  this.target.appendChild(this.div);
    	   }
    	 }
       
      })(this);
      new Star({target:document.getElementById("target"),total:5,onchange:function(v){alert(v);}});
    </script>
    </body>
    </html>
    
  • 相关阅读:
    多线程单例模式之立即加载(饿汉模式)
    多线程单例模式之延迟加载(懒汉模式)
    java多线程之ThreadLocal
    java多线程的字符流与字节流
    java多线程生产者消费者
    深入理解多线程三
    深入理解多线程二
    深入java多线程一
    mybatis学习三
    mybatis学习二
  • 原文地址:https://www.cnblogs.com/hust/p/2033148.html
Copyright © 2011-2022 走看看