HOME  >>>  HTML整理ノート  >>> DHTML --  基本編  応用編

ページ内の左クリック・メニュー

ページ内の任意の位置を左クリックすればメニューが開き、このページをカスタマイズできます。

 

 

 

Sample Source......................................................................>>>

*本題の趣旨から外れるので、時計を表示するScriptは省略しました(WWWプラウザのHTMLソースで見て下さい)

<style TYPE="text/css"><!--
  .over {width:150;color:white;font:12pt;cursor:hand;}
  .open {width:150;color:blue;font:12pt;border:thin solid maroon;}
  .submenu {position:absolute;width:250;background-color:#dcdcdc;padding:5px;
         color:navy;font:10pt;display:none;}
  select {width:120px;margin-left:20px;}
--></style>

<script language="JavaScript"><!--
  var flg1 = true;
  var flg2 = true;
  var flg3 = true;
  var ac_obj;        //現在のメニューを記憶しておく変数
  function SubMenu(obj,sub,t){    //メニュー選択時
   if(flg3 == true){obj.className = "open";ac_obj = obj;
    //クリック位置が右端に近い場合、サブメニューを左側に出す
    if(dv.style.pixelLeft < document.body.clientWidth - 135 -200){
         sub.style.pixelLeft = dv.style.pixelLeft + 135;
    }else{sub.style.pixelLeft = dv.style.pixelLeft - 200;}
    sub.style.pixelTop = dv.style.pixelTop + t;
    sub.style.display = "block";   //サブメニューを表示
    flg1 = true;
    flg2 = false;
    flg3 = false;
    window.event.cancelBubble=true;
   }
  }

  var timerID;
  function SubOK(sub){     //サブメニュー内のボタンが押された場合
    if(sub == sub1)boy.style.backgroundColor = bgsel.value;
    if(sub == sub2)boy.style.color = cosel.value;
    if(sub == sub3)boy.style.fontFamily = fnsel.value;
    if(sub == sub4)boy.style.fontSize = fssel.value;
    if(sub == sub5)PositionSet();

    ac_obj.className = "menu";
    sub.style.display = "none";
    flg1 = false;
    flg3 = true;
    window.event.cancelBubble=true;
  }
//--></script>

<script FOR="document" EVENT="onclick" language="JavaScript"><!--
 if(flg1 == true){
  if(flg2 == true) {
    //メニューがウィンドウの右端を超える場合は、左側に出す
    if(event.x < document.body.clientWidth - 135){
       dv.style.pixelLeft = event.x;    //現在のMouseのX座標を取得
    }else{dv.style.pixelLeft = event.x - 135;}
    //メニューがウィンドウの下端を超える場合は、上側に出す
    if(event.y < document.body.clientHeight - 110){
       dv.style.pixelTop = event.y;     //現在のMouseのy座標を取得
    }else{dv.style.pixelTop = event.y - 110;}
    dv.style.visibility = "visible";
    flg1 = false;
  }
 } else{
    dv.style.visibility = "hidden";
    flg1 = true;
    flg2 = true;
 }
//--></script>
</head>

<body id="boy">

<div id="dv"style="position:absolute;width:135;background-color:silver;
         color:navy;font:14px;visibility:hidden;">
 <p><span class="menu" onmouseover="if(this.className != 'open')this.className='over'"
     onmouseout="if(this.className != 'open')this.className='menu'"
     onclick="SubMenu(this,sub1,0);">背景色変更 </span><br>
 <span class="menu" onmouseover="if(this.className != 'open')this.className='over'"
     onmouseout="if(this.className != 'open')this.className='menu'"
     onclick="SubMenu(this,sub2,20);">文字色変更</span><br>
 <span class="menu" onmouseover="if(this.className != 'open')this.className='over'"
     onmouseout="if(this.className != 'open')this.className='menu'"
     onclick="SubMenu(this,sub3,40);">使用フォント変更</span><br>
 <span class="menu" onmouseover="if(this.className != 'open')this.className='over'"
     onmouseout="if(this.className != 'open')this.className='menu'"
     onclick="SubMenu(this,sub4,60);">フォントサイズ変更</span><br>
 <span class="menu" onmouseover="if(this.className != 'open')this.className='over'"
     onmouseout="if(this.className != 'open')this.className='menu'"
     onclick="SubMenu(this,sub5,80);">時計</span> </p>
</div>

<div id="sub1" class="submenu">
 <p>このページの背景色を選択してネ<br>
  <select id="bgsel" size="1">
    <option value="white" selected>白色 </option>
    <option value="azure">水色 </option>
    <option value="lightsteelblue">薄青色</option>
    <option value="lightgreen">緑色</option>
    <option value="lightyellow">黄色</option>
    <option value="tan">茶色</option>
    <option value="peachpuff">オレンジ色</option>
    <option value="mistyrose">ピンク色</option>
    <option value="violet">紫色</option>
    <option value="lightgrey">薄グレー色</option>
  </select>&nbsp;&nbsp; &nbsp;&nbsp; <button onclick="SubOK(sub1);"><OK></button></p>
</div>

・・・(途中省略)

<div id="sub5" class="submenu">
  <p>ページ下右端に<br>
  <button id="bt_clock" onclick="SubOK(sub5);">
    時計を表示</button></p>
</div>


end(最終更新:12/11/18)