質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3163閲覧

動きのある固定グローバルナビゲーションの作成について

MAYAKO

総合スコア30

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

2クリップ

投稿2015/04/06 07:59

編集2015/04/07 07:31

MAYAKOです。
teratailユーザーの皆様、お世話になっております。

本日は、動きのあるグローバルナビゲーションを作成するにはどうすればよいかについて、質問させていただきます。
画像の通り、タップしたり、クリックするとメニューバーが展開され、それぞれのボタンが表示されるようにしたいのですが、どのようにCSSやJavascript(jQueryのコード)を記述すればよいのか思いつきません。

グローバルナビを固定するのはposition:fixedなどを使えばなんとかなるかな…というところまで気づいたのですが、そこから先が検討がつかず困っています。

このようなグローバルナビゲーションの作成に心当たりのあるユーザー様がいらっしゃいましたら、お知恵をお貸しいただければと思います。
それでは、よろしくお願いいたします。

![イメージ説明]WIDTH:600

追記:もうお一方以上回答を募ります。
できれば、CSSのコードも簡易に記述して画像と似たようなナビのコードを示していただけると嬉しいです。
週末まで何もなければ、最初にご回答いただいている方をベストアンサーとして回答を〆させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そらで書ける範囲だとこれぐらいですかね。
細かい位置や動きなどは調整してみてください。

lang

1<html> 2<head> 3<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script> 4<script> 5var flg = false; 6$(document).ready(function() { 7 $('#menu').click(function() { 8 if (flg == false) { 9 $('#menus').css('visibility','visible'); 10 $('#menu_a').animate({marginLeft:"100px",top:"-50px"}, 1500); 11 $('#menu_b').animate({marginLeft:"200px"}, 1500); 12 $('#menu_c').animate({marginLeft:"300px",top:"100px"}, 1000) 13 .animate({marginLeft:"200px",top:"150px"}, 500); 14 flg = true; 15 } 16 else { 17 18 $('#menu_a').animate({marginLeft:"0px",top:"0px"}, 0); 19 $('#menu_b').animate({marginLeft:"0px"}, 0); 20 $('#menu_c').animate({marginLeft:"0px",top:"0px"}, 0); 21 $('#menus').css('visibility','hidden'); 22 flg = false; 23 24 } 25 }); 26}); 27</script> 28</head> 29<body> 30 <div id="menu_box" style="position:fixed;top:100px;"> 31 <a id="menu">Menu</a> 32 <div id="menus" style="visibility:hidden;position:relative;"> 33 <a href="#aa" id="menu_a" style="position:absolute;"> 34 aa 35 </a> 36 <a href="#bb" id="menu_b" style="position:absolute;"> 37 vv 38 </a> 39 <a href="#cc" id="menu_c" style="position:absolute;"> 40 cc 41 </a> 42 </div> 43 </div> 44 <div style="height:1000px; width:100%;"> 45 <div style="margin: 0 auto; text-align:center;"> 46 </div> 47 </div> 48</body> 49</html>

追記します。先ほど操作をあやまって空の回答をしてしまいました、すみません。
var num がメニューの数を表しており、円周上になるように調整してみました。あとの細かい調整はしてみてください。

lang

1<html> 2<head> 3<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script> 4<script> 5var flg = false; 6var num = 5; 7$(document).ready(function() { 8 $('#menu').click(function() { 9 if (flg == false) { 10 $('#menus').css('visibility','visible'); 11 var obj_rad = Math.ceil(180 / num); 12 var left = 0; 13 var top = 0; 14 var origin = -80; 15 for (var i = 0; i < num; i++) { 16 left = Math.cos((origin + (obj_rad * i)) * (Math.PI / 180)) * 100; 17 if (left < 0) left = 10; 18 19 top = Math.sin((origin + (obj_rad * i)) * (Math.PI / 180)) * 100; 20 $('#menu_'+i).animate({marginLeft:left+"px",top:top+"px"}, 1500); 21 } 22 23 flg = true; 24 } 25 else { 26 for (var i = 0; i < num; i++) { 27 $('#menu_'+i).animate({marginLeft:"0px",top:"0px"}, 0); 28 } 29 $('#menus').css('visibility','hidden'); 30 flg = false; 31 32 } 33 }); 34}); 35</script> 36</head> 37<body> 38 <div id="menu_box" style="position:fixed;top:100px;"> 39 <a id="menu">Menu</a> 40 <div id="menus" style="visibility:hidden;position:relative;"> 41 <a href="#aa" id="menu_0" style="position:absolute;"> 42 aa 43 </a> 44 <a href="#bb" id="menu_1" style="position:absolute;"> 45 bb 46 </a> 47 <a href="#cc" id="menu_2" style="position:absolute;"> 48 cc 49 </a> 50 <a href="#dd" id="menu_3" style="position:absolute;"> 51 dd 52 </a> 53 <a href="#ee" id="menu_4" style="position:absolute;"> 54 ee 55 </a> 56 </div> 57 </div> 58 <div style="height:1000px; width:100%;"> 59 <div style="margin: 0 auto; text-align:center;"> 60 </div> 61 </div> 62</body> 63</html>

投稿2015/04/06 08:53

編集2015/04/07 06:58
kiri

総合スコア74

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MAYAKO

2015/04/07 01:34

kiri様 ご回答いただきありがとうございます。 先ほどコードを参考にしてHTMLファイルを新規作成し、ブラウザで表示してみました。 あとはCSSで見た目を整えるだけみたいですね。 ただ、こちらのコードでは、メニューの中身をいくら増やしても問題なく、円状のメニューボタンを中心にその外周に円周上にメニューが広がるようになっているのでしょうか? そのあたりは手動で計算して調整をしていくしかないのでしょうか?
kiri

2015/04/07 06:59

増やすことには対応していなかったので、回答に追記をいたしました。 ご確認ください。円周上の計算に誤りがあるかもしれないですが、調整してみてください。
MAYAKO

2015/04/07 07:12

kiri様 一瞬、私のようなIT初級者には見えないコードで打ってあるのかと思いましたが、そんな判定ができるコードはさすがにないですよね。 わざわざ追記していただきありがとうございます!理数系が苦手なので苦戦しそうですが、調整を頑張ります。 今週末にはベストアンサーを決めさせていただくので、もしkiri様しか回答がなかった場合やいただいた回答が求めるものと違った場合は、ぜひともkiri様の回答をベストアンサーとして選ばせていただきます。 どうぞよろしくお願いいたします。
kiri

2015/04/07 07:19

MAYAKO様 フォローまでしてくださってありがとうございます!(笑) この値の意味がわからない ということであれば、ご質問ください。 ちなみにvar origin = -80;は一番最初を-90度からにすると、menuの真上に表示されてしまって、見栄えが悪いかと思い少しずらして、-80度の位置ということで指定しています。 私も初めて実装いたしましたので、 他の方がどういう風に実装されるか気になりますので楽しみに待ちたいと思います。
MAYAKO

2015/04/10 00:50

kiri様 お返事が遅れて申し訳ありません。 週末になりましたので、約束通りベストアンサーとしてkiri様の回答を選ばせていただきます。 初発の回答に加え、コメント欄からの質問にも細かく対応していただき、ありがとうございます! フォローと言いますか、マウスでドラッグして文字色を反転させてもコードが出てこなかったので、そこで気づきましたね(笑) あれから調べましたが、originは原点という意味なんですね。 これは原点の0をもとに、円周率で割って角度の調整をすることまでは理解できたのですが、なぜ-の値から始まることになっているのでしょうか? もし、余裕があればお答えいただけるとありがたいです。
kiri

2015/04/10 01:06

ベストアンサーに選んでいただき、ありがとうございました。 下記について回答いたします。 >なぜ-の値から始まることになっているのでしょうか? おそらく数学では上がプラスだからということだと思うのですが、 コンピュータの世界(?)では、上がマイナスで下がプラスになるからです。 明確な理由があった気がするのですが、(たしか画面に関係していた気が。。) 忘れてしまいました。 なので、menuをx,y座標0,0として、そこから始まりの角度を入力しています。 上記でご理解いただけましたでしょうか?
MAYAKO

2015/04/10 06:02

kiri様 お答えいただきありがとうございます。 そういえば、CSS3でtext-shadowやbox-shadowの設定をするときに、 左上に影を設定するときはなぜか-(マイナス)の値を当てていたことを思い出しました。 おそらく、そのことに関しても今回のルールが関係していたのですね。 画面に関係しているとのことが気にかかるので、私の方でももっと調べてみます。 +αの質問でしたが、丁寧にご回答いただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問