サムネイルでメイン画像切り替え

このQ&Aのポイント
  • サムネイルをマウスオーバーで切り替える方法を教えてください。
  • 「前へ」「次へ」のボタンをクリックで動作し、マウスオーバーにはサムネイルの箇所だけを使いたいです。
  • 上記サイトを参考に「前へ」「次へ」のテキストリンクをつけたバージョンで、以前教えていただいたスクリプトを使用しています。
回答を見る
  • ベストアンサー

サムネイルでメイン画像切り替え

下記サイトを参考に「前へ」「次へ」のテキストリンクをつけたバージョンを作成していて 以前、質問させて頂いた際に、回答者様のおかげで解決することが出来ましたが、 新たに分からない点が出来たので質問させてください。 http://awd-web.com/blog/2219 現状、サムネイルをクリックしてメイン画像が切り替わるようになっていますが、 これをマウスオーバーで切り替えるようにしたいと思っています。 「前へ」「次へ」のボタンは、クリックで動作するようにし、 サムネイルの箇所だけマウスオーバーにする方法がお分かりの方がおられましたら ご教授頂けないでしょうか。 $(opts.thumbList, this).click(function(){ のclickをマウスオーバーにするとサムネイルの箇所はうまく行くのですが、 「前へ」「次へ」のクリックでの動作がきかなくなってしまいます。。 どうぞ宜しくお願いいたします。 上記サイトに「前へ」「次へ」をつけたバージョンでの以前お教え頂いたスクリプトです。 (function($){ $(function(){ $('body :first-child').addClass('firstChild'); $('body :last-child').addClass('lastChild'); $.fn.FadeSwitch = function(options){ var opts = $.extend({}, $.fn.FadeSwitch.defaults, options); $(opts.hideArea + ':first-child').show(); $(opts.thumbList + ':first-child').addClass('active'); $(opts.thumbList, this).click(function(){ var parent_id = '#' + $(this).parents(opts.contentBox).attr('id'); if ($(this).hasClass('active')) return false; $(parent_id).find(opts.thumbList).removeClass('active'); $(this).addClass('active'); $(parent_id).find(opts.hideArea).hide(); $($(this).find('a').attr('href')).fadeIn(opts.fadeSpeed); return false; }); jQuery( '.Next', opts.contentBox ).click( function( evt ) { var next = jQuery( opts.thumbList + '.active', opts.contentBox ).next(); if ( next.length ) { next.click(); } else { jQuery( opts.thumbList + ':first', opts.contentBox ).click(); } } ); jQuery( '.Prev', opts.contentBox ).click( function( evt ) { var prev = jQuery( opts.thumbList + '.active', opts.contentBox ).prev(); if ( prev.length ) { prev.click(); } else { jQuery( opts.thumbList + ':last', opts.contentBox ).click(); } } ); }; $.fn.FadeSwitch.defaults = { hideArea: '.box', thumbList: '.thumb li', contentBox: '.showbox', fadeSpeed: 'normal' }; }); })(jQuery);

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

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.1

ソースが酷い、これでとりあえず解決したいいけどそろそろ最初から作り直した方がいい $(opts.thumbList, this).click(function(){ ↓↓↓ $(opts.thumbList, this).bind("click mouseover",function(){

okyesno
質問者

お礼

ご指摘、ご回答ありがとうございます! きれいなコードがかけるように勉強したいと思います! どうもありがとうございました!

関連するQ&A

  • サムネイル画像のclass切替がうまく動かない。

    すみません、jquery初心者です。 下記の様にサムネイルをクリックすると、mainの画像が切り替わる画像ギャラリーを作成しておりまして、 サムネイルをクリックして class="current" を切り替えたいのですが、うまく動きません。 別のサムネイルをクリックすると、最初のclassはremoveされるのですが、 クリックしたサムネイルにclassを付けたいのですが効きません。。 $(document).ready(function() { $(function(){ $('#sum li a').click(function(){ var h = $(this).eq(0).attr('rel'); $('#main img').fadeOut(function(){ ($('#main img').attr("src",h)).fadeIn(); $('#sum li a').removeClass('current'); $(this).addClass('current'); }); return false; }) }); }); <div class="main_area"> <p id="main"><img src="images/img01.jpg" /></p> </div> <ul id="sum" class="clearfix"> <li><a href="#" rel="img01.jpg" class="current"><img src="images/sum01.jpg" /></a></li> <li><a href="#" rel="img02.jpg"><img src="images/sum02.jpg" /></a></li> <li><a href="#" rel="img03.jpg"><img src="images/sum03.jpg" /></a></li> </ul> ご教授頂けると非常に助かります。 よろしくお願いします。

  • サムネイルで画像を切り替えるjQuery

    下記サイトを参考にサムネイルで画像を切り替えるjQueryを作成しました。 http://tam-tam.co.jp/tipsnote/javascript/post3351.html 自動で切り替えしないようにスクリプトを一部修正して下記を設置しています。 chromeなどでは問題なくスムーズに切り替わるのですが、 firefoxでは、メイン画像とサムネイルが切り替わる際に (フェードイン・フェードアウトの時) 背景が黒くなってしまいます。 また少し動作が不安定に感じます。 背景は白のままで、出来れば動作も改善させたいのですが、 原因が分からず困っています。 どなたか参考サイトのサンプルで原因が分かる方がおられましたら ご教授いただけないでしょうか。 どうぞ宜しくお願い致します。 $(function (){ //設定 var active="active",interval=6000; var index=0, timerId=null; var tabs=$("#thumbBtn > li"), content=$("#view > p"), cap=$("#caption > li"); //クラスの付与 tabs.each(function(){$(this).removeClass(active);}); content.hide(); cap.hide(); tabs.eq(0).addClass(active); content.eq(0).fadeIn("fast"); cap.eq(0).fadeIn("fast"); //クリックされたらactiveというクラスを付与、 //切り替え、タイマーをリセット tabs.click(function(){ if($(this).hasClass("active")) return; if(timerId) clearInterval(timerId),timerId=null; change(tabs.index(this)); setTimer(); return false; }); //タイマー // setTimer(); // function setTimer(){ // timerId=setTimeout(timeProcess,interval); // return false; // } function timeProcess(){ change((index+1)%tabs.length); timerId=setTimeout(arguments.callee,interval); } //切り替え function change(t_index){ tabs.eq(index).removeClass(active); tabs.eq(t_index).addClass(active); //fadeout setTimeout(function(){ content.eq(index).stop(true, true).fadeOut(3000), cap.eq(index).stop(true, true).hide() ;}, 300); //fadein setTimeout(function(){ index=t_index; content.eq(index).fadeIn(3000), cap.eq(index).fadeIn(3000) ;}, 400) } });

  • nextの使い方

    jQueryを勉強したてです。 http://jonraasch.com/blog/a-simple-jquery-slideshow こちらのスライドショーのソースなのですが、 【HTML部分】 <div id="slideshow"> <img src="img/img1.jpg" alt="" class="active" /> <img src="img/img2.jpg" alt="" /> <img src="img/img3.jpg" alt="" /> </div> 【jQuery部分】 function slideSwitch() { var $active = $('#slideshow IMG.active'); var $next = $active.next(); $next.addClass('active'); $active.removeClass('active'); } $(function() { setInterval( "slideSwitch()", 5000 ); }); となっていますが、activeを差し替えて表示するものをどんどん変えていっているというのはなんとなくわかるのですが、 var $next = $active.next(); で、なぜクラス指定していない次のIMGタグが$nextに読み込まれることになるんでしょうか。 var $active = $('#slideshow IMG'); だったら納得いくものの、 var $active = $('#slideshow IMG.active'); であれば、HTMLでは1行しか該当しているものがないので、nextでは読み込まれないように思うのですが・・・ よろしくお願い致します。

  • jQueryタブメニュー内へのリンク方法。

    javascript勉強中です。 調べたり試してみたりしたのですが、なかなか上手くいかず質問させていただきました。 下記のjQueryを使ったタブメニューなのですが、他のページからタブ内(tab1~tab3)へリンクさせるjavascriptの書き方や方法を教えていただけないでしょうか。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> $(function($) { $(".area").hide(); $(".tab_content").hide(); }); jQuery.event.add(window,"load",function(){ $(".tab01 li:first-child").addClass("active"); $(".area:first-child").show(); $(".tab01 li").each(function(i){ $(this).click(function(){ $(".content .area").hide(); $(".content .area").eq(i).fadeIn(400); if($(this).hasClass("active")){ $(".tab01 li").removeClass("active");} else {$(".tab01 li").removeClass("active"); $(this).addClass("active"); } }); }); }); </script> </head> <body> <div> <ul class="tab01"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> <div class="content"> <div class="area" id="tab1">tab1</div> <div class="area" id="tab2">tab2</div> <div class="area" id="tab3">tab3</div> </div> </div> </body> </html> どうぞ宜しくお願い致します。

  • このjsを複数設定したい

    下記のjsを同ページ内に複数設定したいのですが、 どこかがバッティングしているようで、最後の記述文しか機能しません。 どうすれば、うまく両方とも機能するでしょうか? (function( $ ) { $.fn.basicTabs = function(options){ var settings = $.extend({ active_class1: "current1", list_class1: "tabs1", content_class1: "tab_content1", starting_tab1: 1 }, options ); var $content = $('.' + settings.content_class1); var $list = $('.' + settings.list_class1); $content.find('div').hide(); $content.find("div:nth-child(" + settings.starting_tab1 + ")").show(); $list.find("li:nth-child(" + settings.starting_tab1 + ")").addClass(settings.active_class1); $("." + settings.list_class1 + ' li a').click(function(e){ $list.find("li").removeClass(settings.active_class1); $("." + settings.content_class1 + " > div").hide(); $(this).parent().addClass(settings.active_class1); var currentTab1 = $(this).attr('href'); $(currentTab1).show(); e.preventDefault(); }); }; }( jQuery )); (function( $ ) { $.fn.basicTabs = function(options){ var settings = $.extend({ active_class2: "current2", list_class2: "tabs2", content_class2: "tab_content2", starting_tab2: 1 }, options ); var $content = $('.' + settings.content_class2); var $list = $('.' + settings.list_class2); $content.find('div').hide(); $content.find("div:nth-child(" + settings.starting_tab2 + ")").show(); $list.find("li:nth-child(" + settings.starting_tab2 + ")").addClass(settings.active_class2); $("." + settings.list_class2 + ' li a').click(function(e){ $list.find("li").removeClass(settings.active_class2); $("." + settings.content_class2 + " > div").hide(); $(this).parent().addClass(settings.active_class2); var currentTab2 = $(this).attr('href'); $(currentTab2).show(); e.preventDefault(); }); }; }( jQuery )); 上記のようにそれぞれ別に同ページ内で機能させたいです。 よろしくお願いします。

  • IEのみjqoueryスライダーが動かない

    いつもお世話になっています。 Wordpressでサイトを構築しています。 firefoxやsafariでは動作確認がとれいていますがieのみ動きません。 なぜでしょうか? <script src="/js/jquery-1.6.2.min.js"></script> <script src="/js/jquery.easing.1.3.js"></script> <script src="/js/jquery.bxslider.min.js"></script> <?php wp_head(); ?> <script type="text/javascript"> $(function(){ var slider = $('#slider8').bxSlider({ auto: true, pager: true, speed: 1000, controls: true, }); $('.thumbs a').click(function(){ var thumbIndex = $('.thumbs a').index(this); slider.goToSlide(thumbIndex); $('.thumbs a').removeClass('pager-active'); $(this).addClass('pager-active'); return false; }); $('.thumbs a:first').addClass('pager-active'); }); jQuery(function() { var topBtn = jQuery('.tothetopfixed'); //最初はボタンを隠す topBtn.hide(); //スクロールが100に達したらボタンを表示させる jQuery(window).scroll(function () { if (jQuery(this).scrollTop() > 100) { topBtn.fadeIn(); } else { topBtn.fadeOut(); } }); //スクロールしてトップに戻る //500の数字を大きくするとスクロール速度が遅くなる topBtn.click(function () { jQuery('body,html').animate({ scrollTop: 0 }, 500); return false; }); }); </script> よろしくお願いします。

  • offset().topでIE6エラー

    以下のjs(jquery)を実行すると IE6でエラーになります。 どうもoffset().topが引っかかているようですが、 対策がわかりません。 $(document).ready(function() { $(".test li").click(function(){ $(".test li").removeClass("hide");   $("div.box .orn").removeClass("active");   $('div#' + $(this).attr('id')).addClass("active");   $('.scroll').animate({ scrollTop: $('div#' + $(this).attr('id')).offset().top }); }) }) どなたか教えていただけると助かります。

  • フォントサイズの変更

    jqueryを使用したフォントサイズの変更について質問です。 サイズの変更は以下のスクリプトで動作するのですがクラス名(active)が付与されずうまく動作しません。 html <ul class="switch"> <li><span class="fontChangeSmall">小</span></li> <li><span class="fontChangeNormal">中</span></li> <li><span class="fontChangeLarge">大</span></li> </ul> font-change.js $(document).ready(function() { var bodyClass = 'font'; var switchClass = 'fontChange'; var startClass = 'Normal'; var activeClass = 'active'; var value = $.cookie('fontSize'); if ( value ) { $('body').addClass(bodyClass + value); $('.switch .' + switchClass + value).addClass(activeClass); } else { $('body').addClass(bodyClass + startClass); $('.switch .' + switchClass + startClass).addClass(activeClass); } $('.switch span').click( function() { value = $(this).attr('class').replace(switchClass, ''); $('body').removeClass(bodyClass + 'Normal').removeClass(bodyClass + 'Small').removeClass(bodyClass + 'Large'); $('body').addClass(bodyClass + value); $('.switch span').removeClass(activeClass); $('.switch .' + switchClass + value).addClass(activeClass); $.cookie('fontSize', value); }); }); 上記だけであれば動作するのですが下記のスクリプトがあるとactiveが付与されない状況です。 下記をコメントすると正常に動作します。 ※どちらのjsも外部ファイルとして読込みしてます。 common.js $(function() { $('body :first-child').addClass('firstChild'); $('body :last-child').addClass('lastChild'); }); どのようにすればactiveが付与されるようになりますでしょうか?

  • html内にスライドショーを複数設置

    こんにちは、質問があります。 http://allabout.co.jp/gm/gc/417216/3/ ↑のサイトさんに載っているコードを参考に、スライドショーをhtml内に書きました。html内にスライドショーを複数設置をしたいので、#slideshow の部分を#slideshow2や#slideshow3にしたりしたのですが、スライドショーが#slideshow3の部分しか動きません。全てのスライドショーを同時に動かすにはどうしたらいいのでしょうか?当方初心者なので分からないのです。どなたか教えていただけるとうれしいです。 以下が書いたコードです。 <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script type="text/javascript"> function slideSwitch() { var $active = $('#slideshow img.active'); var $active = $('#slideshow2 img.active'); var $active = $('#slideshow3 img.active'); if ( $active.length == 0 ) $active = $('#slideshow,#slideshow2,#slideshow3 img:last'); var $next = $active.next().length ? $active.next() : $('#slideshow,#slideshow2,#slideshow3 img:first'); $active.addClass('last-active'); $next.css({opacity: 0.0}) .addClass('active') .animate({opacity: 1.0}, 1000, function() { $active.removeClass('active last-active'); }); } $(function() { setInterval( "slideSwitch()", 2000 ); }); </script> <p id="slideshow"> <img src="img/slide1.jpg" alt="" /> <img src="img/slide2.jpg" alt=""/> <img src="img/slide3.jpg" class="active" /> </p> <p id="slideshow2"> <img src="img/slide4.jpg" alt="" /> <img src="img/slide5.jpg" alt=""/> <img src="img/slide6.jpg" class="active" /></p> <p id="slideshow3"> <img src="img/slide7.jpg" alt="" /> <img src="img/slide8.jpg" alt=""/> <img src="img/slide9.jpg" class="active" /></p> どなたか回答よろしくお願いいたします。

  • カレントページ aタグではなく、liに「activ

    カレントページ aタグではなく、liに「activeクラス」を付与したいのですが、 どうすれば良いでしょうか? var URL = window.location.pathname; $('ul#gnavi li a').each(function() { linkURL =$(this).attr("href"); if ( URL == linkURL ){  //$('ul#navi li').addClass('active"');//これだと全部activeになる  //$(this).addClass('active');//これだとaがactiveになる } ナビ階層としては、<ul><li>の中に、さらに<ul><li>があります 一番外側のulにはid「gnavi」を付与しています できれば、両階層とも「activeクラス」を付与したいのですが、 難しければ、とりあえず、中にある階層のliタグに「activeクラス」を付与したいです jQueryを利用しようとしていますが、普通のjsで出来るのなら、そちらでやりたいです (jQueryでもいいです)

専門家に質問してみよう