脚本:时间轴的实现
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&¶ms[2]!=undefined&¶ms[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();
}
*/
(完)
浙公网安备 33010602011771号