亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? calendardisplay.as

?? 用Flex實現的一個關于減肥系統的web界面,內部沒有實際的業務邏輯,只是一個原形.
?? AS
?? 第 1 頁 / 共 5 頁
字號:
		}
		
		// the last hour visible on screen based on our current scroll position.
		private function get lastVisibleHour():Number
		{
			return _scrollHour + Math.floor(_dayAreaHeight / _hourHeight*2)/2;
		}

		// this function will return the scroll position the can best guarantee that the events
		// passed in would be visible on screen.
		private function computeScrollHourToDisplayEvents(events:Array):Number
		{
			if(events.length == 0)
				return 8;
				
			var hoursSortedByStartTime:Array = events.concat();
			hoursSortedByStartTime.sort(function(lhs:CalendarEvent, rhs:CalendarEvent):Number
			{
				var ltime:Number = _tz.timeOnly(lhs.start);
				var rtime:Number = _tz.timeOnly(rhs.end);
				return (rhs.allDay || ltime < rtime)? -1:
					   (lhs.allDay || ltime > rtime)? 1:
					   					0;
			}
			);
			return hoursSortedByStartTime[0].allDay? 8:hoursSortedByStartTime[0].start.hours;
		}
		

//----------------------------------------------------------------------------------------------------
// animation callbacks
//----------------------------------------------------------------------------------------------------
		
		// initialization function for the layout of new events appearing on screen.  The LayoutAnimator
		// will call this for each event that gets rendered for the first time.
		private function setupNewEventTarget(target:LayoutTarget):void
		{
			// if it's an item being dragged, we don't want any animation on it,
			// just to have it initialize to its starting position, size, and scale.
			if(_dragEventData != null && IDataRenderer(target.item).data == _dragEventData.event)
			{
				target.item.setActualSize(target.unscaledWidth,target.unscaledHeight);
				target.item.x = target.x;
				target.item.y = target.y;
				var m:Matrix = DisplayObject(target.item).transform.matrix;
				m.a = m.d = 1;
				DisplayObject(target.item).transform.matrix = m;
			}
			else
			{
				// we want new items to zoom out from their center point.
				target.item.setActualSize(target.unscaledWidth,target.unscaledHeight);
				target.item.x = target.x + target.unscaledWidth/2;
				target.item.y = target.y + target.unscaledHeight/2;
				m = DisplayObject(target.item).transform.matrix;
				m.a = m.d = 0;
				DisplayObject(target.item).transform.matrix = m;
			}
		}
		
		// an initializer function for items that we want to fade in to place
		// at their full size.
		private function fadeInTarget(target:LayoutTarget):void
		{
			target.item.setActualSize(target.unscaledWidth,target.unscaledHeight);
			target.item.x = target.x;
			target.item.y = target.y;
			target.item.alpha = 0;
		}
		
		// a remove function for items that we want to fade out in place
		// at their full size.
		private function fadeOutTarget(target:LayoutTarget):void
		{
			target.alpha = 0;
			target.unscaledHeight = target.item.height;
			target.unscaledWidth  = target.item.width;
			target.x = target.item.x;
			target.y = target.item.y;						
		}
		
		
//----------------------------------------------------------------------------------------------------
// managing event data
//----------------------------------------------------------------------------------------------------

		// this function makes sure that our EventData objects, which store all the metadata we need to
		// render a single CalendarEvent, are in sync with our data provider.
		private function updateEventData():void
		{
			// normally, when we update the screen, any events that were previously
			// on screen animate to their new position, and any new ones appear.
			// Sometimes, however, we don't want existing events to animate into place...
			// we just want all events on screen to just appear in place (i.e., sometimes
			// it would look odd to the user to try and correlate the previous view to the new
			// view).
			if(false && _removeAllEventData)
			{
				// throw out all previous event data.  Our animation keys off the identify of our
				// eventData objects, so if we throw them all out, every event will be new from an
				// animation perspective.
				removeAllEventData();
				for(var i:int = 0;i<_visibleEvents.length;i++)
				{
					var event:CalendarEvent = _visibleEvents[i];
					buildEventData(event);
				}
			}
			else
			{
				// we keep a dictionary so we can look up 
				// event data by event.  Here we're going to
				// iterate through our visible events, and build a new lookup dtable.
				// for each event, we'll see if we have a matching eventData in our old 
				// lookup table. If we do, we transfer it to the new one and remove it from the old
				// one. Otherwise, we'll create a new one and add it to the new lookup table.  In the
				// end, we should be left with two lookup tables...the new one, with data for each event
				// now visible on screen, and the old one, which should at that point only have the data
				// for items that are no longer on screen.  So at that point we just cleanup the unneeded old
				// event data, and call it a day.
				var oldEventData:Dictionary = _eventData;
				_eventData = new Dictionary();
				
				for(i = 0;i<_visibleEvents.length;i++)
				{
					event = _visibleEvents[i];
					// try and find data for this event in the old lookup table
					var ed:EventData = oldEventData[event];
					if(ed == null)
					{
						// none existed, so create new data.
						buildEventData(event);
					}
					else
					{
						// some existed, so add it to the lookup table
						_eventData[event] = ed;
						// make sure it's still correct for our new state.
						validateEventData(ed);
						// and remove it from the old lookup table.
						delete oldEventData[event];
					}
				}
				for(var anEvent:* in oldEventData)
				{
					// throw out everything remaining from the old lookup table.
					removeEventData(oldEventData[anEvent]);
				}			
			}
			
		}
		
		// utility function that cleans up every piece of EventData in our lookup table.
		private function removeAllEventData():void
		{
			for(var aKey:* in _eventData)
			{
				var data:EventData = _eventData[aKey];

				for(var i:int=0;i<data.renderers.length;i++)
				{
					// clean up the renderers associated with this event data.
					var renderer:UIComponent = data.renderers[i];
					renderer.parent.removeChild(renderer);
					// make sure our layout animator forgets about it.
					var target:LayoutTarget = _animator.releaseTarget(renderer);
					if(target != null)
						target.animate = false;										
				}
			}
			// all our event data is gone, so start with a fresh lookup table.
			_eventData = new Dictionary();
		}
		
		// remove a single piece of EventData from our lookup table
		private function removeEventData(data:EventData):void
		{
			for(var i:int=0;i<data.renderers.length;i++)
			{
				// clean up all of its renderers
				var renderer:UIComponent = data.renderers[i];
				renderer.parent.removeChild(renderer);
				// and remove it from the lookup table.
				var target:LayoutTarget = _animator.releaseTarget(renderer);
				if(target != null)
					target.animate = false;										
			}
		}
		
		// initalize a new eventData structure for the given CalendarEvent.
		private function buildEventData(event:CalendarEvent):EventData
		{
			var data:EventData = _eventData[event] = new EventData();
			data.renderers = [];
			data.event = event;
			validateEventData(data);
			return data;
		}
		
		
		// utility function that validates a single EventData structure to make 
		// sure it has the right information for the event given our current state.
		private function validateEventData(data:EventData):void
		{
			var event:CalendarEvent = data.event;
			// EventData.range contains the visible portion of the this event's range,
			// given our current visible range. So we intersect the two.
			data.range = event.range.intersect(_visibleRange);
			
			// now, we know how long the visible portion of this event is. We want 
			// to create the renderers we need to display it.  Usually it's 
			// 1-1, but sometimes we need more than one renderer for an event. 
			// specifically, if we're showing multiple weeks, and the event spans
			// more than one week, we'll need 1 renderer for each visible week it spans.
			// find out how many weeks it spans.
			var weekSpan:int = _tz.rangeWeekSpan(data.range);
			// figure out where we're going to place these events.  Because we scroll and mask
			// intra-day events in days view, we need to place it in a different parent
			// than all/multi day events
			var parent:UIComponent = (event.allDay)? _allDayEventLayer:_eventLayer;
			var sn:String = getStyle("eventStyleName");
			var rendererCount:Number = data.renderers.length;

			// if we don't have enough renderers for this event			
			if(weekSpan > rendererCount)
			{
				for(var i:int = rendererCount;i<weekSpan;i++)
				{				
					// create a renderer, listen for mouse down events
					var renderer:CalendarEventRenderer = new CalendarEventRenderer();
					renderer.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownOnEventHandler);
					data.renderers.push(renderer);
					// assign it the right data and style.
					renderer.data = event;
					renderer.styleName = sn;
					parent.addChild(renderer);
					if(data == _dragEventData)					
					{
						// if we're currently dragging this event, we need to give it a nice dropshadow.
						// TODO: centralize the configuration of  a dragging item, and make it customizable
						renderer.filters = [
							_dragFilter
						]									
					}
				}
			}
			else
			{
				// we have too many renderers, so let's throw the extra ones away.
				for(i = weekSpan;i<rendererCount;i++)
				{
					renderer = data.renderers[i];
					//Check if the renderer is null, if null, we needn't remove it.
					if(renderer!=null){
						renderer.parent.removeChild(renderer);
					}
				}
				data.renderers.splice(weekSpan,rendererCount-weekSpan);
			}
		}
		
//----------------------------------------------------------------------------------------------------
// click event handlers
//----------------------------------------------------------------------------------------------------

		// event handler called when the user clicks on a day header.
		private function headerClickHandler(e:MouseEvent):void
		{
			var d:Date = IDataRenderer(e.currentTarget).data as Date;
			if(d == null)
				return;
			// rename and redispatch the event
			var newEvent:CalendarDisplayEvent = new CalendarDisplayEvent(CalendarDisplayEvent.HEADER_CLICK);
			newEvent.dateTime = d;
			dispatchEvent(newEvent);
		}

		// event handler called when the user clicks on a day		
		private function dayClickHandler(e:MouseEvent):void
		{
			
			
			
			var d:Date = IDataRenderer(e.currentTarget).data as Date;
			if(d == null)
				return;
			//rename and redispatch the event
			var newEvent:CalendarDisplayEvent = new CalendarDisplayEvent(CalendarDisplayEvent.DAY_CLICK);
			newEvent.dateTime = d;
			dispatchEvent(newEvent);
			
		}
		
		

//----------------------------------------------------------------------------------------------------
// event dragging behavior
//----------------------------------------------------------------------------------------------------

		// converts a point, in the calendar's coordinate system, into a date.
		private function localToDateTime(pt:Point):Date
		{
			var result:Date = new Date(_visibleRange.start);
			if(_displayMode == "day" || _displayMode == "days")
			{
				// in day(s) mode, we only have one row.  So we convert our horizontal position into
				// an index by dividing by the width of each day
				var dayIndex:Number = (pt.x - _border.left)/_cellWidth;				
				dayIndex = Math.floor(Math.max(dayIndex,0));
				
				// in day(s) mode, the vertical position corresponds to the hour.  So we divide the y value
				// by the height of one our, accounting for our current scroll position.
				var hourCount:Number = (pt.y + _scroller.scrollPosition - _allDayAreaHeight)/_hourHeight;
				// round off to half hours (this probably should be configurable)
				// TODO: make the roundoff configurable
				hourCount = Math.round(hourCount*2)/2;
				// if the mouse is too high or too low, it will round out to the next day. So clamp it.
				hourCount = Math.max(0,Math.min(24,hourCount));
				
				
				
				// add our hour and day calculations to the start of our visible range to get the actual time represented.
				result.date += dayIndex;
				result.milliseconds = result.seconds = result.minutes = 0;
				result.hours = Math.floor(hourCount);
				result.minutes = (hourCount - result.hours)*60;
				// we didn't clamp our day range...so if we go beyond our horizontal range, clamp it to the last day of the visible range.
				if(result > _visibleRange.end)
				{
					result.fullYear = _visibleRange.end.fullYear;
					result.date = _visibleRange.end.date;
					result.month = _visibleRange.end.month;
				}
			}
			else
		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级在线播放| 国产精品欧美精品| 国产黄色精品网站| 亚洲va欧美va人人爽| 欧美日韩亚洲综合一区| 色婷婷狠狠综合| 91欧美一区二区| 日韩欧美一区二区久久婷婷| 精品精品欲导航| 中文字幕精品一区二区三区精品| 亚洲乱码中文字幕| 欧美激情综合五月色丁香小说| 亚洲一区二区在线播放相泽| 亚洲一区二区三区不卡国产欧美| 夜夜嗨av一区二区三区中文字幕| 亚洲综合色噜噜狠狠| 老司机精品视频线观看86| 9人人澡人人爽人人精品| 91.xcao| 色偷偷成人一区二区三区91| 丰满少妇久久久久久久| 奇米精品一区二区三区四区 | 国产精品久久影院| 日韩欧美在线不卡| 国产精品欧美久久久久无广告| 日韩不卡免费视频| caoporen国产精品视频| 欧美一级日韩一级| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 欧美一区二区视频观看视频| 亚洲精品视频自拍| 在线电影院国产精品| 欧美成人女星排名| 免费成人在线观看| 水野朝阳av一区二区三区| 欧美日韩高清在线| 一区二区三区四区精品在线视频 | 成人午夜视频免费看| 麻豆精品蜜桃视频网站| 国产欧美日韩综合精品一区二区| 91在线云播放| 不卡一区二区三区四区| 日韩午夜激情av| 亚洲欧美激情在线| 国产一区啦啦啦在线观看| 欧美三级日韩三级| 久久久亚洲综合| 亚洲最快最全在线视频| 不卡在线视频中文字幕| 精品日韩欧美在线| 日韩国产欧美在线播放| 91国在线观看| 国产农村妇女精品| 另类小说图片综合网| 欧美在线观看你懂的| 国产精品你懂的在线| 美脚の诱脚舐め脚责91| 欧美三级蜜桃2在线观看| 国产精品国产三级国产专播品爱网| 麻豆精品视频在线观看| 在线播放一区二区三区| 亚洲午夜精品一区二区三区他趣| 成人a区在线观看| 国产欧美日韩三级| 国产一区二区精品久久| 欧美大尺度电影在线| 奇米一区二区三区av| 欧美精品自拍偷拍| 亚洲国产va精品久久久不卡综合| 欧洲一区在线观看| 亚洲精品免费在线播放| av电影天堂一区二区在线观看| 国产精品天干天干在线综合| 国产高清不卡二三区| 久久婷婷国产综合国色天香| 国产麻豆精品theporn| 久久综合色综合88| 亚洲视频精选在线| 91精品啪在线观看国产60岁| 美国三级日本三级久久99| 久久久九九九九| 欧美性猛片aaaaaaa做受| 日韩一区二区不卡| 亚洲综合清纯丝袜自拍| 久久成人久久鬼色| 国模无码大尺度一区二区三区| 亚洲资源在线观看| 中文一区在线播放| 欧美日韩国产小视频| 国产一区二区伦理| 欧美日韩中文字幕一区二区| 不卡视频免费播放| 中文字幕av资源一区| 亚洲免费色视频| 国产制服丝袜一区| 欧美一区二区三区喷汁尤物| 91精品福利在线一区二区三区 | 国产亚洲欧美一级| 日韩一区二区三区电影| 国产91高潮流白浆在线麻豆| 粉嫩av一区二区三区粉嫩| 中文字幕第一区综合| 丁香网亚洲国际| 欧美国产欧美亚州国产日韩mv天天看完整| 成人黄色av网站在线| 亚洲三级在线观看| 欧美日韩激情一区| 九色综合狠狠综合久久| 国产精品美女一区二区三区| 日本韩国欧美在线| 丝袜诱惑制服诱惑色一区在线观看| 欧美一卡二卡三卡四卡| 国产精品一级片在线观看| 国产精品人人做人人爽人人添| 91免费国产在线| 欧美aaaaaa午夜精品| 国产午夜精品久久久久久久| 色综合久久久久| 久久精品国产亚洲a| 中文子幕无线码一区tr| 欧美剧情电影在线观看完整版免费励志电影| 日本v片在线高清不卡在线观看| 国产肉丝袜一区二区| 欧美在线观看视频一区二区三区 | 国产精品88av| 欧美高清视频不卡网| 国产午夜一区二区三区| 亚洲va天堂va国产va久| 丁香婷婷深情五月亚洲| 精品区一区二区| 91麻豆免费看片| 久久狠狠亚洲综合| 一区二区三区在线视频免费观看| 3atv一区二区三区| 日韩欧美自拍偷拍| 国产精品久久久久影院亚瑟| 日本不卡一区二区三区高清视频| 欧美三级欧美一级| 日欧美一区二区| 国产精品二区一区二区aⅴ污介绍| 在线不卡一区二区| 99精品热视频| 国产一区二区精品久久| 天天综合网 天天综合色| 国产精品国产三级国产专播品爱网| 日韩欧美在线1卡| 欧美日韩国产综合久久| 95精品视频在线| 国产最新精品精品你懂的| 午夜激情一区二区三区| 成人免费视频在线观看| 欧美zozo另类异族| 欧美日韩成人高清| 色婷婷综合久久久久中文| 在线亚洲一区二区| 亚洲精选一二三| 成人av网站在线观看| 精品日韩欧美一区二区| 日本色综合中文字幕| 日韩精品资源二区在线| 欧洲一区在线观看| 91免费观看视频| 国产成人高清视频| 久久99久久精品| 天堂蜜桃一区二区三区| 亚洲欧美另类综合偷拍| 久久精品视频一区| 久久影院视频免费| 日韩欧美国产不卡| 欧美一区二区三区免费在线看| 色婷婷av一区二区| 91视频在线观看免费| 国产成人精品亚洲777人妖 | 麻豆视频一区二区| 香蕉成人伊视频在线观看| 日韩毛片在线免费观看| 久久色.com| 精品成人a区在线观看| 91精品福利在线一区二区三区| 欧美日韩精品欧美日韩精品| 色综合色狠狠综合色| 91视频com| 国产精品1024| 国产高清无密码一区二区三区| 久久99热这里只有精品| 日本91福利区| 夜夜精品浪潮av一区二区三区| 69堂精品视频| 国产一区二区三区av电影| 精品在线视频一区| 有坂深雪av一区二区精品| 美女视频黄免费的久久| 日韩av中文字幕一区二区三区| 亚洲成人动漫在线观看| 亚洲国产aⅴ天堂久久| 亚洲一区二区美女| 亚洲.国产.中文慕字在线| 欧美三级日韩三级| 懂色一区二区三区免费观看| 一区二区成人在线|