WebプログラミングT

 目次へ 前へ

2006/1/17 久米

7.ActionScriptのアプリケーション

7.1 カレンダー

    機能 ムービークリップ
CellMC
セルの作成
  • function setText(a)
  • function setPosition(x, y)
  • function setCellSize(w, h)
  • function setTextColor(a)
  • function setCellColor(a)
  • function setAlpha(a)
CallendarMC
の作成
  • //セル生成し配列に設定49個(7×7)
    for(var i=0; i<49;i++){
    var cn="cell"+i;
    this.attachMovie("CellMC", cn, i+1);
    var cell_mc=eval(cn);
    cellArray.push(cell_mc);
    }
  • //今日の年と月の取得
    now_date=new Date();
    nowYear=now_date.getFullYear();
    nowMonth=now_date.getMonth()+1;
    //getMonth()は0が1月
    nowDay=now_date.getDate();//今日 1〜31
    //とりあえず今年今月を表示
    setYearMonth(nowYear, nowMonth);
  • //カレンダーの年月設定および表示関数
    function setYearMonth(y, m){
    yearValue=y;
    monthValue=m;
    createCalendar()
    }
  • //カレンダー表示関数
    function createCalendar(){
    head_mc.head_txt.text=yearValue+"年"+monthValue+"月";
    //今月の最初の日
    var first_date=new Date(yearValue, monthValue-1, 1);
    //1日の曜日。日曜が0、月曜が1
    firstWeekValue=first_date.getDay();
    //来月の1日から1日引いた
    var last_date=new Date(yearValue, monthValue, 0);
    daysValue=last_date.getDate();//今月の日数

    //attachMovieで作ったオブジェクトのfunctionを実行するため1フレーム呼び出しを遅らせる
    this.onEnterFrame = function() {
    setCell();
    delete this.onEnterFrame;//イベントハンドラメソッドの定義をクリア
    }
    }
  • //全セルの位置、テキスト、色を設定関数
    function setCell() 以下略

 

 

オプション1 前月 次月 ボタン設定

head_mcの中にボタンを2つ設定する

 

オプション2 祝日の設定

/*
* 祝日配列取得関数
*   引数yとmは年と月
*   戻り値は祝日の配列
*   使用例 holidayArray=findHoliday(yearValue, monthValue);
*   for文の中で if(holidayArray[i]) cellArray[count].setTextColor(0xFF0000);//赤
*/
function findHoliday(y, m) {
    var h=new Array(32);//祝日設定配列 trueが祝日 最終的にholidayArrayへ代入
    for(var i=0; i<32; i++){
        h[i]=false;
    }
    
    // その月の最初の月曜日が何日かを算出
    var monday = 1;
    while(true) {
        var m_date=new Date(y, m-1, monday);//
        if(m_date.getDay()==1) break;
        monday++;
    }

    // 祝日をセット
    switch(m){
        case 1:
            // 元旦
            h[1] = true;
            // 成人の日
            if(y < 2000) {
                h[15] = true;
            } else {
                h[monday+7] = true;
            }
            break;
        case 2:
            // 建国記念日
            h[11] = true;
            break;
        case 3:
            // 春分の日
            if(y > 1979 && y < 2100) {
                var tmp = Math.floor(20.8431+(y-1980)*0.242194-Math.floor((y-1980)/4));
                h[tmp] = true;
            }
            break;
        case 4:
            // 天皇誕生日(1988まで) or みどりの日
            h[29] = true;
            break;
        case 5:
            // 憲法記念日
            h[3] = true;
            // 子どもの日
            h[5] = true;
            break;
        case 7:
            // 海の日
            if(y > 2002) {
                h[monday+14] = true;
            } else if(y > 1994) {
                h[21] = true;
            }
            break;
        case 9:
            // 敬老の日
            if(y < 2003) {
                h[15] = true;
            } else {
                h[monday+14] = true;
            }
            // 秋分の日
            if(y > 1979 && y < 2100) {
                var tmp = Math.floor(23.2488+(y-1980)*0.242194-Math.floor((y-1980)/4));
                h[tmp] = true;
            }
            break;
        case 10:
            // 体育の日
            if(y < 2000) {
                h[10] = true;
            } else {
                h[monday+7] = true;
            }
            break;
        case 11:
            // 文化の日
            h[3] = true;
            // 勤労感謝の日
            h[23] = true;
            break;
        case 12:            
            // 天皇誕生日
            if(y > 1988) {
                h[23] = true;
            }
            break;
    }
    
    var lastday=new Date(y, m, 0);//来月の1日から1日引いた
    var days=lastday.getDate();//今月の日数
    
    // 国民の休日
    if(y > 1985) {
        for(var i = 1;i < days;i++) {
            if(h[i] && h[i+2]) {
                h[i+1] = true;
                i = i + 3;
            }
        }
    }
    
    // 振り替え休日
    var sunday = monday - 1;
    if(sunday == 0) sunday = 7;
    for(var i = sunday;i < days;i = i + 7) {
        if(h[i]) {
            h[i+1] = true;
        }
    }
    
    return h;
}

作成したカレンダー

 

演習 改良して年間カレンダー(1月から12月まで表示)を作成せよ