• ComponentArt控件分析之ComboBox(2)



         
    一.来看下数据数据解析

    首先后台先生成一种数据格式,这种格式跟JSON差不多(不知道为什么不用JSON),查看HTML源代码

    ComboBox2.Data = [[['Text','a'],['Value','b']],[['Text','b'],['Value','c']],[['Text','c'],['Enabled',0],['Value','b']],[['CssClass','comboItemHover'],['Text','d'],['Value','c'],['Id','ComboBoxItem1']],[['Text','a'],['Value','b']],[['Text','b'],['Value','c']],[['Text','c'],['Enabled',0],['Value','b']],[['CssClass','comboItemHover'],['Text','d'],['Value','c'],['Id','ComboBoxItem2']],[['Text','a'],['Value','b']],[['Text','b'],['Value','c']],[['Text','c'],['Enabled',0],['Value','b']],[['CssClass','comboItemHover'],['Text','d'],['Value','c'],['Id','ComboBoxItem3']],[['Text','a'],['Value','b']],[['Text','b'],['Value','c']],[['Text','c'],['Enabled',0],['Value','b']],[['CssClass','comboItemHover'],['Text','d'],['Value','c'],['Id','hello']]];

    2.需要定义一个ComboBoxItem对象(自然要定义数据集合类型了),其中js也要定义,数据结构采用HashTable,查找速度快.其中定义了一个JavaScriptArray用来转换数据


    3.前台处理数据

    数据得到以后就要处理

    前段的ComboBox(Initialize)初始化时会调用Render方法,Render方法会调用RenderDropDown方法,RenderDropDown方法调用RenderItem方法,把每项都呈现出来

    二.展开下拉框

    看这部分花了我一些时间.

    本来的话展开下拉框和关闭下拉框只需要设置一个css样式就可以了的.事情上确实可以这么做.

    ComboBox同时还提供了2个属性CollapseSlide用于设置滑动效果,CollapseDuration用于设置滑动效果的持续时间.

    客户端api提供了Collapse和Expand方法,用于关闭和展开下拉框.按照我的思维就是直接设置下xx.style.display="none"了事.这样就可以用了.为了给控件加上滑动时的效果.这个两个方法基本没做什么.而是调用了相关的方法如ComponentArt_ComboBox_CollapseStep方法.

    这里涉及到递归的使用.
    在Collapse方法中设置了一个当前时间this.CollapseStartTime=(new Date()).getTime();

    然后ComponentArt_ComboBox_CollapseStep方法再获取现在时间与CollapseStartTime相比较,时间差与CollapseDuration属性相比较.当时间差达到CollapseDuration属性值时,即递归结束.

    看代码

    1.
        ComponentArt_ComboBox.prototype.Collapse=function (){
            
    if(this.Resizing){
                
    return ;
                
            }

            
    var _20=document.getElementById(this.Id+"_DropDown");
            
    if(_20&&_20.style.display!="none"){
                _20.style.overflow
    ="hidden";
                
    this.CollapseElement=_20;
                
    //设置当前时间
                this.CollapseStartTime=(new Date()).getTime();
                
    var _21=_qFF(_20);
                
    //递归调用
                ComponentArt_ComboBox_CollapseStep(this,_21);
                
    //_20.style.display="none";
            }

            
    this.Expanded=false;
            
        }
    ;

    2.
        window.ComponentArt_ComboBox_CollapseStep = function(_d, _e) {
            
    if (!_d.CollapseElement) {
                
    return;
            }

            
    var _f = (new Date()).getTime()-_d.CollapseStartTime;
            
    var _10 = ComponentArt_SlidePortionCompleted(_f, _d.CollapseDuration, _d.CollapseSlide);
            
    if (_10 == 1{
            
    //alert(_d.CollapseElement.style.height);
            //_d.CollapseElement.style.height = 280+"px";
            //隐藏
                _d.CollapseElement.style.display = "none";
                _d.CollapseElement 
    = null;
                _d.HideOverlay();
                
    var _11 = _d.get_events().getHandler("collapse");
                
    if (_11) {
                    _11(_d, Sys.EventArgs.Empty);
                }

            }
     else {
                
    var _12 = Math.ceil((1-_10)*_e);
                
    if (_d.ExpandDirection == 1{
                    _d.CollapseElement.style.top 
    = (_d.ExpandBaseLine-_12)+"px";
                }

                
    //高度的滚动在此更改
                _d.CollapseElement.style.height = _12+"px";
                
    //alert(_d.CollapseElement.style.height);
                //递归调用
                setTimeout("ComponentArt_ComboBox_CollapseStep("+_d.Id+","+_e+");", ComponentArt_ComboBox_SlideDelay);
            }

            
    //document.getElementById("aa").innerHTML+="_f---------"+_f+"_10-------"+_10+"-----------"+_d.CollapseElement.style.height+"<br>"
            //alert("_10"+_10+"<br>"+_d.CollapseElement.style.height);
        }
    ;


    3.
    window.cart_slidetype_none=0;
        window.cart_slidetype_exponentialaccelerate
    =1;
        window.cart_slidetype_exponentialdecelerate
    =2;
        window._q87
    =3;
        window.cart_slidetype_quadraticaccelerate
    =4;
        window.cart_slidetype_quadraticdecelerate
    =5;
        
    /**
         * 
         * @param {Object} 时间差
         * @param {Object} 持续时间
         * @param {Object} 效果
         
    */

        window.ComponentArt_SlidePortionCompleted
    =function (_4a,_4b,_4c){
            
    if(_4c==cart_slidetype_none||_4a>=_4b){
                
                
    return 1;
                
            }

            
    var _4d=(_4c==cart_slidetype_exponentialaccelerate)||(_4c==cart_slidetype_quadraticaccelerate);
            
    if(_4d){
                _4a
    =_4b-_4a;
                
            }

            
    //4a(时间差计算)与_4b相比较
            var _4e=_4a/_4b;
            
    var _4f;
            
    switch(_4c){
                
    case _q87:
                _4f
    =_4e;
                
    break;
                
    case cart_slidetype_exponentialdecelerate:
                
    case cart_slidetype_exponentialaccelerate:
                _4f
    =1-Math.pow(1/300,_4e);
                
    break;
                
    case cart_slidetype_quadraticdecelerate:
                
    case cart_slidetype_quadraticaccelerate:
                _4f
    =Math.pow(_4e,2);
                
    break;
                
            }

            
    if(_4d){
                _4f
    =1-_4f;
                
            }

            
    //document.getElementById("aa").innerHTML+=Math.min(Math.max(0,_4f),1)+"<br>";
            return Math.min(Math.max(0,_4f),1);
            
        }
    ;


    看个截图



    好了,结束
  • 相关阅读:
    路由网址这是mvc时代系列之三:网络路由与ASP.NET MVC生命周期(上)
    调用代码JCFXBL与WebView整合打造安卓应用服务平台
    服务安装Mongodb应用实战教程:windows下安装与安全策略配置
    方法选择Android从SD卡中选择图片的三种方法及自定义系统选择框标题的方法
    图层照片如何扣头发丝
    对象方法JavaScript脚本语言初解
    数据库方法django中ModelForm学习系列一~save方法
    团队位置《楚汉传奇》聊管理
    包查找*.so对应的rpm包
    现实世界的Windows Azure:就Metanga采访MetraTech公司CEO,Scott Swartz先生
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/808759.html
Copyright © 2020-2023  润新知