脚本:时间轴的实现

HTML文件:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>example of drag - drop</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="drop.css" type="text/css" />
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript" src="drop.js"></script>
</head>
<body>

<div class="top">
    example of drag - drop
    <div id="printer"></div>
</div>
<div class="containmargin">
<div class="container">
    <ul id="ulContainer">
        <li><div class="item">
            <span class="date">2010年11月04号</span>
            <div class="text">welcome!</div>
            <div class="text">hello, world!</div>
            <div class="text">hello, world!</div>
            <div class="text">hello, world!</div>
        </div></li>
        <li><div class="item">
            <span class="date">2010年11月03号</span>
            <div class="text">welcome!</div>
            <div class="text">hello, hello, world 1!</div>
            <div class="text">hello, hello, world 2!</div>
            <div class="text">hello, hello, world 3!</div>
            <div class="text">hello, hello, world 3!</div>
        </div></li>
    </ul>
</div>
</div>

<div style="display:inline; padding: 20px;">
    <div style="float:left; text-align:right; width: 50px; height:50px; border:solid 1px red;" onclick="manager.MovePrevious();">左</div>
    <div style="float:right; text-align:left; width: 50px; height:50px; border:solid 1px red;" onclick="manager.MoveNext();">右</div>
    <div style="float:left;width: 50px; height:50px; border:solid 1px red;" onclick="manager.ClearAll()">ClearAll</div>
    <div style="float:left;width: 50px; height:50px; border:solid 1px red;" onclick="manager.SetDateAndReload(this.childNodes[0].value);"><input type="text" value="2010-11-05" /></div>
    <div style="clear:both;"></div>
</div>

<div class="bottom">copyright</div>

<script type="text/javascript">
    var manager = new MoveElementManager("ulContainer");
    //manager.ItemWidth = 500;
    manager.ItemBorderWidth = 1;
    manager.MovingShadow = true;
    manager.OnLoadingItems = function(date,params)
    {
        // [{date:'2010-11-11',items:[{k:'',u:'',t:'',i:''}, {}, {}]}, {}, {}, {}]

        var startIndex = params[0];
        var count = params[1];
        var random = "";

// /**
        if (startIndex > 15) return "";

        var strval = "";
        var index = startIndex;
        for (var i=0;i<count;i++)
        {
            strval += ("<li><div class='item'><span class='date'>" + manager.GetDate("yyyy年MM月dd日",index++) + "</span><div class='text'>welcome!</div><div class='text'>hello, world!</div></div></li>");
        }

  manager.ReceiveCompleted(strval, params);
//  */

    };

    manager.OnVisit = function(date,itemIndex)
    {
        manager.Print(itemIndex + "|" + date);
    };


    //manager.Init();
    manager.AutoAdjust();
</script>
</body>
</html>

 


 

css文件:

body
{
	font-size: 14px;
	margin: 1px;
	padding: 0px;
	border: 0px;
}

div.top
{
	border:solid 1px #999999;
	height:100px;
}

div.bottom
{
	border:solid 1px #999999;
	height:30px;
}



div.containmargin { margin: 0px; padding:0px; width:100%;height:239px; overflow:hidden; position:relative;}

div.container{width:100%;height:800px; position:absolute;}
div.container ul
{   width: 5000px;
	height: 200px;
	margin: 0px;
	padding: 0px;
	position:absolute;
	cursor: default;
	left:0px;
	border-left: dotted 1px black;
}

div.container ul li
{
	width: 400px;
	height: 200px;
	margin: 0px;
	padding: 0px;
	float:left;
	border-right: dotted 1px black;
}


div.container ul li.Actived { border-right: dotted 1px red; }
div.container ul li.Actived div.item span.date, div.container ul li.Actived div.item span.dateActived
{
	color:#ff0000;
}
div.container ul li.Actived div.item span.dateActived
{
}


div.container ul li div.item
{
	position:absolute;
	width: 400px;
	height: 239px;
}

div.container ul li div.item span.date, div.container ul li div.item span.dateActived
{
	position:absolute;
	z-index: 100;
	cursor: pointer;
	display:block;
	width: 100px;
	right: -50px;
	bottom: 0px;
	text-align:center;
	background:url(http://ebinfo.sdo.com/ScoreCenter/Tieba/Tieba201011/sj_btn.jpg) no-repeat 0px 2px;
}
div.container ul li div.item span.dateActived { }
div.container ul li div.item div.mesgitem, div.container ul li div.item div.mesgitem2{ border:1px solid #B69178; padding-left:5px; background:#fff; width:320px; cursor:pointer; float: left; display:inline; position:absolute; z-index:100;}
div.container ul li div.item div.mesgitem2{ width:260px !important; }

div.container ul li div.item div img.td { position:absolute; margin:-18px 0 0 -15px; }
div.container ul li div.item div div.text { overflow: hidden; height:25px; }
div.container ul li div.item div div.text span.xingming{color:#673728; font-size:14px; font-weight:bold; margin-right:5px;}

 


 

js文件1:

var FCoreTCIT={Element:{},Input:{},PageInfo:{},Search:{},Validate:{},Request:{},Response:{},Function:{},Events:{}};
FCoreTCIT.PageInfo.IsIE = (navigator.appName=="Microsoft Internet Explorer");
FCoreTCIT.PageInfo.IsIE6 = FCoreTCIT.PageInfo.IsIE && !window.XMLHttpRequest;
FCoreTCIT.PageInfo.IsIE8 = FCoreTCIT.PageInfo.IsIE && !!document.documentMode;
FCoreTCIT.PageInfo.IsIE7 = FCoreTCIT.PageInfo.IsIE && !FCoreTCIT.PageInfo.IsIE6 && !FCoreTCIT.PageInfo.IsIE8;
FCoreTCIT.GetEvent = FCoreTCIT.PageInfo.IsIE ? function(base){return window.event;} : function(base){return (base.length>0&&(base[0].constructor==Event||base[0].constructor==MouseEvent))?base[0]:null;};
FCoreTCIT.GetEventElement = function(base){var ev=FCoreTCIT.GetEvent(base);if(ev==null)return null; return FCoreTCIT.PageInfo.IsIE?ev.srcElement:ev.target;};
FCoreTCIT.Events.FireMouseEvent = function(object,eventMethod,simpleClick){if(FCoreTCIT.PageInfo.IsIE && (simpleClick!=null && simpleClick==true)){if(typeof(object[eventMethod])=="function"){object[eventMethod]();}}else{var evnt = document.createEvent("MouseEvents");evnt.initEvent("click", true, true);object.dispatchEvent(evnt);}};
FCoreTCIT.Events.RegisterObjectEvent = function(obj,param){if(FCoreTCIT.PageInfo.IsIE){obj.attachEvent("on"+param[0],param[1]);}else{obj.addEventListener(param[0], param[1], false);}};
FCoreTCIT.Events.RemoveObjectEvent = function(obj,param){if(FCoreTCIT.PageInfo.IsIE){obj.detachEvent("on"+param[0],param[1]);}else{obj.removeEventListener(param[0], param[1], false);}};
FCoreTCIT.Function.FindChild = function(obj, tagName, clsName) {var cname=clsName.toLowerCase();var list=obj.getElementsByTagName(tagName);var len=list.length;for(var i=0;i<len;i++)if(list[i].className.toLowerCase()==cname)return list[i];return null;}

Date.prototype.toFormatString = function (format)
{
    var f = function(p){return p > 9 ? p : "0" + p};
    var retVal = format || "yyyy-MM-dd hh:mm:ss:fff";

    retVal = retVal.replace(/yyyy/ig, this.getFullYear());
    retVal = retVal.replace(/yy/ig, f(this.getYear() % 100));
    retVal = retVal.replace(/MM/g, f(this.getMonth() + 1));
    retVal = retVal.replace(/M/g, this.getMonth() + 1);
    retVal = retVal.replace(/dd/ig, f(this.getDate()));
    retVal = retVal.replace(/d/ig, this.getDate());
    retVal = retVal.replace(/hh/ig, f(this.getHours()));
    retVal = retVal.replace(/h/ig, this.getHours());
    retVal = retVal.replace(/mm/g, f(this.getMinutes()));
    retVal = retVal.replace(/m/g, this.getMinutes());
    retVal = retVal.replace(/ss/ig, f(this.getSeconds()));
    retVal = retVal.replace(/s/ig, this.getSeconds());
    retVal = retVal.replace(/fff/ig, f(this.getMilliseconds()));
    return retVal;
}

 


 

js文件2:

//
// 月份操作
//
function BasedMothLoader(targetId, mngr)
{
    var me = this;
    var fn_getNow = function() {var now=new Date();now=new Date(now.getFullYear(),now.getMonth(),now.getDate());return now;};
    var fn_getFullYear = function() {return parseInt(me.Displayer.innerHTML.substr(0,4),10);};
    var fn_getMonth = function() {return parseInt(me.Displayer.innerHTML.substr(5,2),10);};
    var fn_getDate_X = function(xMonth) {var date=new Date(fn_getFullYear(),fn_getMonth()+xMonth,1);date.setDate(date.getDate()-1);if(xMonth<0)return date;var now=fn_getNow();if(date>now)date=now;return date;};

    this.Displayer = document.getElementById(targetId);
    this.Manager = mngr;
    this.ExpiredMessage = "温馨提示您,查询范围只能在365天之内O(∩_∩)O";

    this.GetNow = fn_getNow
    this.GetDate = fn_getDate_X
    this.DateDiff = function(dateBegin, dateEnd) {return parseInt((parseInt(dateEnd.getTime())-parseInt(dateBegin.getTime()))/(24*60*60*1000)); };
    this.PrintDate = function(date) {me.Displayer.innerHTML=date.toFormatString("yyyy年MM月");};
}

//
// 月份装载
//
function MonthLoader(targetId, mngr)
{
    var m_Base = new BasedMothLoader(targetId, mngr);
    var m_LastDate = new Date();

    var me = this;
    var fn_LoadDate = function(date) {if(m_Base.Manager.CheckExpiredDate(date)){alert(m_Base.ExpiredMessage);return;}m_LastDate=date;m_Base.PrintDate(date);m_Base.Manager.SetDateAndReload(date);};
    var fn_LoadMonth = function(x) {var date=m_Base.GetDate(x);if(m_LastDate-date==0)return;fn_LoadDate(date);};

    this.NextMonth = function() {fn_LoadMonth(1);};
    this.PreviousMonth = function() {fn_LoadMonth(-1);};

    this.Init = function()
    {
        fn_LoadDate(m_Base.GetNow());
    }

    me.Init();
}

//
// 月份定位
//
function MonthLocater(targetId, mngr)
{
    var m_Base = new BasedMothLoader(targetId, mngr);
    var m_LastDate = new Date();

    var me = this;
    var fn_LoadDate = function(date) {if(m_Base.Manager.CheckExpiredDate(date)){alert(m_Base.ExpiredMessage);return;}m_Base.PrintDate(date);var days=m_Base.DateDiff(date,m_LastDate);m_Base.Manager.SetDateAndLocated(date,days);};
    var fn_LoadMonth = function(x) {var date=m_Base.GetDate(x);if(m_LastDate-date==0)return;fn_LoadDate(date);};

    this.NextMonth = function() {if(m_Base.Manager.GetIsMoving())return;fn_LoadMonth(1);};
    this.PreviousMonth = function() {if(m_Base.Manager.GetIsMoving())return;fn_LoadMonth(-1);};

    this.Init = function()
    {
        fn_LoadDate(m_Base.GetNow());
    }

    me.Init();
}

//
// 拖拽层管理类
// 关于 FCoreTCIT,俺啥也不说了。
//
function MoveElementManager(targetId)
{
    var c_Default_ItemWidth = 400;
    var c_Default_MaskId = "maskdiv";
    var c_Default_MovableMonth = 12;        //可推进的月份
    var c_Default_Min_TimeZoneRate = 0.3;   //时间轴最小偏移率
    var c_Default_Min_ItemCount_Load = 6;   //默认装载的最小数量
    var c_Defined_ItemIndex_AttributeKey = "ItemIndex";
    var c_Defined_Item_Inactived_Css = "";
    var c_Defined_Item_Actived_Css = "Actived";
    var c_Defined_DateSpan_Inactived_Css = "date";
    var c_Defined_DateSpan_Actived_Css = "dateActived";
    var c_Defined_UnvariableMessage = "温馨提示您,时间还没到哦,请明天继续关注O(∩_∩)O";

    var m_Container = document.getElementById(targetId);
    var m_StartDate = new Date();           //起始日期
    var m_EndDate = new Date();             //截至日期
    var m_IsEmpty = true;                   //子项是否为空
    var m_IsDrag = false;                   //是否在拖动中
    var m_IsMoving = false;                 //是否在移动中
    var m_ValidMonth = 0;
    var m_ContainerWidth = parseInt(m_Container.clientWidth);
    var m_OriginalLeft = 0;                 //容器开始拖拽的原始偏移left
    var m_TimeZoneRate = 1.0                //当前时间在24小时的比率,精确到分,延时到分。
    var m_BeginX = 0;                       //鼠标开始拖拽的坐标X
    var m_ItemIndex = 0;                    //当前负序号
    var m_ActivedItemIndex = m_ItemIndex;   //当前激活的负序号
//  var m_CurrentItemCount = fn_getCurrentItemCount();
    var m_CacheingItemIndex = 0;            //正在请求的缓存数量
    var m_TaskedCacheingItemCount = 0;      //计划的缓存数量,用fn_getTaskedCacheingItemCount()获取


    //有效性检查
    if (m_Container == null || m_Container == undefined) { throw "element [" + targetId + "] not found."; }

    var me = this;
    var fn_print = function(message) {/*document.getElementById("printer").innerHTML = message;*/window.status = message;};
//  var fn_getDateString = function(date) {return date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate()};
    var fn_parseDate = function(datestring) {var ls=datestring.split('-');if(ls.length!=3)return new Date();return new Date(parseInt(ls[0]),parseInt(ls[1],10)-1,parseInt(ls[2],10));};
    var fn_getDateString = function(format,date) {return date.toFormatString(format||"yyyy-MM-dd");};
    var fn_setStartDate = function(date) {if(date.constructor==Date)m_StartDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());if(date.constructor==String){m_StartDate=fn_parseDate(date);}};
    var fn_setEndDate = function(month) {m_ValidMonth=month||c_Default_MovableMonth;m_EndDate.setMonth(m_EndDate.getMonth()-m_ValidMonth);}

    //随机生成浮点区间
    var fn_random = function(n,m) {return (m-n)*Math.random() + n;}
    //通过日期获取偏移率
    var fn_getPositionRateByDate = function(date) {return (date.getHours()+date.getMinutes()/60)/24;}
    //通过日期获取偏移量
    var fn_getPositionXByDate = function(date) {return parseInt((1-fn_getPositionRateByDate(date))*me.ItemWidth);}
    //随机坐标X - 时间轴便宜率区间
    var fn_getSubItemRandomX = function() {return parseInt((me.ItemWidth||c_Default_ItemWidth)*(1-fn_random(c_Default_Min_TimeZoneRate/2,Math.min(m_TimeZoneRate,0.4))));};
    //随机坐标Y - 整体高度和所在序位
    var fn_getSubItemRandomY = function(index,count) {return parseInt(parseInt(m_Container.clientHeight)*index/(count+1) - 15 - fn_random(2, 10))};

    var fn_setMovingCursor = function() {m_IsDrag = true; m_Container.style.cursor = "move";};
    var fn_clearMovingCursor = function() {m_IsDrag = false; m_Container.style.cursor = "default";};
    var fn_setMask = function(message) {var maskDiv=document.getElementById(c_Default_MaskId);if(maskDiv==null){maskDiv=document.createElement("DIV");maskDiv.id=c_Default_MaskId;maskDiv.style.top=0+"px";maskDiv.style.left=0+"px";maskDiv.style.zIndex=1000;maskDiv.style.position="absolute";maskDiv.style.background="#000000";if(FCoreTCIT.PageInfo.IsIE){maskDiv.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=10)";FCoreTCIT.Events.RegisterObjectEvent(maskDiv,["contextmenu",function(){return false;}]);}else{maskDiv.style.opacity=0.1;maskDiv.setAttribute("oncontextmenu", "return false;");}m_Container.appendChild(maskDiv);}maskDiv.style.width="100%";maskDiv.style.height="100%";maskDiv.style.display="block";/*maskDiv.innerHTML=message;*/};
    var fn_clearMask = function() {setTimeout("var maskDiv=document.getElementById('"+c_Default_MaskId+"');if(maskDiv!=null)maskDiv.style.display='none';", 10);};
//  var fn_setItemCssActived = function(li) {if(li==null)return;delegate_ItemsEnumerate(function(o){return (o.className.toLowerCase()==c_Defined_DateSpan_Inactived_Css.toLowerCase());},li.getElementsByTagName("SPAN"),false,function(o,p){o.className=c_Defined_DateSpan_Actived_Css},null);};
//  var fn_clearItemCssActived = function(li) {if(li==null)return;delegate_ItemsEnumerate(function(o){return (o.className.toLowerCase()==c_Defined_DateSpan_Actived_Css.toLowerCase());},li.getElementsByTagName("SPAN"),false,function(o,p){o.className=c_Defined_DateSpan_Inactived_Css},null);};
    var fn_setItemCssActived = function(li) {if(li==null)return;li.className=c_Defined_Item_Actived_Css;};
    var fn_clearItemCssActived = function(li) {if(li==null)return;li.className=c_Defined_Item_Inactived_Css;};

    //获取/设置容器left位置,(平滑)定位。
    var fn_getMovingStep = function(len,index) {var n=4;var m=Math.min(parseInt(len/10),100);/*var x=n*Math.pow(2,index);*/var x=n*index/2;if(m<n)m=n;if(x>m)return m;if(x<n)return n;return x;};
    var fn_movingBegin = function(start,end,step) {var k=(start>end)?-1:1;fn_setContentLeft(start+k*step,false);};
    var fn_movingContent = function(left,index) {if(m_IsDrag){fn_setContentLeft(left,false);m_IsMoving=false;return;}var orileft=fn_getContentLeft();var len=Math.abs(orileft-left);var step=fn_getMovingStep(len,index);if(len>step){fn_movingBegin(orileft,left,step);setTimeout("MoveElementManager.MovingContent("+left+","+(++index)+");",1);}else{fn_setContentLeft(left,false);m_IsMoving=false;}};
    var fn_getContentLeft = function() {var left=parseInt(m_Container.style.left); return isNaN(left) ? 0 : left;};
    var fn_setContentLeft = function(left,issliding) {if(left>0)left=0;if(m_IsDrag||!issliding||!me.MovingShadow){m_Container.style.left=left+'px';return;}if(m_IsMoving)return;m_IsMoving=true;fn_movingContent(left,0)};
    //定位 ItemIndex
    var fn_locateAt = function(x) {var ci=me.GetCurrentItemIndex(true);var cai=m_ActivedItemIndex;var ni=ci+x;fn_clearItemCssActived(fn_getItemLIByIndex(cai));if(ni>0)return;fn_setItemCssActived(fn_getItemLIByIndex(ni));fn_setActivedItemIndex(ni);};
    //移动并定位 ItemIndex
    var fn_move = function(x) {fn_setContentLeft(fn_getContentLeft()+x*me.ItemWidth, true);fn_locateAt(x);};
    //移动并自动调整
    var fn_autoMove = function(x) {fn_locateAt(x);fn_setContentLeft(x*me.ItemWidth-fn_getPositionXByDate(new Date()), true);};

    //设置容器宽度
    var fn_setContainerWidth = function() {m_ContainerWidth=parseInt(m_Container.clientWidth)*2; m_Container.style.width=m_ContainerWidth + "px";};
    //获取负序号的LI元素
    var fn_getItemLIByIndex = function(i) {var n=0;var j=Math.abs(i);var x=null;delegate_ItemsEnumerate(function(o){if(o.nodeType==1&&o.tagName.toUpperCase()=="LI")if((n++)==j){x=o;return true};return false;},m_Container.childNodes,true);return x;};
    //取得元素LI的负序号
    var fn_getItemIndexByLI = function(li) {var attr=li.getAttribute(c_Defined_ItemIndex_AttributeKey);if(attr==null){sub_BuildItemIndex();attr=li.getAttribute(c_Defined_ItemIndex_AttributeKey);}if(attr==null)return 0;return parseInt(attr);};
    //设置当前子项负序号,并可能引发预装载。
    var fn_setItemIndex = function(itemIndex) {m_ItemIndex=itemIndex;var ii=me.GetCurrentItemIndex(false);var cic=fn_getCurrentItemCount();var tcic=fn_getTaskedCacheingItemCount();var count=tcic-(cic-ii);if(count>0)fn_try2LoadingItems(cic,count);};
    var fn_setActivedItemIndex = function(itemIndex) {m_ActivedItemIndex=itemIndex;fn_setItemIndex(itemIndex);};
    //取得当前子项数量
    var fn_getCurrentItemCount = function() {var c=0;delegate_ItemsEnumerate(function(o){if(o.nodeType==1&&o.tagName.toUpperCase()=="LI")return true;},m_Container.childNodes,false,function(){c++},null);return c;};
    //根据容器宽度和子项宽度计算预缓存子项数量
    var fn_getTaskedCacheingItemCount = function() {if(isNaN(me.ItemWidth))if(m_TaskedCacheingItemCount<=0)return c_Default_Min_ItemCount_Load;else return m_TaskedCacheingItemCount;if(m_TaskedCacheingItemCount<=0){m_TaskedCacheingItemCount=parseInt((parseInt(m_Container.parentNode.clientWidth)+me.AdjustWidth)/me.ItemWidth)*2+2;}return m_TaskedCacheingItemCount;};
    //取得第一个子项
    var fn_getFirstItem = function() {return delegate_ItemsEnumerate(function(o){return o.nodeType==1&&o.tagName.toUpperCase()=="LI";},m_Container.childNodes,true);};
    //装载默认子项
    var fn_loadDefaultItem = function() {var o=fn_getFirstItem();if(o==null)return;sub_Visit(o);};
    //智能调整子项宽度
    // 不存在子项返回false,否则设置ItemWidth宽度。
    var fn_adjustValue_ItemWidth = function() {var tag=fn_getFirstItem();if(tag!=null){me.ItemWidth=parseInt(tag.clientWidth);me.ItemWidth+=me.ItemBorderWidth;return true;}return false;};
    //调整容器坐标 : 按照子项分割线
    var fn_adjustContainerPosition = function() {if(isNaN(me.ItemWidth))return;var x=fn_getContentLeft();fn_setItemIndex(x==0?0:parseInt(x*(1+me.AdjustWidth/Math.abs(x))/me.ItemWidth));var ci=me.GetCurrentItemIndex(true);var r=x-ci*me.ItemWidth;if(me.AdjustWidth>=Math.abs(r)){fn_setContentLeft(ci*me.ItemWidth,true);}};
    //调整容器坐标 : 按照时间轴
    var fn_adjustContainerPositionByDate = function (isAuto) {m_TimeZoneRate=fn_getPositionRateByDate(new Date());if(m_TimeZoneRate<c_Default_Min_TimeZoneRate)m_TimeZoneRate=c_Default_Min_TimeZoneRate;var dateLeft=parseInt(me.ItemWidth*m_TimeZoneRate)-me.ItemWidth;fn_setContentLeft(dateLeft, false);if(isAuto)setTimeout("MoveElementManager.AutoAdjustContainer(true)",60000);};
    //展开/折叠文字项
    var fn_ExpandCollapseTextItem = function(item) {if(item.style.height=="auto"){item.style.height="25px";item.style.width=item.getAttribute("width")+"px";item.removeAttribute("width",item.clientWidth);item.parentNode.style.zIndex=100;}else{item.setAttribute("width",item.clientWidth);item.style.height="auto";item.style.width="auto";item.parentNode.style.zIndex=200000;}};

    var sub_Init = function() {fn_setEndDate();};
    //注册对象over,out,click事件
    var sub_RegisterMouseEvent = function(tag, m_over, m_out, m_click) {FCoreTCIT.Events.RemoveObjectEvent(tag,["mouseover",m_over]);FCoreTCIT.Events.RemoveObjectEvent(tag,["mouseout",m_out]);FCoreTCIT.Events.RegisterObjectEvent(tag,["mouseover",m_over]);FCoreTCIT.Events.RegisterObjectEvent(tag,["mouseout",m_out]);if(m_click!=undefined&&m_click!=null){FCoreTCIT.Events.RemoveObjectEvent(tag,["click",m_click]);FCoreTCIT.Events.RegisterObjectEvent(tag,["click",m_click]);}};
    //设置子项负序号
    var sub_BuildItemIndex = function() {var i=0;delegate_ItemsEnumerate(function(o){return (o.nodeType==1&&o.tagName.toUpperCase()=="LI");},m_Container.childNodes,false,function(o,p){o.setAttribute(c_Defined_ItemIndex_AttributeKey,i--)},null)};
    //设置子项内容的坐标
    var sub_SettingSubItemLocation = function() {delegate_ItemsEnumerate(function(o){return (o.nodeType==1&&o.tagName.toUpperCase()=="LI");},m_Container.childNodes,false,function(o){do_SubItemLocated(o);},null);}
    //设置子项日期属性
    var sub_SettingSubItemData = function(t) {delegate_ItemsEnumerate(function(o){return (o.className.toLowerCase()==c_Defined_DateSpan_Inactived_Css.toLowerCase()||o.className.toLowerCase()==c_Defined_DateSpan_Actived_Css.toLowerCase());},t.getElementsByTagName("SPAN"),false,function(o,p){/*o.setAttribute();*/sub_RegisterMouseEvent(o,h_Date_MouseOverHandler,h_Date_MouseOutHandler,h_Date_MouseClickHandler);},null);}
    //访问过程
    var sub_Visit = function(li) {var ci=me.GetCurrentItemIndex(true);if(ci>0)return;fn_move(fn_getItemIndexByLI(li)-ci);do_Visit();}

    //子项枚举器
    var delegate_ItemsEnumerate = function(handler,list,retImmediately,exeHandler,args,index) {var len=list.length;for(var i=0;i<len;i++){var o=list[arguments.length==6?index:i]; if(handler(o)){if(arguments.length>=5)try{exeHandler(o,args);}catch(ex){}if(retImmediately)return o;}}return null;};
    //请求服务器并获取数据
    var fn_try2LoadingItems = function(i,c) {m_CacheingItemIndex=i+c;do_LoadingItems(i,c);};
    //构造子项并触发追加
    var fn_try2BuildItems = function(c) {try{var u=document.createElement("ul");u.innerHTML=c;delegate_ItemsEnumerate(function(o){if(o.nodeType==1&&o.tagName.toUpperCase()=="LI")do_ItemAppend(o);return false;},u.childNodes,true,function(){},null,0);}catch(ex){/*alert(ex.message);*/}};

    var do_LoadingItems = function(i,c,h){if(!isNaN(me.ItemWidth))if(m_ContainerWidth<=(i+c)*me.ItemWidth){setTimeout(MoveElementManager.AutoAdjustContainerWidth,100);}if(me.OnLoadingItems!=null){var r=me.OnLoadingItems(m_StartDate,[i,c,h]);}}
    var do_ItemAppend = function(o) {if(me.OnLoadItemAppend!=null)me.OnLoadItemAppend(o);do_SubItemLocated(o);m_Container.appendChild(o);};
    var do_SubItemLocated = function(li) {sub_SettingSubItemData(li.childNodes[0]);if(isNaN(me.ItemWidth))fn_adjustValue_ItemWidth();if(me.OnSubItemLocated!=null)me.OnSubItemLocated(li.childNodes[0]);else{var t=li.childNodes[0];var l=new Array();delegate_ItemsEnumerate(function(p){if(p.nodeType==1&&p.tagName.toUpperCase()=="DIV"&&p.className.toLowerCase().substr(0,8)=="mesgitem")l.push(p);return false;},t.childNodes,false);var c=l.length;var i=0;delegate_ItemsEnumerate(function(p){return true;},l,false,function(nt,np){i++;var x=fn_getSubItemRandomX();var y=fn_getSubItemRandomY(i,np);nt.style.left=x+'px';nt.style.top=y+'px';sub_RegisterMouseEvent(nt,h_Text_MouseOverHandler,h_Text_MouseOutHandler,h_Text_MouseClickHandler);},c);}};
    var do_Visit = function() {if(me.OnVisit!=null)me.OnVisit(m_StartDate,me.GetCurrentItemIndex(true));};

    //拖拽事件处理
    var h_MouseDownHandler = function() {fn_setMovingCursor(); m_BeginX=(ev=FCoreTCIT.GetEvent(arguments)).clientX; m_OriginalLeft=fn_getContentLeft(); FCoreTCIT.Events.RegisterObjectEvent(m_Container, ["mousemove", h_MouseMoveHandler]); fn_print(m_IsDrag.toString());};
    var h_MouseUpHandler = function() {fn_clearMovingCursor(); FCoreTCIT.Events.RemoveObjectEvent(m_Container, ["mousemove", h_MouseMoveHandler]); fn_adjustContainerPosition(); fn_print(m_IsDrag.toString());};
    var h_MouseMoveHandler = function() {if (!m_IsDrag) FCoreTCIT.Events.RemoveObjectEvent(m_Container, ["mousemove", h_MouseMoveHandler]); var ev=FCoreTCIT.GetEvent(arguments);fn_setContentLeft(m_OriginalLeft-m_BeginX+ev.clientX,false);};
    var h_MouseOutHandler = function() {var o=FCoreTCIT.GetEventElement(arguments);if(o!=m_Container)return;/*移出后的处理*/fn_clearMovingCursor(); FCoreTCIT.Events.RemoveObjectEvent(m_Container, ["mousemove", h_MouseMoveHandler]);};
    var h_MouseDblClickHandler = function() {var o=FCoreTCIT.GetEventElement(arguments);if(o!=null&&o.tagName.toUpperCase()=="UL");me.Reset();};

    var h_Date_MouseOverHandler = function() {var o=FCoreTCIT.GetEventElement(arguments);if(o!=null&&o.tagName.toUpperCase()=="SPAN")o.className=c_Defined_DateSpan_Actived_Css;};
    var h_Date_MouseOutHandler = function() {var o=FCoreTCIT.GetEventElement(arguments);if(o!=null&&o.tagName.toUpperCase()=="SPAN"){o.className=c_Defined_DateSpan_Inactived_Css;}};
    var h_Date_MouseClickHandler = function() {var o=FCoreTCIT.GetEventElement(arguments);if(o!=null)sub_Visit(o.parentNode.parentNode);};

    var h_Text_MouseOverHandler = function() {/*var o=FCoreTCIT.GetEventElement(arguments);if(o!=null&&o.tagName.toUpperCase()=="DIV"){}*/};
    var h_Text_MouseOutHandler = function() {};
    var h_Text_MouseClickHandler = function() {var o=FCoreTCIT.GetEventElement(arguments);if(o==null)return;if(o.className.toLowerCase()=="text"){fn_ExpandCollapseTextItem(o);return;}if(o.tagName.toUpperCase()=="SPAN"){fn_ExpandCollapseTextItem(o.parentNode);return;};var l=(o.tagName.toUpperCase()=="IMG"?o.parentNode:o).getElementsByTagName("DIV");delegate_ItemsEnumerate(function(p){if(p.className.toLowerCase()=="text"){fn_ExpandCollapseTextItem(p);return true;}return false;},l,true);};

    //事件注册
    FCoreTCIT.Events.RegisterObjectEvent(m_Container, ["selectstart", function(){return false;}]);
    FCoreTCIT.Events.RegisterObjectEvent(m_Container, ["dblclick", h_MouseDblClickHandler]);
    FCoreTCIT.Events.RegisterObjectEvent(m_Container, ["mousedown", h_MouseDownHandler]);
    FCoreTCIT.Events.RegisterObjectEvent(m_Container, ["mouseup", h_MouseUpHandler]);
    FCoreTCIT.Events.RegisterObjectEvent(m_Container, ["mouseout", h_MouseOutHandler]);


    //子项边框(宽度*左右遍数)
    this.ItemBorderWidth = 1;
    //子项的宽度
    this.ItemWidth = NaN;
    //开启移动效果
    this.MovingShadow = false;
    //拖拽灵敏度(自动调整的范围)
    this.AdjustWidth = 80;

    //function(date,[startIndex,count,handler])
    //return string:html
    this.OnLoadingItems = null;
    //function(liElement)
    //return void
    this.OnLoadItemAppend = null;
    //function(div.Item)
    //return void
    this.OnSubItemLocated = null;
    //function(date,itemIndex)
    this.OnVisit = null;

    //公布方法
    MoveElementManager.AutoAdjustContainerWidth = fn_setContainerWidth;
    MoveElementManager.ParseDate = fn_parseDate;
    MoveElementManager.MovingContent = fn_movingContent;
    MoveElementManager.AutoAdjustContainer = fn_adjustContainerPositionByDate;

    //系列公共方法
    this.Print = fn_print;
    this.GetContainer = function() {return m_Container;};
    this.GetIsDrag = function() {return m_IsDrag;};
    this.GetIsMoving = function() {return m_IsMoving;};
    this.GetCurrentItemIndex = function(isOriginal) {return isOriginal ? m_ItemIndex : -1*m_ItemIndex;}
    this.GetDate = function(format,count) {if(arguments.length<2||count==0)return fn_getDateString(format,m_StartDate); var date=new Date(m_StartDate);date.setDate(date.getDate()-count);return fn_getDateString(format,date);};
    this.AutoAdjust = function() {fn_adjustValue_ItemWidth();fn_loadDefaultItem();};
    this.SetMoveableBackground = function() {m_Container.style.backgroundImage = m_Container.parentNode.style.backgroundImage;/*var bgDiv=document.createElement("DIV");m_Container.appendChild(bgDiv);bgDiv.style.height="100%";bgDiv.style.width="100%";*/};
    this.Reset = function(dataOnly) {m_BeginX = 0; m_ItemIndex = 0; m_OriginalLeft = 0; m_CacheingItemIndex = 0; m_TaskedCacheingItemCount = 0; if(dataOnly)return; fn_clearMovingCursor(); fn_setContentLeft(m_OriginalLeft,true); fn_setContainerWidth();}
    this.ClearAll = function() {m_Container.innerHTML='';};
    this.ReceiveCompleted = function(html,params) {fn_try2BuildItems(html);if(params.length>=3&&params[2]!=undefined&&params[2]!=null)params[2]();};
    this.CheckExpiredDate = function(dateOfMonth) {return dateOfMonth.getTime()<(m_EndDate.getTime()+24*60*60*1000*fn_getTaskedCacheingItemCount());}
    this.SetDateAndReload = function(date) {me.ClearAll();me.Reset(true);me.SetMoveableBackground();fn_setMask();fn_setStartDate(date);do_LoadingItems(0,c_Default_Min_ItemCount_Load,function(){fn_adjustValue_ItemWidth();fn_loadDefaultItem();fn_adjustContainerPositionByDate(false);fn_clearMask();});};
    this.SetDateAndLocated = function(date,count) {
        var cii=me.GetCurrentItemIndex(false);var cic=fn_getCurrentItemCount();var tcic=fn_getTaskedCacheingItemCount();
        if(cic>0&&cii==0&&(cii-count>=0)){alert(c_Defined_UnvariableMessage);return;}
        if(count<cii){fn_move(cii-count);do_Visit();return;}
        if(count<=cic-tcic){fn_move(cii-count);do_Visit();return;}
        var index=Math.max(cic,m_CacheingItemIndex);var len=count-index+fn_getTaskedCacheingItemCount();
        fn_setMask();
        do_LoadingItems(index,len,function(){
            fn_adjustValue_ItemWidth();
            if(cii==0)fn_adjustContainerPositionByDate(false);
            fn_move(cii-count);
            do_Visit();
            fn_clearMask();
        });
    };

    this.MoveNext = function() {fn_move(1);};
    this.MovePrevious = function() {fn_move(-1);};
    this.VisitNext = function() {fn_move(1);do_Visit();};
    this.VisitPrevious = function() {var left=fn_getContentLeft();if(left>=window.screen.availWidth){fn_autoMove(me.GetCurrentItemIndex(true)-1);}else{fn_move(-1);}do_Visit();};


    //初始化
    this.Init = function()
    {
        sub_Init();

        me.Reset();
        me.SetMoveableBackground();

        if (isNaN(me.ItemWidth))
        {
            if (!fn_adjustValue_ItemWidth())
            {
                return;
            }

            sub_SettingSubItemLocation();
        }
        else
        {
            if (!fn_adjustValue_ItemWidth())
            {
                if (me.OnLoadingItems==null)
                {
                    /* throw "parameter [ItemWidth] is required!"; */
                    return;
                }

                do_LoadingItems(0, c_Default_Min_ItemCount_Load);
            }
        }

        fn_adjustContainerPositionByDate(false);
        fn_loadDefaultItem();
    };

    me.Init();
}


/**
    var manager = new MoveElementManager("ulContainer");
    manager.OnLoadingItems = function(date,[startIndex,count,handler]) {
        // request server
        return new String();
    }
*/

 

 

 

(完)

 

posted @ 2012-05-03 11:35  永哥  阅读(337)  评论(0)    收藏  举报