JavaScript、初心者のものです。
今回、スマホサイトでjQueryのアコーディオンメニュー(ページ内リンク)を使用しているのですが、ヘッダー(ナビ)部分を固定にしています。
現状ではクリックするとメニューはうまく開くのですが、各項目をクリックすると、リンク箇所にリンクはされるのですが、メニューが開いたままになってしまいます。
メニューボタンをクリックするとメニューは閉じます。
これを各項目をクリックした際にメニューが自動で閉じるのにはどうすればよいのでしょうか?
お手数ですが、ご教示お願いします。
(※ヘッダー部分を固定にする前は、きちんと閉じていました。)
以下ソースを載せておきます。
【JS】
$(function(){
$("#toggle").on("click", function() {
$("#mainnavi").slideToggle();
});
});
$(function(){
$("#mainnavi ul li p, #sidenavi ul li p").click(function(){
$(this).next("ul").slideToggle();
$(this).children("span").toggleClass("open");
});
});
【HTML】
<header>
<div id="header" class="clearfix">
<div class="container clearfix">
<div class="float_left_head">
<h1></h1>
<div class="header_logo"><a href="./"><img src="img/logo_pc.png" alt="" class="img_change img-responsive"></a></div>
</div>
<ul class="header_contact">
<li><img src="img/tell_pc.png" alt=""></li>
<li id="toggle"><img src="img/toggle.png" alt="" width="40" height="40"></li>
</ul>
</div>
</div>
<!-- mainnavi -->
<nav id="mainnavi">
<div class="container">
<ul>
<li class="scroll"><a href="#about">ああああ</a></li>
<li class="scroll"><a href="#flow">ああああ</a></li>
<li class="scroll"><a href="#feature">ああああ</a></li>
<li class="scroll"><a href="#results">ああああ</a></li>
<li class="scroll"><a href="#voice">ああああ</a></li>
<li class="scroll"><a href="#faq">ああああ</a></li>
<li class="scroll"><a href="#intro">ああああ</a></li>
</ul>
</div>
</nav>
</header>
【CSS】
header{
position: fixed;
left: 0px;
top: 0px;
right: 0px;
z-index: 999;
height: 80px;
}
No.4ベストアンサー
- 回答日時:
確認しました。
common.jsの46行目から51行目の
$(function(){
$(".scroll a").click(function(){
$('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing');
return false;
})
});
これが犯人な気がします。
;が足りないのと、移動先の取得に不備があるので、スマホのブラウザだと動かなくなる。。。おそらく
$(function(){
$('.scroll a[href^=#]').click(function() {
// アンカーの値取得
var href= $(this).attr("href");
// 移動先を取得
var target = $(href == "#" || href == "" ? 'html' : href);
// 移動先を数値で取得
var position = target.offset().top;
// スムーススクロール
$('body,html').animate({scrollTop:position}, 'slow', 'swing');
return false;
});
});
これに書き換えて、ダメだったらお手上げです。
一応、この違いで私もサンプルファイル作ってテストしてみたのですが、
前者のソースだとPC画面からは動くけど、スマホだとダメでした。
ただ怖いので、書き換え前のファイルはバックアップとってからためしてください。
ありがとうございます!
確認いたしました。
書き換えましたが、ダメでした、、、。
>これに書き換えて、ダメだったらお手上げです。
承知いたしました。
サンプルファイルまで作っていただき、
確認していただいて本当に感謝しております。
No.3
- 回答日時:
>(※ヘッダー部分を固定にする前は、きちんと閉じていました。
)これ見落としてました。
ではもともとは<a href="#●●></a>クリックしたら、#mainnaviは閉じていたってことですよね?
cssでヘッダーを固定したくらいでjsの動きがおかしくなるって、変ですね。
HTMLからjQueryで指定していた、クラスやID、ソースを削除しない限りそんなことはないのですが。
ただ、質問に書いてもらっているjQueryには<a href="#●●></a>クリックしたら、#mainnaviを閉じるっていうような内容のソースがないので、ほかにjqueryありますか?
>.scroll aの#で始まるリンクが飛ばなくなってしまいました。
あとaのサイト内リンクが利かなくなったのも変です。そんなことは指示していませんし。
何かが悪さしている感じ。
あとjqueryのバージョンが古い場合もあるので、バージョンによってはtouchstartは微妙かもなので、その場合はtouchstartは削除してください。
ちなみに、サイト内リンク<a href="#●●></a>をクリックしたときに、スムーススクロールで移動してますか?
もしそうならそのあたりもjsが絡んできているので、どんなソースで書いているのか気になりますね。
もともとのヘッダーを固定する前は動いていたのなら、一度修正前の状態に戻して、ヘッダーの固定の際に余計なものを消していないか再確認したほうがよいかもしれません。
頑張ってください。
ご返信ありがとうございます。
>ではもともとは<a href="#●●></a>クリックしたら、#mainnaviは閉じていたってことですよね?
はい、そうなんです。
>ちなみに、サイト内リンク<a href="#●●></a>をクリックしたときに、スムーススクロールで移動してますか?
はい、もともとはスムーススクロールで移動していました。
実はこちらレスポンシブで制作しているのですが、(お伝えしておらず、申し訳ないです。)
CSSを見たところ、PCで見たときは#mainnaviにdisplay: block;、スマホで見たときは#mainnaviにdisplay: none;の指定を入れております。こちらが関係しているような気がします、、
上記説明だけでは、わかりずらいかもしれないので、よろしければ以下URLの実際のサイトをご覧ください。
http://www.gr-i.jp/gakukansetsu/
サイトをPCで幅を狭くしてスマホと同じ幅にすると、頂いたソースの設置によって動きがばっちりなのですが、実際にスマホ(iphone、android共に)で見ると、リンクに飛びません。
もしアドバイス頂けることございましたら、大変助かります。
こちらでも引き続き、検証してみます。
本当にありがとうございます。
No.2
- 回答日時:
#toggleをクリックで#mainnaviが開いたり閉じたりっていう挙動で合ってますか?
で、それを#toggleクリック以外で、<li class="scroll"><a href="#●●●">●●●</a></li>クリック時もとじるようにしたい。という理解でいいですかね?
$(function(){
$(".scroll a[href^=#]").on("click touchstart", function(){
if($("#mainnavi").css({"display" : "block"})){
$("#mainnavi").slideUp();
}
});
});
【説明】
.scroll aの#で始まるリンクを、クリックもしくはスマホサイトなのでタッチすると、
#mainnaviが、”display:block”になっている(.slideToggle()は開いているときはhtml上で”display:block”扱いなので)時に限り、
#mainnaviを.slideUp()する。
これでできると思います。
というか、質問するときはきちんと情報を書いて質問しましょう。
私の回答も挙動を予測して、それに対してなので、もしかしたら違うかもしれません。
ソースのどこをどうしたらどういう挙動をするかということと、あと余計なソースは省く!
頑張ってください。
回答いただき、ありがとうございます!
頂いたソースを設置したところ、#toggleをクリック時も#mainnaviが閉じるようになったのですが、
.scroll aの#で始まるリンクが飛ばなくなってしまいました。
なぜか教えて頂けますと幸いです。
私のつたない質問にも答えて頂き、大変感謝いたします。
以後、質問する際には、気を付けます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
クリックした<a>タグのみにClas...
-
大量のチェックボックス状態取...
-
<li>タグの順番を入れ替える方法
-
jqueryについて
-
MAX関数を使ってからLEFT JOIN...
-
全部のサイコロをjavascriptで...
-
Slick.jsのオプションrtlについて
-
imageクラスからiconクラスに変...
-
画像が表示でnull; this.src
-
VBScript+IEのチェックボック...
-
jqueryスライドショーをストッ...
-
クリッカブルマップの一部分だ...
-
マウスオーバーにて画像に虫眼...
-
デフォルト非表示にしたい。【t...
-
IE6で隙間ができてしまう
-
バナーのランダム配置
-
画像の重なりの順序を代える方...
-
createElementで作成した要素を...
-
ページ遷移後のcssプロパティ保持
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
「jQuery」アコーディオンメニ...
-
jQueryのeqで最後からn番目以降...
-
jquery ドロップダウンメニュー...
-
javascriptでフォーカスを当て...
-
クリックした<a>タグのみにClas...
-
タブ切り替えの初期表示について
-
Jquery の slide.toggle で要素...
-
jQuery タブメニューへのダイ...
-
大量のチェックボックス状態取...
-
javascriptでEnterキーをtabキ...
-
jQueryでネスト構造の<li>がク...
-
javascriptで、クリックしたら...
-
展開メニューの修正
-
ネストされたチェックボックス...
-
gridstack.jsについて教えてく...
-
jQueryのhide,showで中の要素が...
-
jQuery アコーディオンメニュー...
-
戻ってきた時ツリーメニューが...
-
フォントサイズの変更
おすすめ情報