日本語
<html> <title>入力日付を選択するための非常に実用的な特殊効果 downcodes.com</title> <head> <script language="javascript"> <!-- //============ ====================================== パラメータ設定部====== === ============================================== var bMoveable=true ; //カレンダーをドラッグできるかどうかを設定 var _VersionInfo="Version:2.0" //バージョン情報//====================== == ========================== WEBページ表示部================== == ================================= var strFrame; //カレンダーレイヤーのHTMLコードを格納 document.writeln( '<iframe bgcolor="#000000" id=downcodesDateLayer Author=wayx Frameborder=0 style="位置: 絶対; 幅: 186; 高さ: 247; z-index: 9998; 表示: なし"></iframe>') ; strFrame='<スタイル>'; strFrame+='INPUT.button{BORDER-RIGHT: #B3C9E1 1px ソリッド;BORDER-LEFT: #B3C9E1 1px ソリッド;'; BOTTOM: #ff9900 1px Solid;BACKGROUND-COLOR: #EDF2F8;font-family:宋体;}'; strFrame+='TD{FONT-SIZE: 9pt;font-family:宋体;}'; '; strFrame+='<scr' + 'ipt>'; strFrame+='var datelayerx,datelayery; /*カレンダー コントロールのマウス位置を保存します*/' strFrame+='var bDrag; /' ; strFrame+='function document.onmousemove() /*マウス移動イベントで、カレンダーのドラッグを開始すると、カレンダーを移動します*/' strFrame+='{if(bDrag && window.event.button==1) )'; strFrame+=' {var DateLayer=parent.document.all.downcodesDateLayer.style;'; strFrame+=' DateLayer.posLeft += window.event.clientX-datelayerx;/*マウスの位置が初期位置に戻るためdiv*/'; strFrame+=' DateLayer.posTop += window.event.clientY-datelayery;}}'; function DragStart() /*カレンダーのドラッグ開始*/'; strFrame+= '{var DateLayer=parent.document.all.downcodesDateLayer.style;'; strFrame+=' datelayerx=window.event.clientY;'; =' bDrag=true; }' strFrame+='function DragEnd(){ /*カレンダーのドラッグを終了します*/' strFrame+='</scr' + 'ipt>'; ='<div style="z-index:9999;position:absolute;left:0;top:0;" onselectstart="return false"><span id=tmpSelect YearLayer Author=wayx style="z-index: 9999;位置: 絶対;上 : 3; 左: 19;表示: なし"></span>'; strFrame+='<span id=tmpSelectMonthLayer Author=wayx style="z-index: 9999;位置: 絶対;上: 3 ; 左: 78; 表示: なし"></span>'; strFrame+='<table style="FILTER:dropshadow(color=#EDEDF8,offx=3.3,offy=3.3,positive=1);" cellSpacing= 0" cellPadding=" 0" width="100%" border="0"><tr><td>'; // 境界線の色を制御します strFrame+='<table border=1 cellpacing=0 cellpadding=0 width=182 height =160 bgColor=" #FFFFFF" borderColorLight=#7197CA borderColorDark="#ffffff" Author="wayx">' strFrame+=' <tr Author="wayx"><td width=182 height=23 Author="wayx"; bgcolor=#FFFFFF> <table border=0 cellpacing=1 cellpadding=0 width=180 Author="wayx" height=23>'; strFrame+=' <tr align=center Author="wayx"><td width=16 align =center bgcolor=# B6CAE4 style="font-size:12px;cursor: hand;color: #ffffff" '; strFrame+=' onclick="parent.downcodesPrevM()" title="1 か月進める" Author=downcodes> <b Author= downcodes><</b>'; strFrame+=' </td><td width=60 align=center style="font-size:12px;cursor:default" Author=downcodes '; ="style.backgroundColor='#D7E1F0'" onmouseout="style.backgroundColor='white'" '; strFrame+='onclick="parent.tmpSelect YearInnerHTML(this.innerText.substring(0,4))" title="ここで年を選択をクリックします"><span Author=downcodes id=downcodes YearHead></span></td>' strFrame+='<td width=48 align=center style="font-size:12px;cursor :default" Author= ダウンコード onmouseover="style.backgroundColor='#D7E1F0'" '; strFrame+=' onmouseout="style.backgroundColor='white'" onclick="parent.tmpSelectMonthInnerHTML(this.innerText.length ==3?this .innerText.substring(0,1):this.innerText.substring(0,2))"'; strFrame+=' title="ここをクリックして月を選択します"><span id=downcodesMonthHead Author=ダウンコード></span>< /td>'; strFrame+=' <td width=16 bgcolor=#B6CAE4 align=center style="font-size:12px;cursor: hand;color: #ffffff" '; onclick="parent.downcodesNextM( )" title="1 か月戻す" Author=downcodes><b Author=downcodes>></b></td></tr>'; strFrame+=' </table>< /td></tr >'; strFrame+=' <tr Author="wayx"><td width=180 height=18 Author="wayx">'; strFrame+='<table border=1 cellpacing=0 cellpadding=0 bgcolor=#618BC5 ' + (bMoveable? 'onmousedown="DragStart()" onmouseup="DragEnd()"':''); strFrame+=' BORDERCOLORLIGHT=#3677b1 bgcolor=#5168C8 BORDERCOLORDARK=#FFFFFF width="100% " height=25 Author= "wayx" style="cursor:' + (bMoveable ? 'move':'default') + '">'; strFrame+='<tr Author="wayx" valign="middle" align= "center"><td style="font-size:12px;color:#FFFFFF" Author=downcodes><b>日</b></td>'; strFrame+='<td style="font-size: 12px;color:#FFFFFF " 著者=ダウンコード><b>一</b></td><td style="font-size:12px;color:#FFFFFF" 著者=ダウンコード><b>二</b ></td>' ; strFrame+='<td style="font-size:12px;color:#FFFFFF" 著者=downcodes><b>三</b></td><td style="font-size :12px;color:# FFFFFF" 著者=ダウンコード><b>四</b></td>'; strFrame+='<td style="font-size:12px;color:#FFFFFF" 著者=ダウンコード>< b>五</b></td><td style="font-size:12px;color:#FFFFFF" Author=downcodes><b>六</b></td></tr>'; ='</table> </td></tr><!-- 著者:FRHuang(downcodes) http://www.downcodes.com/ mail: downcodes@hzcnc.com 2002-10-8 -->' ; strFrame+=' <tr Author="wayx"><td width="100%" height=120 Author="wayx">'; strFrame+=' <table border=1 cellpacing=2 cellpadding=0 borderColorDark=#ffffff bgColor =#FFFFFF borderColorLight=# 83A4D1 width="100%" height=120 Author="wayx">' for (j=0;j<5;j++){ strFrame+= ' <tr align=center著者="wayx"> '; for (i=0;i<7;i++){ strFrame+='<td width=25 height=25 id=downcodesDay'+n+' style="font-size:12px" 著者=ダウンコード onclick=parent.downcodesDayClick (this.innerText,0)></td>';n++;} strFrame+='</tr>';} strFrame+=' <tr align=center Author="wayx">'; (i=35;i <39;i++)strFrame+='<td width=25 height=25 id=downcodesDay'+i+' style="font-size:12px" Author=wayx onclick="parent.downcodesDayClick(this. innerText,0)"> </td>'; strFrame+=' <tdcolspan=3 align=right Author=downcodes><span onclick=parent.closeLayer() style="font-size:12px;cursor: hand"' ; strFrame+=' Author= ダウンコード title="' + _VersionInfo + '"><u>閉じる</u></span> </td></tr>'; strFrame+=' </table></td> </tr><tr Author="wayx"><td Author="wayx">'; strFrame+=' <table border=0 cellpacing=1 cellpadding=0 width=100% Author="wayx" bgcolor=#FFFFFF> '; strFrame+=' < tr Author="wayx"><td Author=downcodes align=left><input Author=downcodes type=button class=button style="cursor:hand" value="<<" title="Go 1 年前へ" onclick ="parent.downcodesPrevY()" '; strFrame+=' onfocus="this.blur()" style="font-size: 12px; height: 20px"><input Author=downcodes class=button title ="1 か月進める" type=button '; strFrame+=' value="< " style="cursor:hand" onclick="parent.downcodesPrevM()" onfocus="this.blur()" style="font-サイズ: 12px; 高さ: 20px"></td><td '; strFrame+=' Author=downcodes align=center><input Author=downcodes style="cursor:hand" type=button class=button value=Today onclick= "parent.downcodesToday ()" '; strFrame+=' onfocus="this.blur()" title="現在の日付" style="font-size: 12px; height: 20px;cursor:hand"></td>< td '; strFrame+ =' 著者=downcodes align=right><input Author=downcodes type=button class=button value=" >" style="cursor:hand" onclick="parent.downcodesNextM()" '; onfocus="this .blur()" title="1 か月前に戻す" class=button style="font-size: 12px; height: 20px"><input '; strFrame+=' Author=downcodes type=button class=button style=" カーソル:ハンド" value=">>" title="1 年前に戻す" onclick="parent.downcodesNextY()"' strFrame+=' onfocus="this.blur()" style="font-size : 12px ; 高さ: 20px"></td>'; strFrame+='</tr></table></td></tr></table></td></tr></table>< /div >'; window.frames.downcodesDateLayer.document.writeln(strFrame); //IE プログレスバーが終了しない問題を解決します。 ===== ========================================== WEBページ表示パート==== ============================================ ===== var outObject; //クリックされたボタン var outDate="" //オブジェクトの保存日 var odatelayer=window.frames.downcodesDateLayer.document.all; //保存カレンダーオブジェクト関数 setday(tt, obj) // メイン呼び出し関数 { if (arguments.length > 2){alert("申し訳ありません!このコントロールに渡されるパラメータが多すぎます。 ");return;} if (arguments.length == 0){alert("申し訳ありません! このコントロールのパラメーターが返されませんでした!");return;} var gods = document.all.downcodesDateLayer.style; var th = tt; var ttop = tt.offsetTop; // TT コントロールのアンカーポイントの高さ var thei = tt.clientHeight // TT コントロール自体の高さ var tleft = tt.offsetLeft; TT コントロールのアンカー ポイント var ttyp = tt .type; //TT コントロールのタイプ while (tt = tt.offsetParent){ttop+=tt.offsetTop;} gods.top = (ttyp== "画像")? ttop+thei+6; ttop+thei+6; outObject = (arguments.length == 1) th : outButton = (arguments.length == 1) ? // 外部クリック ボタンを設定します// 現在の入力ボックスの日付に基づいて暦年と月を表示します var reg = /^(d+)-(d{1,2})-(d{1, 2})$/; var r = outObject.value.match(reg); if(r!=null){ r[2]=r[2]-1; [2],r[3]); if(d .getFull Year()==r[1] && d.getMonth()==r[2] && d.getDate()==r[3]){ outDate =d; //外部から渡された日付を保存します } else outDate="" } else{ outDate=""; getFull Year(), new Date().getMonth() + 1) ; } gods.display = ''; event.returnValue=false; } var MonHead = new Array(12);太陽暦の月 MonHead[0] = 31; MonHead[2] = 31; MonHead[5] = 30; ] = 31; モンヘッド[7] = 30; モンヘッド[10] = 31; ; // 年を定義する変数の初期値 var downcodesTheMonth=new Date().getMonth ()+1; // 月の変数の初期値を定義します var downcodesWDay=new Array(39);日付を書き込む配列関数を定義 document.onclick() //任意のクリックでコントロールを閉じる //ie6の場合はOK 以下の切り替えフォーカス処理に置き換えます { with(window.event) { if (srcElement. getAttribute("Author")==null && srcElement != outObject && srcElement != outButton) closeLayer(); } } function document.onkeyup( ) //Esc キーを押して閉じる、フォーカスを切り替えて閉じる { if (window. event.keyCode==27){ if(outObject)outObject.blur(); } else if(document.activeElement) if(document.activeElement.getAttribute("Author")==null && document.activeElement ! = outObject && document.activeElement != outButton) { closeLayer(); } } function downcodesWriteHead(yy,mm) //月を先頭に現在の年を書き込みます { odatelayer.downcodesyearHead.innerText = yy + "year"; downcodesMonthHead.innerText = mm + "month"; } function tmpSelect YearInnerHTML(stryear) //年ドロップダウン ボックス { if (stryear.match(/D/ )!=null){alert("年の入力パラメータは、番号! ");return;} var m = (str Year) ? stryear : new Date().getFull Year(); if (m < 1000 || m > 9999) {alert("年の値が 1000 から 9999 の間にありません!" ) ;return;} var n = m - 10; if (n < 1000) n = 1000; if (n + 26 > 9999) n = 9974; <select Author=downcodes name=tmpSelect Year style='font - サイズ: 12px' " s += "onblur='document.all.tmpSelect YearLayer.style.display="none"' " s += "onchange='document.all.tmpSelect YearLayer.style.display="none ";" s += "parent.downcodesThe Year = this.value;parent.downcodesSetDay(parent.downcodesThe Year,parent.downcodesTheMonth)'>rn"; var i = n; i < n + 26; i++) { if (i == m) {selectInnerHTML += "<option Author=wayx value='" + i + "' selected>" + i + "年" + "</option>r n";} else {selectInnerHTML += "<option Author=wayx value='" + i + "'>" + i + "year" + "</option>rn";} } selectInnerHTML += " </select>"; odatelayer.tmpSelect YearLayer.innerHTML = selectInnerHTML(strMonth) //月ドロップダウン ボックス { if ( strMonth.match(/D/)!=null){alert("月の入力パラメータは数値ではありません。 ");return;} var m = (strMonth) ? strMonth : new Date().getMonth() + 1; var s = " <select Author=downcodes name=tmpSelectMonth style='font-size: 12px' " s + = "onblur='document.all.tmpSelectMonthLayer.style.display="none"' " s += "onchange='document.all.tmpSelectMonthLayer.style.display="none";" parent.downcodesTheMonth = this.value;parent.downcodesSetDay(parent.downcodesThe Year,parent.downcodesTheMonth)'>rn"; var selectInnerHTML = s; for (var i = 1; i < 13; i++) { if (i == m) {selectInnerHTML += "<option Author=wayx value='"+i+"' selected>"+i+"月"+"</option>rn";} else {selectInnerHTML += "< option Author=wayx value='"+i+"'>"+i+"month"+"</option>rn";} } selectInnerHTML += "</select>"; odatelayer.tmpSelectMonthLayer.style.display =""; odatelayer.tmpSelectMonthLayer.innerHTML = selectInnerHTML; odatelayer.tmpSelectMonth.focus(); // このレイヤーを閉じる { document.all.downcodesDateLayer.display="none" } ) //閏年かどうかを判定する { if (0==year%4&&((year%100!=0)||(year%400==0))) return true;else return false } function GetMonthCount; (year ,month) //閏年の 2 月は 29 日あります { var c=MonHead[month-1];if((month==2)&&IsPin Year(year)) c++;return c } function GetDOW(day, month,year) //特定の日の曜日を検索します { var dt=new Date(year,month-1,day).getDay()/7 } function return dt;年 { if(downcodesThe Year > 999 && downcodesThe Year <10000){downcodesThe Year--;} else{alert("年が範囲外 (1000-9999)! ");} downcodesSetDay(downcodesThe Year,downcodesTheMonth); } function downcodesNextY() //年に戻る { if(downcodesThe Year > 999 && downcodesThe Year <10000){downcodesThe Year++;} else{alert("年が範囲外です (1000-9999) ) ! ");} downcodesSetDay(downcodesThe Year,downcodesTheMonth); } function downcodesToday() //Today Button { var today; downcodesThe Year = new Date().getFull Year(); downcodesTheMonth = new Date().getMonth()+1; today =new Date().getDate(); //downcodesSetDay(downcodesThe Year,downcodesTheMonth); if(outObject){ outObject.value=downcodesThe Year + "-" + downcodesTheMonth + "-" + today } 関数downcodesPrevM () //月を進める { if(downcodesTheMonth>1){downcodesTheMonth--}else{downcodesThe Year--;downcodesTheMonth=12;} downcodesSetDay(downcodesThe Year,downcodesTheMonth) } function downcodesNextM() //月を戻す{ if(downcodesTheMonth==12){downcodesThe Year++;downcodesTheMonth=1}else{downcodesTheMonth++} downcodesSetDay(downcodesThe Year,downcodesTheMonth) } function downcodesSetDay(yy,mm) //メインの書き込みプログラム*********** * { downcodesWriteHead(yy,mm); // 現在の年と月のパブリック変数を受信値に設定します downcodesThe Year=yy; downcodesTheMonth=mm for (var i = 0; i < 39; i++){downcodesWDay[i] ]=""} ; //表示ボックスの内容をすべてクリアします。 var day1 = 1,day2=1,firstday = new Date(yy,mm-1,1).getDay();特定の月の 1 日、(i =0;i<firstday;i++)downcodesWDay[i]=GetMonthCount(mm==1?yy-1:yy,mm==1?12:mm-1)- firstday+i+1 //先月の最終日 for (i = firstday; day1 < GetMonthCount(yy,mm)+1; i++){downcodesWDay[i]=day1;day1++;} for (i=firstday+GetMonthCount(yy) ,mm);i<39; i++){downcodesWDay[i]=day2;day2++} for (i = 0; i < 39; i++) { var da = eval("odatelayer.downcodesDay"+i) //新しい月の日付と週の配置 if (downcodesWDay[i]!="") { //境界線を初期化します da.borderColorLight="#76A0CF"; da.borderColorDark="#76A0CF"; /先月の部分 { da.innerHTML ="<font style=' color: #B5C5D2;'>" + downcodesWDay[i] + "</font>"; 1) +"月" + downcodesWDay [i] + "日" da.onclick=Function("downcodesDayClick(this.innerText,-1)"); if(!outDate) da.style.backgroundColor = ((mm=) =1?yy-1:yy ) == new Date().getFull Year() && (mm==1?12:mm-1) == new Date().getMonth()+1 && ダウンコードWDay[i] = = new Date().getDate( )) ? "#E4E3F2":"#FFFFFF"; else { da.style.backgroundColor =((mm==1?yy-1:yy)==outDate.getFullyear() && (mm==1?12: mm-1)== outDate.getMonth() + 1 && downcodesWDay[i]==outDate.getDate()) "#E8F5E7" : // 日付の色を選択します (((mm= =1?yy-1:yy ) == new Date().getFull Year() && (mm==1?12:mm-1) == new Date().getMonth()+1 && ダウンコードWDay[i] = = new Date().getDate( )) ? "#E4E3F2":"#FFFFFF"); //現在のシステム時刻の色 //選択された日付を凹型で表示します if((mm==1?yy-1:yy) ==outDate.getFull Year( ) && (mm==1?12:mm-1)== outDate.getMonth() + 1 && downcodesWDay[i]==outDate.getDate()) { //da.borderColorLight=" #E4E3F2"; // da.borderColorDark="#E4E3F2"; // 日付の境界線の色を選択} } } else if (i>=firstday+GetMonthCount(yy,mm)) // 来月の部分{ da.innerHTML=" <font style= ' color: #B5C5D2;'>" + ダウンコード WDay[i] + "</font>"; da.title=(mm==12?1:mm+1) +"月" + ダウンコード WDay[i ] + "日"; da.onclick=Function("downcodesDayClick(this.innerText,1)"); if(!outDate) da.style.backgroundColor = ((mm==12?yy+1:yy) == new Date() .getFull Year() && (mm==12?1:mm+1) == new Date().getMonth()+1 && ダウンコードWDay[i] == new Date().getDate()) ? "#E4E3F2" :"#FFFFFF"; else { da.style.backgroundColor =((mm==12?yy+1:yy)==outDate.getFullyear() && (mm==12?1:mm+1) )== outDate .getMonth() + 1 && downcodesWDay[i]==outDate.getDate())? "#E8F5E7" : // 選択された日付の色 (((mm==12?yy+1:yy) == new Date() .getFull Year() && (mm==12?1:mm+1) == new Date().getMonth()+1 && ダウンコードWDay[i] == new Date().getDate()) ? "#E4E3F2" :"#FFFFFF"); //現在のシステム時刻//選択された日付を凹型で表示します if((mm==12?yy+1:yy)==outDate.getFull Year() && (mm==) 12? 1:mm+1)== outDate.getMonth() + 1 && ダウンコード WDay[i]==outDate.getDate()) { da.borderColorLight="#E4E3F2"; / / 日付の境界線の色を選択します} } } else //今月の一部{ da.innerHTML="<font style=' color: #3E5468;'>" + downcodesWDay[i] + "</FONT>"; =mm +"month" + downcodesWDay[i] + "day"; da.onclick=Function("downcodesDayClick(this.innerText,0)"); //onclick イベント処理を td に割り当てます // 現在選択されている場合date、明るい青色の背景が表示されます。現在の日付の場合は、濃い黄色の背景が表示されます。 if(!outDate) da.style.backgroundColor = (yy == new Date().getFull Year() && mm == new Date().getMonth()+1 && downcodesWDay[i] == new Date().getDate())? "#FFFFFF":"#FFFFFF"; else { da.style.backgroundColor =(yy==outDate) getFull Year() && mm== outDate.getMonth() + 1 && ダウンコードWDay[i]==outDate.getDate()) "#D5ECD2":((yy == new Date().getFull Year() && mm == new Date() .getMonth()+1 && downcodesWDay[i] == new Date().getDate())? // 前の値は現在のシステム時間です。次は今月の時刻です // 選択した日付を凹面で表示します if(yy==outDate.getFull Year() && mm== outDate.getMonth() + 1 && downcodesWDay[i]==outDate.getDate( )) { //da.borderColorLight ="#E4E3F2"; //da.borderColorDark="#E4E3F2" //日付の境界線の色を選択} } da.style.cursor="hand" da.onmouseover=Function(" this.backgroundColor='#000000' ;this.borderColorDark='#000099';this.borderColorLight='#000099';"); da.onmouseout=Function("this.bgColor='#000000';this.borderColorDark= '#9CBADE';this.borderColorLight ='#9CBADE';"); } else{da.innerHTML="";da.style.backgroundColor="";da.style.cursor="default";da.onmouseover= Function("this.backgroundColor=' #000000';this.borderColorDark='#000099';this.borderColorLight='#000099';"); da.onmouseout=Function("this.bgColor='#000000';this .borderColorDark='#9CBADE'; this.borderColorLight='#9CBADE';");} } } function downcodesDayClick(n,ex) //表示ボックスをクリックして日付を選択します、メイン入力関数***** ************* { var yy= downcodesThe Year; var mm = parseInt(downcodesTheMonth)+ex; //ex は前月と翌月の日付を選択するために使用されます。 /月を判定して対応する if(mm<1){ yy --; mm=12+mm; } else if(mm>12){ mm=mm-12; mm = "0" + mm;} if (outObject) { if ( !n) {//outObject.value=""; return;} if ( n < 10){n = "0" + n;} outObject。 value= yy + "-" + mm + "-" + n ; //注: ここで出力を希望の形式に変更できます closeLayer() } else {closeLayer();出力するものが存在しません! ");} } //--> </script> </head> <body> マウスで入力ボックスをクリックして効果を確認します<input type="text" name="d" style="width:120px ;" onclick="setday(this)"> </body> </html>