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

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

新規登録して質問してみよう
ただいま回答率
85.48%
タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

4945閲覧

アンカーリンクからタブ内のリンク先を開けますか?

退会済みユーザー

退会済みユーザー

総合スコア0

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/10/28 08:20

編集2020/10/28 08:30

前提・実現したいこと

初めて質問いたします。
Javascriptを使用し、タブを動かしています。

同じページにある、複数のアンカーリンクから、
タブを開き、該当のアンカーまでスクロール、画面表示をさせたいです。
ページ内リンクが複数あり、タブ外から→タブ内アンカーへのリンクで、
同じ質問が見つけらなかったので質問させていただきました。

  • アンカーリンク1は、タブ1の#aaaへ。
  • アンカーリンク2は、タブ3の#bbbへ。

どなたかご教授ください。
どうぞ宜しくお願いします。

該当のソースコード

HTML

1<a href="#aaa" onclick="OnLinkClick();">&gt;&gt;タブ1の中にあるページ内リンクに飛ぶリンク</a> 2<a href="#bbb" onclick="OnLinkClick();">&gt;&gt;タブ3の中にあるページ内リンクに飛ぶリンク</a> 3 4<div class="tabs"> 5 <input id="feature" type="radio" name="tab_item" checked> 6 <a href="javascript:void(0);" class="btn_act active"><label class="tab_item" for="feature"><span>▼</span>タブ1</label></a> 7 <input id="programming" type="radio" name="tab_item"> 8 <a href="javascript:void(0);" class="btn_act"><label class="tab_item" for="programming"><span>▼</span>タブ2</label></a> 9 <input id="design" type="radio" name="tab_item"> 10 <a href="javascript:void(0);" class="btn_act"><label class="tab_item" for="design"><span>▼</span>タブ3</label></a> 11 <div class="tab_content" id="motion_area1"> 12 <div class="tab_content_description"> 13 <p >タブを開いた中身1</p> 14 <p >タブを開いた中身1</p> 15 <p >タブを開いた中身1</p> 16 <p >タブを開いた中身1</p> 17 <p >タブを開いた中身1</p> 18 <p id="aaa">ページ内リンクで飛びたい場所</p> 19 </div> 20 </div> 21 <div class="tab_content" id="motion_area2"> 22 <div class="tab_content_description"> 23 <p > 24    タブを開いた中身2 25 </p> 26 </div> 27 </div> 28 <div class="tab_content" id="motion_area3"> 29 <div class="tab_content_description"> 30 <p >タブを開いた中身3</p> 31 <p >タブを開いた中身3</p> 32 <p >タブを開いた中身3</p> 33 <p >タブを開いた中身3</p> 34 <p >タブを開いた中身3</p> 35 <p >タブを開いた中身3</p> 36 <p id="bbb">ページ内リンクで飛びたい場所</p> 37 </div> 38 </div> 39</div> 40<script language="javascript" type="text/javascript"> 41$(function(){ 42 $("a.btn_act").click(function(){ 43 var connectCont = $("a.btn_act").index(this); 44 var showCont = connectCont+1; 45 $('.tab_content').css({display:'none'}); 46 $('#motion_area'+(showCont)).slideDown('normal'); 47 48 $('a.btn_act').removeClass('active'); 49 $(this).addClass('active'); 50 }); 51}); 52</script>

試したこと

下記リンクなど5例ほど試してみたりはしたのですが、
https://teratail.com/questions/22933
タブ内からタブ内であったり、ページ外からのリンクであったり、
希望としているものでは無かったこともあり、やはりうまく動作しませんでした。

また、CSSでタブを作った際には下記を使用して動かすことはできたのですが、
下記のscriptですと、一つのアンカーリンクにしか使えず。。
詳しくない為に応用することが出来ませんでした。

HTML

1<script language="javascript" type="text/javascript"> 2 function OnLinkClick() { 3 var elements = document.getElementsByName( "tab_item" ) ; 4  elements[2].checked = true ; 5 /* elements[0]⇒タブ1、elements[1] ⇒タブ1、elements[2] ⇒タブ3 */ 6 } </script>

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

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

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

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

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

guest

回答1

0

ベストアンサー

ようはタブを開いてから飛べばいいわけです。

まず、アンカーと label を両方使わず、label のみにしておきましょう。表示は CSS で調整してください。

HTML

1 <input id="feature" type="radio" name="tab_item" class="btn_act active" checked="checked"> 2 <label class="tab_item" for="feature"><span>▼</span>タブ1</label> 3<!-- 以下同様 -->

それにあわせてスクリプトも修正しておきます。

jQuery

1 $('[name="tab_item"]').click(function(){ 2 var connectCont = $('[name="tab_item"]').index(this);

さらに onclick のほうも event を渡すようにしておきます。

HTML

1<a href="#aaa" onclick="OnLinkClick(event);">&gt;&gt;タブ1の中にあるページ内リンクに飛ぶリンク</a> 2<a href="#bbb" onclick="OnLinkClick(event);">&gt;&gt;タブ3の中にあるページ内リンクに飛ぶリンク</a>

そうすると、event.preventDefault() でリンクの動作を殺すことができるので400ミリ秒後にスクロールできるようになります。
瞬時にスクロールしたい場合は考えてみてください。

jQuery

1 function OnLinkClick(event) { 2 var elements = document.getElementsByName( "tab_item" ) ; 3 var p = $($(event.currentTarget).attr('href')); 4 var num = parseInt(p.closest('.tab_content').prop('id').substring(11), 10); 5 $(elements[num - 1]).trigger('click'); 6 setTimeout(function() { 7 p[0].scrollIntoView(); 8 }, 400); 9 event.preventDefault(); 10 }

https://developer.mozilla.org/ja/docs/Web/API/Element/scrollIntoView
https://developer.mozilla.org/ja/docs/Web/API/Event/preventDefault

投稿2020/10/28 09:53

x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2020/10/29 00:27 編集

早速回答依頼を受けて下さりありがとうございます。!! おかげさまで無事、希望としている動きが叶いました。 スクロールの件も、400を0にして、瞬時スクロールへ変更することが出来ました。 大変わかりやすく、とてーも勉強になりました。 ひとつひとつ読み解いて、落とし込みたいと思います。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問