DropDownList自定义样式(一)

     效果图:

     

     刚开始想实现这个效果,发现DropDownList控件自己没有这个功能。于是百度了一下,资料挺多的,就是没有我想要的。最后没办法,只好在某个大型的门户网站上扣了,终于扣下来了。在次跟大家共享一下。

     一共需要另外的两个文件,一个Combox.js和一个Combox.css文件。其代码在下边,另外需要在aspx页面的<head></head>里加入

<link href="http://www.cnblogs.com/css/page/Combox.css" rel="stylesheet" type="text/css" />

<script language="javascript" type="text/javascript" src="/js/Combox.js"></script>

两行代码,一行是引入css样式表,一行是引入js文件,文件路径可以自定义。此外,还需要写一段js代码,注册一下DropDownList控件。代码如下:

<script language="javascript" type="text/javascript">
//注册select

//DropDownList1为DropDownList控件的Id,300为线框显示的宽度,280为箭头显示的宽度
new Combox("DropDownList1",300,280);
</script>

 

    

ok,这样下来,就可以实现上图的效果了。

 

Combox.js文件代码:

 

ContractedBlock.gif ExpandedBlockStart.gif Code

Function.prototype.BindForEvent 
= function()
{
    var __m 
= thisobject = arguments[0], args = new Array();
    
for(var i = 1; i < arguments.length; i++)
    {
        args.push(arguments[i]);
    }
    
    
return function(event
    {
        
return __m.apply(object, [( event || window.event)].concat(args));
    }
};

var Class 
= {
  create: function() {
    
return function() {
      
this.init.apply(this, arguments);
    }
  }
}

Object.extend 
= function(destination, source) 
{
    
for (var property in source) 
    {
        destination[property] 
= source[property];
    }
    
return destination;
}

function Offset(e)
{
    var t 
= e.offsetTop;
    var l 
= e.offsetLeft;
    var w 
= e.offsetWidth;
    var h 
= e.offsetHeight-2;
    var f 
='';
    
    
while(e=e.offsetParent)
    {
        f
+= (e.id || e.className || e.tagName) +e.offsetTop + "---";
        t
+=e.offsetTop;
        l
+=e.offsetLeft;
    }
    
//alert(f);
    return {top : t,left : l,width : w,height : h}
}

function $()
{
    var target 
= arguments[0];
    
if(typeof target == "object")
    {
        
return target;
    }
    
return document.getElementById(target);
}
var Comboxs 
= [];
var Combox 
= Class.create();
Combox.prototype 
= {
    DrpID:
'',
    offset:
null,
    DrpList:
null,
    SetHeight:
22//
    box:null,
    input:
null,
    Btn:
null,
    Optionsbox:
null,
    seledOption:
null,
    seledText:
'',
    seledValue:
'',
    bJoin:
false,//是否联动
    JoinID:null//联动对象ID
    w:0,
    inputW:
0,
    s:
1// 0  编辑页使用  1列表页显示
    NumOption:0,
    init:function(objID,w,inputW,s){
        
this.s = s || 0;
        
this.DrpID =objID
        
this.DrpList = $(objID);
        
if!this.DrpList) return;
        
this.w = w;
        
this.inputW = inputW;
        
//this.offset = Offset(this.DrpList);
        Comboxs.push([this.DrpID,this]);
        
if(this.DrpList.getAttribute("joinDrp"!= null && this.DrpList.getAttribute("joinDrp")!= "")
        {
            
this.bJoin = true;
            
this.JoinID = this.DrpList.getAttribute("joinDrp");
        }
        
this.CreateBox();
    },
    CreateBox:function()
    {
        var Div 
= document.createElement("DIV");
        
if(this.s == 0 )
        {
            Div.className 
= "DrpBox_normal";
        }
        
else
        {
            Div.className 
= "sDrpBox_normal";
        }
        Div.setAttribute(
"id",this.DrpList.id+"_"+"BOX");
        Div.style.width
=this.w+"px";
        
if(this.DrpList.style.display == 'none' )
        {
           Div.style.display 
= 'none'
        }
        
        
this.DrpList.style.display = 'none';
        
this.box = Div;
        
        var parentobj 
= this.DrpList.parentNode;
        
if!parentobj  ) return;
        parentobj.insertBefore(Div,
this.DrpList);
        
this.CreateInput();
        
this.CreateButton();
        
this.CreateOptions();
    },
     CreateInput:function()
     {
        var Div 
= document.createElement("DIV");
        
//Div.style.position ="absolute";
        Div.setAttribute("id",this.DrpList.id+"_"+"INPUT");
        Div.className 
= "DrpInput_normal";
        Div.style.width 
=this.inputW+"px";
        Div.style.overflow 
='hidden';
        
this.box.appendChild(Div);
        
this.input = Div;
        
this.input.onmouseout = this.HidOptionBoxOutInput.BindForEvent(this.input,this);
   },
   CreateButton:function()
   {
        var Div 
= document.createElement("DIV");
        Div.className 
= "DrpBtn";
        Div.setAttribute(
"id",this.DrpList.id+"_"+"Btn");
        
this.Btn = Div;
        
this.box.appendChild(Div);
        
this.Btn.onmouseout = this.HidOptionBoxOutInput.BindForEvent(this.Btn,this);
   },
   CreateOptions:function()
   {
        
this.Optionsbox = null;
        var Div 
= document.createElement("DIV");
        Div.style.display 
= 'none';
        Div.style.width 
=this.w+"px";
        
        Div.className 
= "DrpOptionsBox";
        Div.setAttribute(
"id",this.DrpList.id +"_"+ "Optionsbox");
        
        
if! browser.msie)
        {
            var f 
= Offset(this.box);
            Div.style.top 
= f.top+document.documentElement.scrollTop + this.SetHeight +"px";
            Div.style.left 
= f.left+"px";
        }
        var parentobj 
= this.DrpList.parentNode;
        
if!parentobj  ) return;
        parentobj.insertBefore(Div,
this.DrpList);
        
this.Optionsbox = Div;
        var Nums 
= this.DrpList.options.length;
        
this.NumOption = Nums;
        
        
for(var i=0;i< Nums;i++)
        {
            var DivOp 
= document.createElement("DIV");
            DivOp.innerHTML 
= this.DrpList.options[i].innerHTML;
            DivOp.setAttribute(
"value",this.DrpList.options[i].value);
            DivOp.setAttribute(
"index",i);
            DivOp.style.cursor 
= "default";
            
if(this.DrpList.options[i].selected )
            {
                 DivOp.setAttribute(
"selected","true");
                 DivOp.className 
= "DrpOptionsSeled";
                 
this.seledOption = DivOp;
                 
this.seledText =DivOp.innerHTML;
                 
this.seledValue = DivOp.getAttribute("value");
                 
this.input.innerHTML = this.seledText;
            }
            
else
            {
                DivOp.setAttribute(
"selected","false");
                DivOp.className 
= "DrpOptions";
            }
            Div.appendChild(DivOp);
            DivOp.onmouseover 
= this.Option_onMouseover.BindForEvent(DivOp,DivOp,this);
            DivOp.onmouseout 
= this.Option_onMouseout.BindForEvent(DivOp,DivOp,this);
            DivOp.onclick 
= this.Option_onClick.BindForEvent(DivOp,DivOp,this);
        }
        
if( Nums  > 6 )
        {
            Div.style.overflow
="auto";
            Div.style.height
= this.SetHeight*6+"px";
        }
        
else
        {
            Div.style.height 
=this.SetHeight*Nums +"px";
        }
        
this.Optionsbox.onmouseout = this.HidOptionBoxEnt.BindForEvent(this.box,this);
        
this.input.onclick = this.ShowOptionBox.BindForEvent(this.input,this);
        
this.Btn.onclick = this.ShowOptionBox.BindForEvent(this.input,this);
   },
   Option_onMouseover:function()
   {
       var obj 
= arguments[1];
        
if( obj.className == "DrpOptionsSeled" )
        {
            
return;
        }
        
else
        {
           obj.className 
= "DrpOptionsOver"
        }
   },
   Option_onMouseout:function()
   {
       var obj 
= arguments[1];
        
if( obj.className == "DrpOptionsSeled" )
        {
            
return;
        }
        
else
        {
           obj.className 
= "DrpOptions"
        }
   },
   CloseCombox:function(ojbID)
   {
        
for(var i=0;i<Comboxs.length;i++)
        {
            
if(Comboxs[i][0== ojbID )
            {
                
continue;
            }
            
if( Comboxs[i][1].Optionsbox.style.display == '')
            {
                Comboxs[i][
1].Optionsbox.style.display ='none';
            }
        }
   },
   Option_onClick:function()
   {
        var opt 
= arguments[1];
        var obj 
= arguments[2];
        
        var sel 
= opt.getAttribute("selected");
        
if( sel == 'false' )
        {
            obj.seledOption.setAttribute(
"selected","false");
            obj.seledOption.className 
= "DrpOptions";
            opt.setAttribute(
"selected","true");
            opt.className 
= "DrpOptionsSeled";
            obj.seledOption 
= opt;
            obj.seledText 
=opt.innerHTML;
            obj.seledValue 
= opt.getAttribute("value");
            obj.input.innerHTML 
= obj.seledText;
        }
        var i 
= parseInt(opt.getAttribute("index"));
        obj.DrpList.options[i].selected 
= true;
        obj.HidOptionBox(obj);
        
if( sel == 'false' )
        {
            
if( obj.DrpList.onchange)
            {
                obj.DrpList.onchange();
            }
            
if(obj.bJoin)
            {
                
for(var i=0;i<Comboxs.length;i++)
                {
                    
if ( obj.JoinID == Comboxs[i][0] )
                    {
                        Comboxs[i][
1].CreateOptions();
                        
break;
                    }
                }
            }
        }
        
if(obj.DrpList.onblur)
        {
            obj.DrpList.onblur(obj.DrpList);
        }
   },
   ShowOptionBox:function()
   {
        var obj 
= arguments[1];
        obj.CloseCombox(obj.DrpID); 
//关闭打开得
        if( obj.Optionsbox.style.display == '')
        {
           obj.HidOptionBox(obj);
            
if(obj.DrpList.onblur)
            {
                obj.DrpList.onblur(obj.DrpList);
            }
           
return;
        }
        obj.Optionsbox.style.display 
= '';
        
if(obj.DrpList.onfocus)
        {
            obj.DrpList.onfocus(obj.DrpList);
        }
        
if(this.s == 0 )
        {
            obj.box.className 
="DrpBox_focus";
        }
   },
   HidOptionBox:function()
   {
         var obj 
= arguments[0];
        obj.Optionsbox.style.display 
= 'none';
        
if(this.s == 0 )
        {
            obj.box.className 
="DrpBox_normal";
        }
   },
   IsOptionsboxUp:function()
   {
        alert(
1);
   },
   HidOptionBoxEnt:function()
   {
         var obj 
= arguments[1];
         var evt 
= arguments[0];
         
         var boxOffset 
= Offset(obj.box);
         var left 
=boxOffset.left;
         var tops 
=boxOffset.top;
         var w 
= boxOffset.width;
         var h 
=obj.SetHeight*obj.NumOption;
         var scrlTop 
= document.documentElement.scrollTop;

         
if(obj.NumOption > 6 )
         {
            h
=obj.SetHeight*6;
         }
         
if(evt.clientX > left && evt.clientX < (left+w) && evt.clientY+scrlTop > tops+2 && evt.clientY+scrlTop < (tops+h+obj.SetHeight ))
         {
            
return;
         }
        obj.Optionsbox.style.display 
= 'none';
         
if(obj.s == 0 )
         {
            obj.box.className 
="DrpBox_normal";
        }
        
if(obj.DrpList.onblur)
        {
            obj.DrpList.onblur(obj.DrpList);
        }
   },
   HidOptionBoxOutInput:function()
   {
        var obj 
= arguments[1];
         var evt 
= arguments[0];
         
         var boxOffset 
= Offset(obj.box);
         var left 
=boxOffset.left;
         var tops 
=boxOffset.top;
         var w 
= boxOffset.width;
         var h 
= boxOffset.height;
         var scrlTop 
= document.documentElement.scrollTop;
         
if(evt.clientX > left && evt.clientX < (left+w) && evt.clientY+scrlTop > tops+5 ){
            
return;
         }
         obj.Optionsbox.style.display 
= 'none';
         
if(obj.s == 0 ){
            obj.box.className 
="DrpBox_normal";
        }
        
if(obj.DrpList.onblur){
            obj.DrpList.onblur(obj.DrpList);
        }
   }
};
var userAgent 
= navigator.userAgent.toLowerCase();
var browser 
= {
    opera: 
/opera/.test(userAgent),
    msie: 
/msie/.test(userAgent) && !/opera/.test(userAgent),
    mozilla: 
/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
};
function getEvent(){
    
return window.event ? window.event:getEvent.caller.arguments[0];
};
function  ResizeWin(){
    
if!browser.msie){
        
for(var i=0;i<Comboxs.length;i++){
                Comboxs[i][
1].Optionsbox.style.top = Offset(Comboxs[i][1].box).top + 22+"px";
                Comboxs[i][
1].Optionsbox.style.left = Offset(Comboxs[i][1].box).left+"px";
        }
    }
}
if(!window.Event){
    var Event 
= new Object();
}
Object.extend(Event,{
    add:function(element,name,observe,userCapture){
        
if (name == 'keypress' &&
        (navigator.appVersion.match(
/Konqueror|Safari|KHTML/)
        
|| element.attachEvent))
      name 
= 'keydown';
      userCapture 
= userCapture || false;
      
if(element.addEventListener){
        element.addEventListener(name,observe,userCapture);
     }
     
else if(element.attachEvent){
        element.attachEvent(
'on'+ name,observe);
     }
}

})
Event.add(window,
"resize",ResizeWin,true)

 

 

转载于:https://www.cnblogs.com/juhnpen/archive/2008/08/29/1279536.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值