| package { import flash.display.*; import flash.events.MouseEvent; import flash.text.TextField; import flash.filters.GlowFilter; import flash.geom.ColorTransform; /* * 一个完整简洁的flash日期选择器,性能稳定,内存消耗很低。 * 作者:Michael 欢迎光临我的空间,交流指点。http://hi.baidu.com/wwwanq/ */ public class Calendar extends Sprdite { private var currentDate = new Date(2000,1,25); // Create currute date object private var currentYear:uint = currentDate.getFullYear(); private var currentMonth:uint = currentDate.getMonth(); private var itemArray:Array = new Array(); private var container:Sprite; // Create a container to layout item of date private var monthdaysOlympicArray = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); private var monthdaysNormalArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); /* Constructor */ public function Calendar() { builtCalendar(); bPrevMonth.addEventListener(MouseEvent.MOUSE_DOWN,prevMonth); bNextMonth.addEventListener(MouseEvent.MOUSE_DOWN,nextMonth); bPrevYear.addEventListener(MouseEvent.MOUSE_DOWN,prevYear); bNextYear.addEventListener(MouseEvent.MOUSE_DOWN,nextYear); } /* Calculate week number for first day of month */ private function getWeekNum(month:uint, year:uint):uint { var tmpDate:Date = new Date(year, month, 1); return (tmpDate.getDay()); } private function daysMonth(month:uint, year:uint):uint { if ((year%4==0 && year%100!=0) || year%400==0) { // Divisible 4 but can not divisible 100,and divisible 400; return (monthdaysOlympicArray[month]); } else { return (monthdaysNormalArray[month]); } } /* Display date */ private function builtCalendar():void { var posY:uint; var posX:uint; var gapX:uint = 30; var gapY:uint = 24; container = new Sprite(); container.x = 35; container.y = 80; addChild(container); for (var i:uint=1 ; i <= 42; i++) { itemArray = new DateItem(); itemArray.x = posX; itemArray.y = posY; if (posX < gapX*6) { posX += gapX; } else { posX = 0; posY += gapY; } container.addChild(itemArray); itemArray.addEventListener(MouseEvent.CLICK, onItemClick); } updateDisplay(); } /* Clear all date item text content */ private function clearItemText():void { for (var j:uint=1; j<=42; j++) { if (itemArray[j].txt.text != "") { itemArray[j].txt.text = ""; } } } /* Update to display date item text content */ private function updateDisplay():void { var totalDay:uint = daysMonth(currentMonth, currentYear); var startDay:uint = getWeekNum(currentMonth, currentYear); clearItemText(); for (var i:uint=1; i<=totalDay; i++) { itemArray[i+startDay].txt.text = String(i) } displayText.text = currentYear + " - " + uint(currentMonth + 1); } /* Data item click handler */ private function onItemClick(e:MouseEvent):void { if (e.currentTarget.txt.text!="") { var tmpDate:Date = new Date(currentYear, (currentMonth), e.currentTarget.txt.text); trace(tmpDate.getFullYear(), tmpDate.getMonth()+1, tmpDate.getDate()); //dispatchEvent(new CustomEvent("item_click", tmpDate));// Dispatch a event and pass parameter of date object } } private function prevMonth(e:MouseEvent):void { if (currentMonth == 0) { currentMonth = 11; currentYear--; } else { currentMonth--; } updateDisplay(); } private function nextMonth(e:MouseEvent):void { if (currentMonth == 11) { currentMonth = 0; currentYear++; } else { currentMonth++; } updateDisplay(); } private function prevYear(e:MouseEvent):void { currentYear--; updateDisplay(); } private function nextYear(e:MouseEvent):void { currentYear++; updateDisplay(); } } } |
此篇文章转摘于:Flash动漫教学网 http://www.ccflash.com转载请保留此行.
不过 为什么要把Sprdite改成MoveClip才能正常运行呢,
嘿嘿,我刚接触flash不是很懂:-165)
回复