一个完整简洁的flash日期选择器源码

一个完整简洁的flash日期选择器-calender
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转载请保留此行.

FLA  
Trackback

本文到目前为止有1条评论

  1. Gravatar Icon
    :-118)谢谢  下来看看

    不过 为什么要把Sprdite改成MoveClip才能正常运行呢,
    嘿嘿,我刚接触flash不是很懂:-165)

    回复

添加评论