アプリ版:「スタンプのみでお礼する」機能のリリースについて

ドロップダウンメニュー(親メニューだけgif画像で子メニューはcssで表示)を作りたいと思っています。

javascript又はCSS+htmlを使ってドロップダウンメニューを作りたいと良いサンプルを探しております。
親メニューは画像で、子メニューはcssで表示させたいと思います。
サイドメニューとして、縦並びに配置して、オンマウスで右側に子メニューのリストが展開するように。

ネット上でサンプルを探しているのですが、全部cssで展開だったり、全部画像で展開だったりして、
親メニューだけ画像で、子メニューはcssで表示というのがなかなかみつかりません。。

超超初心者の私にどなたかご教授願えないでしょうか。

よろしくお願い致します。m(_ _)m
 

A 回答 (3件)

続き


CanvasMenu.jsは

 var menuitem = [
  {src:"/image/アイテム1画像.jpg",w:200,h:100,x:0,y:0},
  {src:"/image/アイテム2画像.jpg",w:200,h:100,x:0,y:100},
  {src:"/image/アイテム3画像.jpg",w:200,h:100,x:0,y:200},
  {src:"/image/アイテム4画像.jpg",w:200,h:100,x:0,y:300},
  {src:"/image/アイテム5画像.jpg",w:200,h:100,x:0,y:400}
 ]

 var count = 0;

 var canvas = document.getElementById("menumap");
 /*@cc_on @if (@_jscript_version <= 5.8)
 canvas = G_vmlCanvasManager.initElement(canvas);
 /*@end@*/
 var ctx = canvas.getContext('2d');

 for(var i=0;i<menuitem.length;i++){
  var img= new Image();
  img.src = menuitem[i].src + "?" + new Date().getTime();
  img.onload=(function(obj){
   return function(event){
   ctx.drawImage(this,obj.x,obj.y,obj.w,obj.h);
   }
  })(menuitem[i]);
 }

 canvas.onmousemove = function(e){
  var submenu = [];
  var target = /*@cc_on @if (@_jscript_version <= 5.8)
  document.getElementById("menumap");@else@*/e.target;/*@end@*/
  var rect = target.getBoundingClientRect();
  var x = (e?e.clientX:event.clientX);
  var y = (e?e.clientY:event.clientY);
  var mouseX = x - rect.left;
  var mouseY = y - rect.top;
  for(var i=0;i<menuitem.length;i++){
   if((menuitem[i].x < mouseX &&
    mouseX < (menuitem[i].x + menuitem[i].w))
   && (menuitem[i].y < mouseY &&
    mouseY < (menuitem[i].y + menuitem[i].h))
   ){
   submenu = /*@if (@_jscript_version >= 5.8)
    document.querySelectorAll("div.main div.right ul");
    @elif (@_jscript_version < 5.8)
    document.getElementById("submenu").getElementsByTagName("UL");@else@*/
    document.querySelectorAll("div.main div.right ul");/*@end@*/
   submenu[i].style.display = "block";
   for(var j=0;j<submenu.length;j++)
    if(!(i==j)) submenu[j].style.display = "none";
   }
  }
 }

※おやっ、IE8でも-ms-column-count:2;とか-msbreak-after: column;
がきかないぞ!
まあこの辺はfloat使って配置するように変えればいいだけだから..。
    • good
    • 0
この回答へのお礼

初めて見る方法で目からウロコでした。

どうもありがとうございます。m(_ _)m

お礼日時:2010/12/02 22:50

javascriptで、左側の親メニューに画像を描画し、


右側のリストはCSSで表示・非表示を制御した。

HTMLとCSSは、
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Button Canvas By HTML5</title>
<style type="text/css">
div.main {
 -moz-column-count: 2;
 -webkit-column-count: 2;
 -o-column-count: 2;
 -ms-column-count: 2;
 text-align:center;margin:10px auto 10px;
}
div.main div.left{
break-after: column;
 -moz-break-after: column;
 -webkit-break-after: column;
 -o-break-after: column;
 -msbreak-after: column;
}
div.main div.right ul{
 display:none;
}
</style>
<!--[if lt IE 9]><script type="text/javascript" src="/jslib/excanvas.js"></script><![endif]-->
</head>
<body>
<h2 style="text-align:center">Button Canvas By HTML5 or IE(excanvas.js)</h2>
<div class="main">
 <div class="left">
  <canvas id="menumap" width="200" height="500" style="border:1px solid black"></canvas>
 </div>
 <div class="right" id="submenu">
  <ul><li>1-1</li><li>1-2</li><li>1-3</li></ul>
  <ul><li>2-1</li><li>2-2</li><li>2-3</li></ul>
  <ul><li>3-1</li><li>3-2</li><li>3-3</li></ul>
  <ul><li>4-1</li><li>4-2</li><li>4-3</li></ul>
  <ul><li>5-1</li><li>5-2</li><li>5-3</li></ul>
 </div>
</div>
<script type="text/javascript" src="CanvasMenu.js"></script>
</body>
</html>

※excanvas.jsは↓
http://code.google.com/p/flot/source/browse/trun …
から拾ってくる。
※CanvasMenu.js は続く..
    • good
    • 0

>親メニューだけgif画像で子メニューはcssで表示


画像(=表示内容)、CSS(=表示指定の技法)なので、並列されても意味がよくわかりません。
「CSSで親メニューに画像を指定」とか「ドロップダウンをCSSで実現」とかならわかりますが…

想像するところ、親メニューだけは画像ボタンなどで、それ以降のメニューはテキストのみという意味でしょうか?
javascriptへのご質問なので、ドロップダウンの機能はjavascriptで実現しているってことでも良いのでしょうか?

それでよいのなら…
テキストベースで機能するメニューで適当なものが見つかれば可能だと想像されます。

1)(画像が共通のものを使用できる場合)
 親メニューだけCSSで背景画像を指定しておく。
 (個別の場合でも、個々に指定するという方法もあります)
 
2)(画像が個別の場合)
 大抵のメニューが
  <li><a>text</a></li>
 のような構成となっているので、
  <li><a><img src="xxx" alt=""></a></li>
 のように、HTMLでイメージを表示しておく。(親メニューのみ)

のような方法でいけるのではないでしょうか。


スクリプトを使わずにCSSだけで全て実現というのだと、方法が変わってくるかも…(すぐに思いつかない)
    • good
    • 0
この回答へのお礼

とても参考になりました。

どうもありがとうございます。m(_ _)m

お礼日時:2010/12/02 22:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!