一个封装的QQ面板控件(HTC)

做.net的web开发几年了,只记得第一个project时用的是asp.net自带的服务器端控件(如datagrid等),而后就完全放弃了服务器端控件的做法,而是采用客户端控件加ajax,实现客户端完全无刷新来做的。因自己做的是企业开发,客户端固定在了IE平台之上,因此选择了htc作为客户端控件的封装,把我写的几个已经封装好的控件共享给大家,希望大家提出自己的看法和意见。


<!--
Date:    2006/2/15
Author:    zkw
Content:qq面板控件
-->
< public:attach      event =oncontentready  onevent ="init()"   />
< public:attach     event =onclick  onevent ="clickit()"   />
<!-- 选择某个面板的方法 -->
< public:method  name ="SwitchTab"  INTERNALNAME ="m_switchTab"   />
<!-- 面板完全显示之后的事件 -->     
< PUBLIC:EVENT  ID ="evtshowok"   NAME ="onshowok" />
<!-- 面板单击后的事件 -->     
< PUBLIC:EVENT  ID ="evtshowbefore"   NAME ="onshowbefore" />
<!-- 当前选择的行索引 -->
< public:property  name ="SelectedIndex"  get ="getIndex"   />
< script  language ="javascript" >
var curtitle = null;        //当前标题行
var clicktr = null;            //正在单击的行
var stat = 0;

function getIndex(){
    
if(curtitle!=null)
        
return curtitle.rowIndex;
    
return -1;
}
    

function init(){
    
if(element.tagName!="TABLE")
        
return;
    element.cellSpacing 
= "0";
    element.cellPadding 
= "0";
    
var j=0;
    
var curshow =0;
    
if(element.shownum)curshow = element.shownum;        //shownum(attribute):默认显示第几个面板(从0开始)
    for(var i=0;i<element.rows.length;i++){
        
var row = element.rows[i];
        
if(row.istitle=="1"){
            
if(j++==curshow){
                curtitle 
= element.rows[i];
            }

            
else{
                element.rows[i
+1].style.display = "none";
                element.rows[i
+1].cells[0].style.height = "0%";
                element.rows[i
+1].cells[0].children[0].style.visibility = "hidden";    //内容面板中有个要求,即它里面的td中必须只有一个子元素(即其所有内容都是在这个子元素之中)
                element.rows[i+1].cells[0].children[0].style.overflow = "hidden";
            }

        }

    }

}


function getRow(inrowobj){
    tmp 
= inrowobj;
    
while(tmp!=null&&tmp.tagName.toLowerCase()!="tr"){
        tmp 
= tmp.parentElement;
    }

    
return tmp==null?null:(tmp.istitle=="1"?tmp:null);
}


function clickit(){
    
var src = window.event.srcElement;
    
var tr = getRow(src);
    
if(tr!=null){
        
if(tr!=curtitle&&clicktr==null){            //clicktr==null:当前没有行在单击
            tr.nextSibling.style.display = "";
            clicktr 
= tr;
            stat 
= 0;
            
try {    
                
var evt = createEventObject();    
                evt.src 
= curtitle;
                evt.to 
= clicktr;
                evtshowbefore.fire(evt); 
            }
 
            
catch(e) {};
            
            smoothout();
        }

    }

}


function m_switchTab(index){
    
if(curtitle.rowIndex!=index)
        element.rows[index].click();
}


function smoothout(){
    
if(clicktr==null)return;
    stat 
= stat + 15;
    
if(stat<100){
        clicktr.nextSibling.cells[
0].style.height = (stat) + "%";
        curtitle.nextSibling.cells[
0].style.height = (100-stat) + "%";
        window.setTimeout(smoothout,
20);
    }

    
else{
        curtitle.nextSibling.style.display 
= "none";
        curtitle.nextSibling.cells[
0].style.height = "0%";
        curtitle.nextSibling.cells[
0].children[0].style.visibility = "hidden";
        curtitle.nextSibling.cells[
0].children[0].style.overflow = "hidden";
        
        clicktr.nextSibling.style.display 
= "";
        clicktr.nextSibling.cells[
0].style.height = "100%";
        clicktr.nextSibling.cells[
0].children[0].style.visibility = "visible";
        clicktr.nextSibling.cells[
0].children[0].style.overflow = "auto";
        
        
try {    
            
var evt = createEventObject();    
            evt.src 
= curtitle;
            evt.to 
= clicktr;
            evtshowok.fire(evt); 
        }
 
        
catch(e) {};
        
        curtitle 
= clicktr;
        clicktr 
= null;
    }

}

</ script >


< html >
    
< head >
        
< title > qq面板测试 </ title >
        
< style >
            .title
            
{
                overflow
:hidden;
                font-size
:9pt;
                text-align
:center;
                background-color
:#f7f7f7;
                color
:black;
                cursor
:default;
                height
:20px;
                border-width
:1px;
                border-style
:solid;
                border-color
:white black black white
            
}

            
            .seltitle
            
{
                overflow
:hidden;
                font-size
:9pt;
                font-weight
:bold;
                text-align
:center;
                background-color
:#316ac5;
                color
:white;
                cursor
:default;
                height
:20px;
                border-width
:1px;
                border-style
:solid;
                border-color
:white black black white
            
}

            
        
</ style >
        
< script  language ="javascript" >
            
function chg(osel){
                
var v = osel.options[osel.selectedIndex].value
                
if(v!="-1"){
                    document.all[
"qqbar"].SwitchTab(v);
                }

            }

            
            
function clicktab(){
                
var src = window.event.src;
                
var to = window.event.to;
                
//debugger;
                src.cells[0].className = "title";
                to.cells[
0].className = "seltitle";
            }

        
</ script >
    
</ head >
    
< body >
        
< input  type ="button"  value ="当前显示的行标题索引"  onclick ="alert('当前选择的行索引 :' + document.all['qqbar'].SelectedIndex)" >
        
< select  onchange ="chg(this)" >
            
< option  value ="-1" > 请选择一个面板 </ option >
            
< option  value ="0" > 面板1 </ option >
            
< option  value ="2" > 面板2 </ option >
            
< option  value ="4" > 面板3 </ option >
            
< option  value ="6" > 面板4 </ option >
            
< option  value ="8" > 面板5 </ option >
        
</ select >
        
< div  style ="width:130px;height:450px;overflow:hidden" >
            
< table  id ="qqbar"  shownum ="2"  onshowbefore ="clicktab()"  onshowok ="window.status  ='当前选择的行标题:' + (window.event.to.innerText)"  style ="background:#e3e3e3;width:100%;height:420px;border:1px solid black;behavior:url(qqbar.htc)" >
                
< tr  istitle ="1" >
                    
< td  class ="title" > 第1个标题栏 </ td >
                
</ tr >
                
< tr >
                    
< td  class ="td" >
                        
< div  class ="content" > 内容1 </ div >
                    
</ td >
                
</ tr >
                
< tr  istitle ="1" >
                    
< td  class ="title" > 第2个标题栏 </ td >
                
</ tr >
                
< tr >
                    
< td >
                        
< div  class ="content" > 内容2 </ div >
                    
</ td >
                
</ tr >
                
< tr  istitle ="1" >
                    
< td  class ="seltitle" > 第3个标题栏 </ td >
                
</ tr >
                
< tr >
                    
< td >
                        
< div  class ="content" > 内容3 </ div >
                    
</ td >
                
</ tr >
                
< tr  istitle ="1" >
                    
< td  class ="title" > 第4个标题栏 </ td >
                
</ tr >
                
< tr >
                    
< td >
                        
< div  class ="content" > 内容4 </ div >
                    
</ td >
                
</ tr >
                
< tr  istitle ="1" >
                    
< td  class ="title" > 第5个标题栏 </ td >
                
</ tr >
                
< tr >
                    
< td >
                        
< div  class ="content" > 内容5 </ div >
                    
</ td >
                
</ tr >
            
</ table >
        
</ div >
    
</ body >
</ html >

 预览
qqbar.htm

下载:

qqbar.rar


http://tsoukw.cnblogs.com/archive/2006/05/19/404068.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值