• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptにフェードインを追加したい。)

javascriptにフェードインを追加したい。

このQ&Aのポイント
  • クリックでテキストが切り替わるjavascriptにフェードイン効果を追加したい。
  • 切り替わった際にボタンの背景を変更するためにCSSの.actveを追加したい。
  • 改造したjavascriptの限界を感じており、アドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 なんだかよくわからないので、参考にもならないかも知れませんが… (勝手に仮定しています。) ◇ HTML(テスト用) <div id="group1"> <a href="#text1" class="actve">1を表示</a> <a href="#text2">2を表示</a> <a href="#text3">3を表示</a> </div> <hr> <div id="group2"> <a href="#text4">4を表示</a> <a href="#text5">5を表示</a> <a href="#text6">6を表示</a> </div> <hr> <div id="text1">111111</div> <div id="text2">222222</div> <div id="text3">333333</div> <div id="text4">444444</div> <div id="text5">555555</div> <div id="text6">666666</div> ◇ javascript(jQueryを使用しています) //違うところは適当に修正してみてください。 (全角空白は半角に) (function($){ var speed = 1000,   active = "actve",   n_active = ":not(." + active + ")",   getTarget = function(elm){    var h, r = $("");    elm.each(function(){     if(h=$(this).attr("href").match(/#.+$/)) r = r.add(h[0]);    });    return r;   }; $.fn.extend({  changer : function(){   var t = $(this).children("a");   getTarget(t.filter(n_active)).hide();   t.click(function(){    var elm, func, t = $(this);    getTarget(t.parent().children("a")).queue([]).stop(1,1);    func = function(){     getTarget(t.addClass(active)).fadeIn(speed);    };    elm = getTarget(t.siblings("."+active).removeClass(active));    if(elm.length) elm.fadeOut(speed, func); else func();    return false;   });  } }); })(jQuery); // ************************************** //設定(テスト用) $(function(){  $("#group1").changer();  $("#group2").changer(); });

egtomo
質問者

お礼

ありがとうございます。 上記を元にカスタマイズでうまく表現できました。 本当に助かりました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ご提示の内容だとわからないところが多すぎて… ・なぜ表示対象がform要素の中にあるのか ・checkdとの関係はどうなっているのか ・textALLってわざわざ指定してるみたいだけれど、ドキュメントのあちこちに散らばって  いるもの全部が対象なのか、id指定されているものだけが対象なのか などなど… 何がどうなっているのかわからないので、具体的には書きようがありませんが、jqueryなどのライブラリを利用してしまえばフェード効果なども比較的簡単に実現できます。 例えば  フェードイン:  $(要素のセレクタ).fadeIn();  フェードアウト: $(要素のセレクタ).fadeOut(); 程度の記述で実現可能です。  http://api.jquery.com/fadeIn/  http://api.jquery.com/fadeOut/ また、クラスの設定・削除に関しても .addClass(class)、 .removeClass(class) で可能です。

egtomo
質問者

お礼

度々すみません。 上記も間違っておりました。 こちらになります。 <style> .hide{display:none;} </style> <script> function ChDsp2(strShow,classHidden){ var tags=document.getElementsByTagName("div"); for(var i=0;i<tags.length;i++){ if(tags[i].className.match('textALL')){ tags[i].className=tags[i].className.replace(/hide/,"").replace(/^\s+|\s+$/,""); if(tags[i]!=document.getElementById(strShow)) tags[i].className+=' hide'; } } return false; } </script> <a href="#" onclick="return ChDsp2('text1','textALL');">1を表示</a> <a href="#" onclick="return ChDsp2('text2','textALL');">2を表示</a> <a href="#" onclick="return ChDsp2('text3','textALL');">3を表示</a> <div id="text1" class="textALL">111111</div> <div id="text2" class="textALL hide">222222</div> <div id="text3" class="textALL hide">333333</div>

egtomo
質問者

補足

すいません。 これは、チェックボックスを使うためにカスタマイズした媒体でした。 下記が今回使おうとしているものです。 function ChDsp2(strShow,classHidden){ var tags=document.getElementsByTagName("div"); for(var i=0;i<tags.length;i++){ if(tags[i].className.match('textALL')){ tags[i].className=tags[i].className.replace(/hide/,"").replace(/^\s+|\s+$/,""); if(tags[i]!=document.getElementById(strShow)) tags[i].className+=' hide'; } } return false; } <div class="button"><a href="#" onclick="checkd1();return ChDsp2('text1','textALL');">ボタン</a></div> <div class="button"><a href="#" onclick="checkd2();return ChDsp2('text2','textALL');">ボタン2</a></div> <div class="button"><a href="#" onclick="checkd3();return ChDsp2('text3','textALL');">ボタン3</a></div> <div class="clear">&nbsp;</div> <div class="area"> <div id="text1" class="textALL">ボタン</div> <div id="text2" class="textALL hide">ボタン2で表示</div> <div id="text3" class="textALL hide">ボタン3で表示</div> </div> になります。 textALLがついている箇所にhideが入るか取り外す仕組みになっているようです。 なので、他の場所に設置してしまうと非表示になってしまう為、 ここでしか使わないクラス名に変更しました。

関連するQ&A