做.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

转载于:https://www.cnblogs.com/cheatlove/articles/405420.html

一个封装的QQ面板控件相关推荐

  1. Qt 封装一个简单的LED(指示灯)控件

    Qt 封装一个简单的LED(指示灯)控件 1,效果~ 所以 这个简单的LED类可以自定义大小~ 可以点亮或熄灭,也可以闪烁

  2. Qt使用C++封装qml自定义图形控件(QQuickPaintedItem)

    C++封装qml自定义图形控件 QtWidget.qml简介 通过继承QQuickPaintedItem封装控件 描述 公用接口定义 代码示例 效果图 QtWidget.qml简介 Qt提供了2套UI ...

  3. React 组件封装之 Tree 树形控件

    React 组件封装之 Tree 树形控件 一.Tree 树形结构 二.使用案例 三.API 使用指南 四.源代码 五.总结 一.Tree 树形结构 组件说明: 实现树形控件,适用于组织架构.文章列表 ...

  4. C# 高仿腾讯QQ (TextBox控件美化)(附源码)

    接上一篇<C# 高仿腾讯QQ (Bottom控件美化) > 这篇来说一下QQ皮肤TextBox控件的美化: (1).已修正 每次窗口最小化以后再还原会发现窗口底部往下移了几十个像素(但还不 ...

  5. LabVIEW前面板控件

    输入控件的端口边框比显示控件的端口边框粗,而且输入控件的接线端在右侧,显示控件的接线端在左侧,附有数据流方向箭头. 控制件和显示件放在前面板后可以相互转换:在控件或它的端口的快捷菜单中选择转换为显示/ ...

  6. Delphi类似QQ皮肤控件,欢迎试用!

    实现的QQ皮肤控件的一个试用版(目前支持D7,D2007和D2010版)!欢迎下载

  7. ST_Curve --- 一个专业的曲线绘制控件

    一:什么是ST_Curve?   ST_Curve是一个专业的曲线绘制控件,只要是xy坐标系的曲线,都可绘制,纵坐标只能显示为值,横坐标可以显示为值或者时间(如果你愿意为控件提供插件,则坐标可显示任意 ...

  8. [共享]一个文件上传的控件,绝对是精品源码

    [共享]一个文件上传的控件,绝对是精品源码 前段时候在www.codeproject.com上看到一个文件上传的控件,觉得很好,共享给园子里的朋友. 原文链接:http://www.codeproje ...

  9. Windows下一个可与其他数据集控件结合的通用的搜索框GUSIconEdit

    当初在两年多前开始做现在这个项目时,我们最初决定花长时间来升级现有的游戏引擎,包括服务器和客户端,我负责了一部分的客户端的功能升级和配套工具集的开发和升级,我们这套引擎的工具集包含工具比较多,每个工具 ...

最新文章

  1. python ftp文件传输服务端
  2. 用计算机做科学实验评课,科学小实验课程听课心得
  3. Google Gears 体验(2):本机 web 服务器
  4. 收藏:Sql类型与.Net(C#)类型对应关系
  5. [C++ STL] 常用算法总结
  6. python实现文件加密
  7. 让zabbix图像中文不再是乱码
  8. php 常用编译参数,php编译参数,不用怕!!
  9. cocoapods的安装与使用
  10. 【语义分割】评价指标:PA、CPA、MPA、IoU、MIoU详细总结和代码实现(零基础从入门到精通系列!)
  11. mysql 什么时候用内连接_mysql显示内连接和隐式内连接的区别,什么时候非要用到显示内连接。...
  12. layui button按钮点击导致页面重新刷新的解决方案
  13. GaussDB (for Cassandra) 数据库治理:大key与热key问题的检测与解决
  14. 《精通Unreal Engine 3 卷1:3D游戏关卡设计》
  15. 微信小程序-获取当前城市位置经纬度,并解析位置信息
  16. php radio是什么意思,radio是什么意思_radio在线翻译_英语_读音_用法_例句_海词词典...
  17. java使用java.lang.Math类,生成100个0-99之间的随机整数,并找出它们中间的最大值和最小值,并统计大于50的整数的个数。打印3次运行结果,看是否相同。
  18. 清北学堂 2017-10-05
  19. WannaCry勒索病毒分析过程**中**
  20. java calendar 增加年_java 使用Date类、Calendar类,实现增加日期

热门文章

  1. CIO如何规划企业BI分析指标体系 —— 从经营出发到绩效管理
  2. java蚁群算法_蚁群算法JAVA版
  3. golang odbc mysql_ODBC 常见数据源配置整理
  4. 金山武汉总部园区来了!拟2024年竣工 可容纳员工9000人
  5. Python中pyautogui安装-用pyautogui写脚本让鼠标自动点击给摩尔庄园毛毛树浇水施肥
  6. 基于asp(BS架构)的网页设计网站制作 图文信息管理系统 毕业设计(带完整源代码和视频讲解)
  7. iCore-3588Q 8K人工智能核心板
  8. 图像四种基本类型简介
  9. element tree 如何全部展开、全部折叠
  10. 养眼美女你们是怎么评论的