JavaScritp初心者です。宜しくお願い致します。
http://black-flag.net/jquery/20101014-1597.html
こちらを利用させていただいてタブの切替を行っています。
タブ【1】の中から、タブ【2】タブ【3】へリンクさせたいです。
タブ【1】の<div id=”#motion_area1”>からタブ【2】へ
タブ【2】が開いた状態で、リンクです。
<script type="text/javascript">
$(function(){
$("a.btn_act").click(function(){
var connectCont = $("a.btn_act").index(this);
var showCont = connectCont+1;
$('.motion').css({display:'none'});
$('#motion_area'+(showCont)).fadeIn('slow');
$('a.btn_act').removeClass('active');
$(this).addClass('active');
});
});
</script>
↑↑↑↑↑↑↑↑↑↑↑↑↑↑
これを改造してみました。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<script type="text/javascript">
$(function(){
$("a.btn_act1").click(function(){
var connectCont = $("a.btn_act1").index(this);
$('.motion').css({display:'none'});
$('#motion_area1').fadeIn('slow');
$('a.btn_act1').removeClass('active');
$(this).addClass('active');
});
$("a.btn_act2").click(function(){
var connectCont = $("a.btn_act2").index(this);
$('.motion').css({display:'none'});
$('#motion_area2').fadeIn('slow');
$('a.btn_act2').removeClass('active');
$(this).addClass('active');
});
$("a.btn_act3").click(function(){
var connectCont = $("a.btn_act3").index(this);
$('.motion').css({display:'none'});
$('#motion_area3').fadeIn('slow');
$('a.btn_act3').removeClass('active');
$(this).addClass('active');
});
});
</script>
各タブに名前を持たせればいいのかと思い、
クラスも分けてみて、各タブのリンク先も
<a href="#motion_area1" class="btn_act1 active">タブ1</a>
<a href="#motion_area2" class="btn_act2">タブ2</a>
<a href="#motion_area3" class="btn_act3">タブ3</a>
へ、飛ぶようにしました。
飛ぶにはとんだんですが、アクティブになるcssととび先がページの先頭に来ません。
なにか良い方法はないでしょうか。
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
A#1~#3です
こんな感じでどうでしょうか?
※ CSSも含め、全体に少しずつ修正しています。
※ リンクの際のスクロール制御に関しては#1と同様です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>Sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
.tab_set, .tab_set * { margin: 0; padding: 0; }
.tab_menu { position:relative; z-index:10; }
.tab_menu > a {
display: inline-block;
margin-right: 2px; padding: 2px 6px;
text-decoration: none;
background-color: #DDD;
border: 1px solid #888;
border-radius: 5px 5px 0 0;
}
.tab_menu > a.active {
background-color: #FFC;
border-bottom: 1px solid #FFC;
}
.tab_contents {
width: 600px; height: 200px;
padding: 5px;
border: 1px solid #888;
background-color: #FFC;
position:relative; top: -1px;
}
</style>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery","1");</script>
<script type="text/javascript">
$(function(){
var active = "active";
$(document).on("click", "a[href^='#']", function(){
return changeTab($(this).attr("href"));
});
$(".tab_set > .tab_menu > a:first-child").click();
changeTab(location.hash);
function changeTab(id){
var target = $(id);
if(target.length == 0) return;
var set = target.parent(".tab_contents").parent(".tab_set");
if(set.length == 0) return;
var index = $(".tab_contents > div", set).index(target);
$(".tab_menu > a", set).removeClass(active).eq(index).addClass(active);
$(".tab_contents > div", set).hide().eq(index).show();
}
});
</script>
</head>
<body>
<p>◆タブのテスト(タブ内でリンク)
<div class="tab_set">
<div class="tab_menu">
<a href="#tab_content1">TAB1</a>
<a href="#tab_content2">TAB2</a>
<a href="#tab_content3">TAB3</a>
</div>
<div class="tab_contents">
<div id="tab_content1">TAB1の内容 <a href="#tab_content2">TAB2へ</a></div>
<div id="tab_content2">TAB2の内容 <a href="#tab_content3">TAB3へ</a></div>
<div id="tab_content3">TAB3の内容 <a href="#tab_content1">TAB1へ</a></div>
</div>
</div>
<p>◆複数タブのテスト(タブ1へリンク)
<div class="tab_set">
<div class="tab_menu">
<a href="#hoge1">TAB4</a>
<a href="#hoge2">TAB5</a>
<a href="#hoge3">TAB6</a>
</div>
<div class="tab_contents">
<div id="hoge1">TAB4の内容 <a href="#tab_content1">TAB1へ</a></div>
<div id="hoge2">TAB5の内容 <a href="#tab_content1">TAB1へ</a></div>
<div id="hoge3">TAB6の内容 <a href="#tab_content1">TAB1へ</a></div>
</div>
</div>
</body>
</html>
No.3
- 回答日時:
A#2です。
z-indexの件は失礼しました。うっかりしてました。
>これを別ページからリンクさせたときに、
>ターゲットとしたタブを開くことは可能でしょうか。
可能ですよ。
通常のページ内リンク形式にしているので比較的やり易くなっていると言えるかも。
今、スクリプトを書ける環境にないので例は示せませんが、ロード時にURLのハッシュを調べて処理するようにすればよろしいかと思います。
ここの質問でも似たものが何度かあったと思いますので、検索してみるといくつも見つかると思います。
以下はその一例です。
https://oshiete.goo.ne.jp/qa/8130438.html
https://oshiete.goo.ne.jp/qa/6204592.html
No.2
- 回答日時:
ANo1です。
ピリオドが多いところがありました。訂正です。
(あってもなぜか動作しちゃうみたいですが、気持ち悪いので)
$(function(){
var active = "active";
$(".tab_set").each(function(){
$(".tab_menu > a", this).eq(0).addClass(active);
$(".tab_contents > div", this).hide().eq(0).show();
});
$("a[href^='#']").on("click", function(){
var target = $( $(this).attr("href"));
if(target.length == 0) return;
var set = target.parent(".tab_contents").parent(".tab_set");
if(set.length == 0) return;
var index = $(".tab_contents > div", set).index(target);
$(".tab_menu > a", set).removeClass(active).eq(index).addClass(active);
$(".tab_contents > div", set).hide().eq(index).show();
});
});
No.1
- 回答日時:
こんにちは
ページ内のどこにリンクがあってもタブを有効にしたいというようなことかと解釈しました。
ご提示のものとは発想が元から違ってしまいますが、いっそのことページ内リンクの形式を利用して、それがタブ内へのリンクだったらタブの切替をするというような作り方にしてしまえば良いのではないでしょうか?
・・・という発想でのサンプルです。
※ ご提示のスクリプトではフェードインとかスライドダウンになっているようですが、タブなので単純切り替え表示にしてあります。
※ クラスの構成でtab_setの中にtab_menu(以下にA要素)、tab_contents(以下にDIV要素)があるものを1単位として考えています。
※ 上記構成が複数あってもOKですが、入れ子での設置までは考慮していません。
※ ページ内リンクとidの組み合わせで、タブ用のメニュー以外でもリンクはタブに反映されます。
(インデントは全角空白にしてありますので半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>Sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
.tab_set, .tab_set * { margin: 0; padding: 0; }
.tab_menu > a {
display: inline-block;
margin-right: 2px; padding: 2px 6px;
text-decoration: none;
border: 1px solid #888;
}
.tab_menu > a.active {
background-color: #FFC;
border-bottom: 1px solid #FFC;
}
.tab_contents {
width: 600px; height: 200px;
border: 1px solid #888;
background-color: #FFC;
position:relative; top: -1px; z-index: -10;
}
</style>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery","1");</script>
<script type="text/javascript">
$(function(){
var active = "active"; //表示中を示すクラス名
$(".tab_set").each(function(){
$("..tab_menu > a", this).eq(0).addClass(active);
$(".tab_contents > div", this).hide().eq(0).show();
});
$("a[href^='#']").on("click", function(){
var target = $( $(this).attr("href"));
if(target.length == 0) return;
var set = target.parent(".tab_contents").parent(".tab_set");
if(set.length == 0) return;
var index = $(".tab_contents > div", set).index(target);
$("..tab_menu > a", set).removeClass(active).eq(index).addClass(active);
$(".tab_contents > div", set).hide().eq(index).show();
});
});
</script>
</head>
<body>
<p>◆タブのテスト
<div class="tab_set">
<div class="tab_menu">
<a href="#tab_content1">TAB1</a>
<a href="#tab_content2">TAB2</a>
<a href="#tab_content3">TAB3</a>
</div>
<div class="tab_contents">
<div id="tab_content1">TAB1の内容</div>
<div id="tab_content2">TAB2の内容</div>
<div id="tab_content3">TAB3の内容</div>
</div>
</div>
<p>◆複数タブのテスト
<div class="tab_set">
<div class="tab_menu">
<a href="#hoge1">TAB4</a>
<a href="#hoge2">TAB5</a>
<a href="#hoge3">TAB6</a>
</div>
<div class="tab_contents">
<div id="hoge1">TAB4の内容</div>
<div id="hoge2">TAB5の内容</div>
<div id="hoge3">TAB6の内容</div>
</div>
</div>
<p>◆ページ内リンクのテスト
<p>
<a href = "#tab_content1">TAB1へ</a>
<a href = "#tab_content3">TAB3へ</a>
<p>
<a href = "#hoge1">TAB4へ</a>
<a href = "#hoge2">TAB5へ</a>
<a href = "#hoge3">TAB6へ</a>
</body>
</html>
※ ページ内リンクの本来の機能で対象要素へとスクロールしますが、場合によってはチラチラ感じることがありそうな気がします。
※ 対象のタブ部分が表示されていたらスクロールしないように簡易的な制御をしたければ、以下の5行を追加してください。
(「+200」としているのは、「ある程度表示されていれば」というつもりのテキトーな数ですので調整願います。)
var w = $(window), o = set.offset(), flag = true;
if(o.top < w.scrollTop() || w.scrollTop() + w.height() < o.top + 200) flag = false;
if(o.left < w.scrollLeft() || w.scrollLeft() + w.width() < o.left + 200) flag = false;
if(!flag) set.get(0).scrollIntoView();
return false;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript jQueryでのレスポンシブが綺麗に動かない 3 2022/06/21 11:08
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
マウスを乗せるとメニュー表示
-
[急ぎ] videoタグで埋め込んだm...
-
タブで開いてさらにタブ内をア...
-
背景色を一定時間ごとにランダ...
-
console.log結果をhtmlで表示し...
-
removeAttribute()メソッドで削...
-
removeEventListenerについて
-
javascriptでpostした値が取得...
-
折りたたみ部分にアンカーでリ...
-
多次元配列を連想配列へ変換したい
-
jQueryでシンプルドラッグドロ...
-
jQueryで同じid属性が複数あっ...
-
ダブルクォーテーションが消え...
-
javascriptでオブジェクトの重...
-
displayの状態を取得したい
-
クリックで色変更後に既に変更...
-
<前 次> のようなリンクを見...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
createElementで作成した要素を...
-
removeEventListenerについて
-
IFRAMEの表示/非表示を切り替え...
-
タブで開いてさらにタブ内をア...
-
変数名をどのようにつけるのが...
-
クリックで色変更後に既に変更...
-
表示・非表示のスクリプトで、...
-
HTMLとJavaScriptで作ったタイ...
-
console.log結果をhtmlで表示し...
-
jQueryでクリックされた要素のi...
-
HTMLタグに複数のクラスを設定...
-
指定したパスが現URLに含まれて...
-
iframe内のリンクが飛ばないの...
-
背景色を透明化
-
テキストエリア内の一部の文字...
-
変数内容をHTML内で表示する方法
-
classの中の<a>タグにidを追加
おすすめ情報
ありがとうございます!
本当にたすかっており、また、
素晴らしい回答に驚いております。
しかしながら、
ちょっと私の説明不足で、申し訳ございません。
例えば…
<div id="tab_content1">TAB1の内容</div>
この中に
<div id="tab_content1">
TAB1の内容<br />
<a href="#tab_content3">TAB3にとぶ</a>
</div>
と入れたかったのです。
でも飛びました!リンクが押せなかったので
(z-index: -10;は消しました)
本当にありがとうございます。
そして更なる…要望なのですが。。。
これを別ページからリンクさせたときに、
ターゲットとしたタブを開くことは可能でしょうか。
宜しければ教えて下さい。