忍者ブログ
管理人の妄言たれながし個人memo
2024-051 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 prev 04 next 06
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ず~~っと悩んでたメッセージスクリプトの不具合を修正。
↓これっす。
バースディメッセージスクリプト(別館使用中)

~~(変更箇所)~~

myHit = 0;
myLastCnt = myTbl.length / 3:
myFlg=1;

myCnt = 0;
myDspFlg = 0;

function myFunc(){
  myHit = 0;
  myD = new Date();
  myMonth = myD.getMonth()+1;
  myDate = myD.getDate();

~~(ここまで)~~

↑のリンク先では日付変更とほぼ同時にスタートorエンドになる(筈)と言ってました。
(筈)とついてるのは、エントリ時点でなってないの知ってたから。orz
じゃあ、なぜ「なってない」と言わなかったかと言えば、当初は出来てたから!
だからずっと、「なんでできなくなったんじゃ~~」と悩んでた。
で、結局何が悪かったって、myHit(表示するメッセージをカウントする変数)の定義位置が悪かった。
(最初の頃問題なかったのは、メッセージを二つまで表示できるように変更する以前はなかった変数だったから)
グローバル変数にしてるからカウント数がリセットされないんじゃ~~。
PR

なんかログインしたはいいがめんどくさくなってきたので、scriptメモでお茶濁し。
別館で使用中のバースデイメッセージのscript。
この間のラビので一周したはずなのでネタばらし。
(まあ当日にあたらないと見られないため、見たことない人多数かと思うが…)
今回はちと長め。


<SCRIPT language="JavaScript">
<!--
//birthday message;(とりあえず4人分+1だけ抜粋)
myTbl = new Array(
2, 20, "Happy birthday to Lenalee!",
6, 6, "Happy birthday to Kanda!",
8, 10, "Happy birthday to Lavi!",
12, 25, "Happy birthday to Allen!",
12, 25, "Merry Christmas!"
);
//JavaScriptでは2次元以上の配列がないので、
//1次元の配列を3要素で1レコードとみなしている。

myHit = 0;
myLastCnt = myTbl.length / 3;
myFlg=1;

myCnt = 0;
myDspFlg = 0;

function myFunc(){
  myD = new Date();   //今日の日付の取得。
  myMonth = myD.getMonth()+1;
  myDate = myD.getDate();

  for(i=0; i<myLastCnt; i++){
    if (myTbl[i*3] == myMonth && myTbl[i*3+1] == myDate){
      if (myHit==0) {
        myMsg1 = myTbl[i*3+2];
        myHit=1;
      } else if (myHit==1) {
        myMsg2 = myTbl[i*3+2];
        myHit=2;
      }
    }
  }
  if (myHit==0) myMsg1="";
  //このブロックでは日付と一致する配列のメッセージを取得。

  if (myFlg==1) {
    myDisp(myMsg1);
  } else if (myFlg==2) {
    myDisp(myMsg2);
  }
}

function myDisp(myMsg) {  
  if (myDspFlg == 0){
    document.myForm.myFormMes.value = myMsg.substring(0, myCnt);
    if (myCnt == myMsg.length){
      myCnt = 0;
      myDspFlg = 1;
    }else{
      myCnt +=1;
    }
  //メッセージが1文字ずつ増えていく表示

  }else if (myDspFlg == 1){
    document.myForm.myFormMes.value="";
    myDspFlg = 2;
  //点滅表示のうち、メッセージが消える部分

  }else{
    document.myForm.myFormMes.value = myMsg;
    myCnt ++;
    if (myCnt == 5){
      myDspFlg = 0;
      myCnt = 0;
      //5回点滅したら始めに戻る。
      if (myFlg==1 && myHit==2) {
        myFlg=2;
      } else if (myFlg==2) {
        myFlg=1;
      }
    }else{
      myDspFlg = 1;
    }
  }
}
//--></SCRIPT>

//HTMLでの記述
<FORM name="myForm">
<INPUT type="text" size="27" name="myFormMes" readonly>
</FORM>
<SCRIPT language="JavaScript">
<!--
setInterval("myFunc()", 200);
//-->
</SCRIPT>



スタイルシートでボーダーを見えなくしてるので普段はわかりませんが、実はメッセージを表示させるフォームは最初から存在していて、常にこのメッセージスクリプトを実行しています。
JavaScriptは見る人のブラウザが実行するので、本当はこういうスクリプトは組まないにこしたこたないんですが、まあ今時これくらいなら負担にはならんだろうと…。
そして常(というか、正確には0.5秒ごと)に実行してるのはメッセージを繰り返し実行するためと、日付変更とほぼ同時にスタートorエンドになるよう(なってる筈)にするため。

ちなみに青字部分は、表示するメッセージが2つある場合、交互に表示させるための指示。
今回のメッセージリストで言えば、12/25のアレンの誕生日とクリスマスのメッセージ。
でも実際のところ、去年のクリスマスには修正が間に合わず(かなり直前で直そうと思い立ったから)、正月1/1のミランダの誕生日からの変更でした。

日記書こうとログインしたはいいが、眠くなってきて何書こうとしたかも忘れてもた…orz
つーワケでネタもないのでScriptメモ。

アレパラに合わせて別館で使っていたカウントダウンのScript。

<SCRIPT language="JavaScript">
<!--
myIvent=new Date(2007, 1, 18);     //イベントの日付を取得---(*)
myToday=new Date();                       //今日の日付を取得
myYear=myToday.getYear();
myMonth=myToday.getMonth();
myDay=myToday.getDate();
if(myYear<2000) myYear=myYear+1900;
myToday=new Date(myYear, myMonth, myDay);
mySec=myIvent.getTime()-myToday.getTime();
       //イベント日から今日を引いた分の秒数
myDays=Math.floor(mySec/(1000*60*60*24));
document.write("あと<B style='color: #80e040'>"+myDays+"</B>日");
//-->
</SCRIPT>

今回は直接HTMLファイルに書きましたが、問題は下線部分。例によって即興で手抜きスクリプト書いてたので、イベント5日前まで下線部分がありませんでした。
このif文は何してるかと言うと、年が2007で取得されているか否かの判断。ブラウザによっては107年になってるものがあるのです。その場合1900足して2007年にしてるわけ。
これを怠ると、107で取得するブラウザでは、2007年○月×日-107年△月□日で計算し―――日数に換算して実に69000以上にもなってしまうのです。
そして、私はそれを知っていながら放置してました…(苦笑
だって、殆どのブラウザは2007かな~って…。
で5日前あたりに年のためNNで見てみたら69000↑って表示されてて…。
つーか秒数計算の時点でオーバーフローってないんだな…JavaScript……。

(*)あと、イベントは2/18でしたが、プログラムでは2007、1、18で引数をとってます。これはプログラム上月のカウントが0から始まるから。

今日もネタが特にないので自分用メモ。
別館で1週間だけ使ってた、クリックで変わっていく画像のScript(やりかたは①のと大して変わってません)


<SCRIPT language="JavaScript">
<!--
myCnt=0;     //画像変更用のフラグ

//画像読み込み
myImg0=new Image();
myImg0.src="./2.png";
myImg1=new Image();
myImg1.src="./3.png";
myImg2=new Image();
myImg2.src="./4.png";

function myClick(){
 if(myCnt==0){
  document.myFormImg.src=myImg1.src; ----(
  myCnt=1;
 }else if(myCnt==1){
  document.myFormImg.src=myImg2.src;
  myCnt=2;
 }else{
  document.myFormImg.src=myImg0.src;
  myCnt=0;
 }
}
//--></SCRIPT>

//HTMLの記述
<IMG name="myFormImg" src="./2.png" onclick="myClick()" oncontextmenu="return false" style="cursor: ne-resize;">


これアップしたとき最初だけ2回クリック(ダブルクリックではなく)しないと画像が変わらないと注意書きをつけてました。
実はアップしたその夜、布団入った途端に原因に気づいたんですが、眠かったのと、どうせ1週間だからいいか~と放置してました^^;

ちなみに理由は最初の画像変更()で、2.png(=myImg0)に変更するようにしていたから。
つまり、最初にページ読み込んだ時点で2.pngが表示されてるのに、クリックで2.pngに変更するようにしていたので変わらなかったんですな。

アホすぎーorz

blog説明通り、自分用memoにエントリ~。


<SCRIPT language="JavaScript">
<!--
//マウスが外れた時の画像を読み込み。
myImgOut=new Image();
myImgOut.src=http://www.●●●.ne.jp/junkshop/10000hit_1.jpg;
//マウスが乗ったときの画像を読み込み。
myImgOver=new Image();
myImgOver.src="http://www.●●●.ne.jp/junkshop/10000hit_2.jpg";

function myMouseOut(){
 document.myFormImg.src=myImgOut.src;
}
function myMouseOver(){
 document.myFormImg.src=myImgOver.src;
}
//--></SCRIPT>

//html内の記述
<IMG name="myFormImg" src="http://www.●●●.ne.jp/junkshop/10000hit_1.jpg" onMouseOver="myMouseOver()" onMouseOut="myMouseOut()">


別館拍手で使った、オンマウスで画像が変わるScriptですた。

カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新CM
[10/17 KARIKO]
[10/26 みう]
[06/05 sa-na]
[06/02 みう]
[02/15 遠野]
プロフィール
管理人:
河口和乃
職業:
腐女子(職業?)
ゲーム系同人やってるオタ。でも新しい波についていけない老人。しかし最近は年甲斐もなく某少年誌に傾倒してるため、口を開けばそっちの話ばっかり。年考えろ。(死
バーコード
ブログ内検索
アクセス解析
"河口和乃" WROTE ALL ARTICLES.
PRODUCED BY SHINOBI.JP @ SAMURAI FACTORY INC.
忍者ブログ [PR]