popup.js 10.2 KB
// ---------------------------------------------------
scriptName = "popupmess205b.js";
author     = "Hiyoko";
version    = "Ver2.05b 2002/12/23";//Opera7.0に対応
home       = "http://members.jcom.home.ne.jp/1633348312/";
// ---------------------------------------------------
var sep_x = 0;
var sep_y = 20;
var mess_w  = new Array();
var mess_h  = new Array();
// --------------------------------------------------- 影モードの設定 ----------------------
// alphaModeはIEでの影モードです。trueで有効、7,7は横ずれ位置、縦ずれ位置、40は透明度(小さいほど薄い0〜100)
// 影モードを無効にするには「true」の部分を「false」として下さい。
var alphaMode = new Array(true,7,7,40); //IE-only
var syadowStyleMode = true;             //影のスタイルを別指定する=true,しない=false
var syadowStyleName = "syadowstyle";    //別指定する場合のclass名
//
//  syadowStyleMode = true とした場合は、影のスタイル指定を必ず 
//  syadowStyleName で指定したclassをスタイル定義してください。
//  (もちろんalphaModeがtrueの場合のみ)
// --------------------------------------------------- 透明度変化設定 ----------------------
var alphaMotion = true; // Alpha変化モードのサポートする=true,しない=false 
var alphaStep = 10;     // 透明度変化ステップ
var alphaIntv = 50;     // 透明度変化スピード

// ---------------------------------------------------以下修正必要なし----------------------
var alphaFlag = true;   // do'nt edit
var alphaTimerID = 0;   // do'nt edit
var opacityLevel = new Array();
opacityLevel[0] = (alphaMotion)?0:100;
opacityLevel[1] = (alphaMotion)?0:alphaMode[3];
opacityLevel[2] = 0;
opacityLevel[3] = 0;
var id1,id2;
// ---------------------------------------------------
var messTimerID=0;
var disp_flg = 0;
var flg= 0;
var NN6flg = 0; // NN6対策用
var ms = 0;
var ms2= 0;
var x = 0;
var y = 0;
var winSize = new Array();
var mac = (navigator.userAgent.indexOf('Mac')>=0);
var opera = (navigator.userAgent.indexOf('Opera')>=0);
var op6 = (navigator.userAgent.indexOf('Opera 6')>=0)||(navigator.userAgent.indexOf('Opera/6')>=0);
var op7 = (navigator.userAgent.indexOf('Opera 7')>=0)||(navigator.userAgent.indexOf('Opera/7')>=0);
var ie5 = (navigator.appVersion.indexOf('MSIE 5')>=0)||(navigator.appVersion.indexOf('MSIE 6')>=0)||(navigator.appVersion.indexOf('MSIE 7')>=0||(navigator.appVersion.indexOf('MSIE 8')>=0));
var ie4 = (navigator.appVersion.indexOf('MSIE 4')>=0);
alphaMode[0] = (mac||opera)?false:alphaMode[0]; // Mac&Operaはfilterをサポートしていないので動作しません。
alphaMotion  = (mac||opera)?false:alphaMotion
// Windowサイズを取得
function getWinsize(){
   winSize[0] = ((!document.all && document.getElementById)||(document.layers)) ? window.innerWidth  : document.body.clientWidth;
   winSize[1] = ((!document.all && document.getElementById)||(document.layers)) ? window.innerHeight : document.body.clientHeight;
}

// メッセージレイヤーサイズの取得
function getLaysize(num){
   var wh = new Array();
   if (document.all && !op7){
       var thisspan = document.all("span"+num);
       wh[0] = ((ie4)||(ie5))?thisspan.offsetWidth :thisspan.style.pixelWidth;
       wh[1] = ((ie4)||(ie5))?thisspan.offsetHeight:thisspan.style.pixelHeight;
   }
   if (document.layers){
       var thisspan = eval("document.span"+num);
       wh[0] = thisspan.clip.width;
       wh[1] = thisspan.clip.height;
   }
   if ((!document.all && document.getElementById) || op7){
       var thisspan = document.getElementById("span"+num);
       wh[0] = thisspan.offsetWidth;
       wh[1] = thisspan.offsetHeight;
   }
   return wh;
}

// マウス座標位置取得
function handlerMM(e){
    x = (document.all&&!opera) ? document.body.scrollLeft+event.clientX : (op6)?event.clientX : e.pageX;
    y = (document.all&&!opera) ? document.body.scrollTop+event.clientY : (op6)?event.clientY : e.pageY;
    flg=1;
    if(disp_flg ==1){ disp_mess(ms2);}else{del_mess(ms2);}
}

// フローティングメッセージの表示
function disp_mess(ms){
   disp_flg = 1;
   if (flg==1 && document.all && !op6){
       if(ie4){
          messize = getLaysize(ms);
          mess_w[ms] = messize[0];
          mess_h[ms] = messize[1];
       }
        x =(winSize[0]<x+sep_x+mess_w[ms]+10-document.body.scrollLeft)?winSize[0]-mess_w[ms]-10+document.body.scrollLeft:x+sep_x;
        y =(winSize[1]<y+sep_y+mess_h[ms]-document.body.scrollTop)?y-mess_h[ms]-20:y+sep_y;
       var thisspan = document.all("span"+ms).style;
       thisspan.posLeft=x;
       thisspan.posTop =y;
       thisspan.pixelWidth  = mess_w[ms];
       thisspan.pixelHeight = mess_h[ms];
       thisspan.visibility="visible";
       if(alphaMode[0]&&ie5){
          thisspan = document.all("syadow"+ms).style;
          thisspan.posLeft=x+alphaMode[1];
          thisspan.posTop =y+alphaMode[2];
          thisspan.pixelWidth  = mess_w[ms];
          thisspan.pixelHeight = mess_h[ms];
          thisspan.zIndex = 90;
          thisspan.visibility="visible";
       }
       if(alphaFlag&&alphaMotion&&ie5){opacityChange(ms);}
   }
   if (flg==1 && document.layers){
        x =(winSize[0]<x+sep_x+mess_w[ms]+20-pageXOffset)?winSize[0]-mess_w[ms]-20+pageXOffset:x+sep_x;
        y =(winSize[1]<y+sep_y+mess_h[ms]-pageYOffset+15)?y-mess_h[ms]-15:y+sep_y;
       var thisspan = eval("document.span"+ms);
       thisspan.left=x;
       thisspan.top=y;
       thisspan.clip.width  = mess_w[ms];
       thisspan.clip.height = mess_h[ms];
       thisspan.visibility="visible"
   }
   if (flg==1 && !document.all && document.getElementById && !op6){
       if(NN6flg==0){ //NN6対策
           for(i=0;i<message.length;i++){
               messize = getLaysize(i);
               mess_w[i] = messize[0];
               mess_h[i] = messize[1];
           }
           NN6flg=1;
       }
        x =(winSize[0]<x+sep_x+mess_w[ms]+30-scrollX)?winSize[0]-mess_w[ms]-30+scrollX:x+sep_x;
        y =(winSize[1]<y+sep_y+mess_h[ms]-scrollY+15)?y-mess_h[ms]-20:y+sep_y;
       var thisspan = document.getElementById("span"+ms);
       thisspan.style.left=x;
       thisspan.style.top =y;
       thisspan.style.width  = mess_w[ms];
       thisspan.style.height = mess_h[ms];
       thisspan.style.visibility="visible"
       if(alphaMode[0]&&ie5){
          thisspan = document.getElementById("syadow"+ms);
          thisspan.style.left=x+alphaMode[1];
          thisspan.style.top =y+alphaMode[2];
          thisspan.style.width  = mess_w[ms];
          thisspan.style.height = mess_h[ms];
          thisspan.style.zIndex = 90;
          thisspan.style.visibility="visible";
       }
       if(alphaFlag&&alphaMotion&&ie5){opacityChange(ms);}
   }
   if (flg==1 && op6){
       if(NN6flg==0){ //上に同じくまったりと?(笑)
           for(i=0;i<message.length;i++){
               messize = getLaysize(i);
               mess_w[i] = messize[0];
               mess_h[i] = messize[1];
           }
           NN6flg=1;
       }
        x =(winSize[0]<x+sep_x+mess_w[ms]-document.body.scrollLeft)?winSize[0]-mess_w[ms]+document.body.scrollLeft:x+sep_x;
        y =(winSize[1]<y+sep_y+mess_h[ms]-document.body.scrollTop)?y-mess_h[ms]-10:y+sep_y;
       var thisspan = document.getElementById("span"+ms);
       thisspan.style.left=x;
       thisspan.style.top =y;
       thisspan.style.width  = mess_w[ms];
       thisspan.style.height = mess_h[ms];
       thisspan.style.visibility="visible"
   }
   ms2=ms;
}

// フローティングメッセージの非表示
function del_mess(ms){
    disp_flg = 0;
   if(alphaMotion&&ie5){opacityClear(ms);}
   if (document.all){
       var thisspan = document.all("span"+ms).style;
       thisspan.visibility="hidden";
       if(alphaMode[0]&&ie5){
         thisspan = document.all("syadow"+ms).style;
         thisspan.visibility="hidden";
       }
   }
   if (document.layers){
       var thisspan = eval("document.span"+ms);
       thisspan.visibility="hidden";
   }
   if (!document.all && document.getElementById){
       var thisspan = document.getElementById("span"+ms).style;
       thisspan.visibility="hidden";
       if(alphaMode[0]&&ie5){
         thisspan = document.getElementById("syadow"+ms).style;
         thisspan.visibility="hidden";
       }
   }
   ms2=ms;
}
// ---------------------------------------------------
function opacityChange(ms){
    id1 = (document.all)?document.all("span"+ms):document.getElementById("span"+ms);
    id2 = (document.all)?document.all("syadow"+ms):document.getElementById("syadow"+ms);
    opacityLevel[2] += alphaStep;
    if(opacityLevel[2]>100){opacityLevel[2]=100;alphaFlag=false;}
    opacityLevel[3] = Math.round(opacityLevel[2]*alphaMode[3]/100);
    id1.filters.Alpha.opacity=opacityLevel[2];
    id2.filters.Alpha.opacity=opacityLevel[3];
    if(alphaFlag){alphaTimerID = setTimeout("opacityChange("+ms+")",alphaIntv);}
}
function opacityClear(ms){
    id1 = (document.all)?document.all("span"+ms):document.getElementById("span"+ms);
    id2 = (document.all)?document.all("syadow"+ms):document.getElementById("syadow"+ms);
    opacityLevel[2] = 0;
    opacityLevel[3] = 0;
    id1.filters.Alpha.opacity=opacityLevel[2];
    id2.filters.Alpha.opacity=opacityLevel[3];
    clearTimeout(alphaTimerID);
    alphaFlag=true;
}

function NN_reload(){
      if (document.layers){location.reload();}else{getWinsize();}
}

// メッセージデーターの先読み
for (i=0;i<message.length;i++){
    document.write("<div id='span"+i+"' class='spanstyle' style='position:absolute;filter:Alpha(opacity="+opacityLevel[0]+")'");
    if(ie4){document.writeln(" style='width:10px;'><table><tr><td nowrap");}
    document.write(">");
	document.writeln(message[i]);
    if(ie4){document.writeln("</td></tr></table>");}
    document.writeln("</div>");
    
    if(alphaMode[0]&&ie5){
        syadowcss = (syadowStyleMode)?syadowStyleName:"spanstyle";
        document.write("<div id='syadow"+i+"' class='"+syadowcss+"' style='position:absolute;filter:Alpha(opacity="+opacityLevel[1]+");'>");
        document.writeln(message[i]);
        document.writeln("</div>");
    }
    var messize = new Array();
    if(document.all || document.layers){
       messize = getLaysize(i);
       mess_w[i] = messize[0];
       mess_h[i] = messize[1];
    }
}

// マウスイベント設定
if (document.layers){
    document.captureEvents(Event.MOUSEMOVE);
}
if (!document.all && document.getElementById && !op6 && !op7){
    window.onmousemove = handlerMM;
    window.captureEvents(Event.MOUSEMOVE);
}else{
    document.onmousemove = handlerMM;
}
window.onresize = NN_reload;
getWinsize();