サムネイルにマウスオーバーでメイン画像が切替る

このQ&Aのポイント
  • サムネイルにマウスオーバーした際にメイン画像が自動で切り替わるJavascriptの修正方法について教えてください。
  • 現在のJavascriptでは、サムネイルにマウスオーバーしてもメイン画像が切り替わらない仕様になっています。どの部分を修正すればよいでしょうか?
  • Javascriptの修正方法を教えてください。サムネイルにマウスオーバーした際にメイン画像が自動で切り替わるようにしたいです。
回答を見る
  • ベストアンサー

サムネイルにマウスオーバーでメイン画像が切替るjs

<script type="text/javascript"> //<![CDATA[ $(function(){ var sets = [], temp = []; $("div.pickupArea div.pickupBox").each(function(i) { temp.push(this); if (i % 4 == 3) { sets.push(temp); temp = []; } }); if (temp.length) sets.push(temp); $.each(sets, function() { $(this).flatHeights(); }); n = 1; timerID = setInterval("anime()", 6000); $("ul.imgNav img:gt(0)").fadeTo(0,0.3); }); function anime() { now = n; before = n == 0 ? 3 : n - 1; n++; thumbN = $("ul.imgNav a:eq(" + now + ") img"); thumbB = $("ul.imgNav a:eq(" + before + ") img"); url = $("ul.imgNav a:eq(" + now + ")").attr("href"); img = "http://xxxxxxxxxxxx/xxxx/images/img_main0" + n; $("div.mainImg a").before("<a href='" + url + "'><img src='" + img + ".jpg' alt='' /></a>"); thumbB.fadeTo(1500,0.3); thumbN.fadeTo(1500,1); $("div.mainImg img:last").fadeOut(1500,function(){ $(this).remove(); $("div.mainImg a:last").remove(); }); if(n == 4){ n = 0; } } //]]> </script> 現在このようなスクリプトが入っており、 サムネイル4枚とメイン画像を(4枚中)1枚分だけ表示しているエリアがあり、メイン画像とサムネイルが自動で切り替わるようになっています。 このjsですと、サムネイルにマウスオーバーしてもメイン画像が切り替わらない仕様になっています。 サムネイルにマウスオーバーしても動くjsに改変するにはどこを修正すればよろしいでしょうか? ご回答よろしくお願いいたします。 これをサムネイルに

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

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

回答がないみたいなので… HTMLやCSSが不明だし、何のライブラリを使っているのかも不明なのでよくわからないけれど、想像を大いにたくましゅうして回答してみると… >サムネイルにマウスオーバーしても動くjsに改変するにはどこを修正すればよろしいでしょうか? 基本的には、サムネイルにマウスオーバーした時のイベント処理を追加設定してあげればよいはず。 その後の動作がどうなるのかが不明なのでこれ以上はなんとも言えませんが、想像で考えられるのは、 1)マウスオーバーしている間だけメイン画像が変わっていて、マウスアウトすると元に戻って続きの動作。 2)マウスオーバーした時にメイン画像が変わり、マウスと関係なしにその後は一定時間ごとに切り替わる動作を継続。 この場合、マウスオーバーで切り替わったところの続きから順に表示される。又は、元の順序の続きで表示される。などの違いが考えられます。 1)の場合はマウスアウトの処理も必要なので、hoverなどを利用することになるかと。 いずれにしろ、イベント処理の中では一時的にsetIntervalで行なっている処理を止めてあげる必要があると思われます。 その後にどのようなタイミングとどのような順序で再開するのかは要求する内容によって変わってくるところです。 また、イベント時の画像入替えの処理とsetIntervalでの画像入替えの処理とは、ほぼ同じ内容になると予想されますので、その部分を独立の関数にしておいてどちらの処理からも利用できるようにしておく方が効率的と思われます。 その他、ご質問には関係ありませんが・・・ 表示中の画像の番号を記憶させているようですが、画像要素にactiveなどのクラスを設定することで表示中の要素を識別できるようにしておけば、番号を記憶する必要もありませんし場合によってはactiveとそうでないものの表示をCSSで設定しておくことも可能です。(ご質問のコードではみなfadeで処理しているみたいなので、あまり関係ないですけれど) 番号を記憶しておくにしても、直接の画像名とせずにサムネイルの何番目という順番として利用するほうが、画像名の自由度は増加します。(現状は画像名の番号と一致させねばならない) また、n=4と決め打ちになっていますが、サムネイルの要素数を調べてそれに応じて処理をするようにすることで、画像の数が限定されないコードにすることも可能です。 同様に、サムネイルとメイン表示の画像が同じ名前(又は○○_bigのように規則性のあるもの)であるなら、img = "~img_main0" + n;のようなことをしなくても、サムネイルのsrcから生成するようにしておくことで汎用性が増すと考えられます。(リンク先のuriはその様にしてコピーしているようですが…) よくわからないためかなり想像が入っていますので、違っていたならば御容赦。

yyyyyyyy8
質問者

お礼

お礼が遅くなりまして申し訳ありません。 とても参考になりました! ありがとうございました。

関連する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について、今現在添付画像のようなサムネイルをマウスオーバーしますと、 メイン画像が切り替わるようなものをjjqueryを使用して制作しました。 ここから、setIntervalを使用して画像が何もしなければ勝手に切り替わるように、 またマウスオーバーをしている際は切り替わらないように、そしてマウスアウトしたら そこの画像から順にsetIntervalが開始されるようにしたいと思っております。 そこの作業が出来ず困っておりまして、是非ともお教え頂ければと思います。 今現在のhtml , css , jsの方は記載しておきます。※reset.cssは除きます。 <body> <div id="wrap"> <div id="sec1"> <div id="photoBox"> <ul id="photo"> <li><img src="img/plan1.jpg" alt="食1" /></li> <li><img src="img/plan2.jpg" alt="食2" /></li> <li><img src="img/plan3.jpg" alt="食3" /></li> </ul> <ul id="thumb"> <li class="first"><img src="img/plan1_s.jpg" alt="" /></li> <li><img src="img/plan2_s.jpg" alt="" /></li> <li><img src="img/plan3_s.jpg" alt="" /></li> </ul> </div>     </div> </div> </body> -------------------------------------------------------------------- div#wrap{ width:394px; margin:0 auto; } div#photoBox{ width:394px; height:391px; padding:40px 0; border-bottom:1px solid #CCC; } div#photoBox ul#photo{ width:394px; height:295px; padding-bottom:5px; position:relative; } div#photoBox ul#photo li{ width:394px; height:295px; display:block; position:absolute; top:0; left:0; } div#photoBox ul#thumb{ width:394px; height:91x; position:relative; } div#photoBox ul#thumb li{ float:left; padding-left:5px; } div#photoBox ul#thumb li.first{ padding-left:0; } --------------------------------------------------------- (function(){ var photo = $('#photo').find('li'); var thumb = $('#thumb').find('li'); photo.hide().eq(0).show(); thumb.hover(function(){ $(this).stop().fadeTo('fast', 0.6); photo.stop().fadeTo('fast', 0) .eq($(this).index()) .stop().fadeTo('fast', 1); }, function(){ $(this).stop().fadeTo('fast', 1); }); })

  • Jqueryで画像タイトル表示させる

    ギャラリーを作っていいるのですが、それぞれの画像ごとに説明文やタイトルを表示させたいのです。 サムネイルクリック後に大きな画像を、そのしたに説明文・タイトルをそれぞれ同時に表示させる方法を教えてください。 以下がソースになります。 (jQueryプラグインでサムネイルにフェードをかけています) ■HTML■ <!DOCTYPE html> <html> <head> <title>フォト ギャラリー サンプル #01</title> <link href="style.css" rel="stylesheet" type="text/css" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js"></script> <script type="text/javascript"> $(function(){ $('a img').hover( function(){ $(this).fadeTo(200, 0.6); }, function(){ $(this).fadeTo(200, 1.0); } ); }); </script> </head> <body> <div id="wrapper"> <div class="image"> <div id="n1"><img src="big_01.jpg"title="aaaaaaaaaa/></div> <div id="n2"><img src="big_02.jpg" title="aaaaaaaaaa"/></div> </div> <div id="thum"> <ul> <li><a href="#n1" class="thum"><img src="thum_01.png" /></a></li> <li><a href="#n1" class="thum"><img src="thum_01.png" /></a></li> </ul> </div> </div><!--wrapper--> </body> </html> ■CSS■ #wrapper{ width:840px; border:solid #F00 1px; margin: 0 auto; padding: 0 40px; } .image { overflow: hidden; margin-top: 16px; width: 300px; height: 474px; border: 1px solid #ddd; float:left; } #thum{ margin-left: 310px; height:474px; } #thum img { border: #eee 2px solid; height:100px; width:100px; padding: 5px; margin-left: 7.5px; margin-bottom: 7px; float:left; } #thum li{ display:inline; list-style:none; } よろしくお願いします。

    • 締切済み
    • CSS
  • マウスオーバーで画像の入れ替え

    以下のソースでマウスオーバー時に画像の入れ替えをしたいのですが、IE6では動作するのですが、firefoxでは動作しません。 firefoxでも動くようにするにはどうしたらいいですか? アドバイスよろしくお願いいたします。 <html> <head> <script language="JavaScript"> <!-- // タイマー変数の初期化 timer = ""; // スワップイメージ function SwapImage(img) { obj = document.getElementById("image"); obj.src = img; clearTimeout(timer); timer=setTimeout('DefaultImage()',5000); } // イメージ画像の初期化 function DefaultImage() { obj = document.getElementById("image"); obj.src = 'img/default.gif'; clearTimeout(timer); } //--> </script> </head> <body> <div class="btn"><a href="#"><img src="img/sample1.jpg" onmouseover="SwapImage('img/test01.jpg')" width="100" height="50" border="0" /></a></div> <div class="btn"><a href="#"><img src="img/sample2.jpg" onmouseover="SwapImage('img/test02.jpg')" width="100" height="50" border="0" /></a></div> <div class="btn"><a href="#"><img src="img/sample3.jpg" onmouseover="SwapImage('img/test03.jpg')" width="100" height="50" border="0" /></a></div> <div id="photo"><img src="img/default.gif" name="image" width="300px" height="150px"></div> </body> </html>

  • jQueryでn個ずつwrapする方法

    要素をn個づつwrapする方法を教えてください。 例えば <div id="wrap"> <p>text1</p> <p>text2</p> <p>text3</p> <p>text4</p> <p>text5</p> </div> を↓ <div id="wrap"> <div class="contents"> <p>text1</p> <p>text2</p> <p>text3</p> </div> <div class="contents"> <p>text4</p> <p>text5</p> </div> </div> としたいです。 var sets = [], temp = []; $('#wrap p').each(function(i) { temp.push(this); if (i % 3 == 2) { sets.push(temp); temp = []; } }); if (temp.length) sets.push(temp); $.each(sets, function() { $(this).wrap("<div class='contents'></div>"); }); と書いてみましたが、うまくいきませんでした。 どなたか、ご教授願います。

  • jQuery マウスオーバーのたびに処理を繰り返す

    よろしくお願いします。 jQueryを使用して、「サムネイルにマウスを乗せると別のDiv内に大きい画像とtitle属性のテキストを表示させる」というものを作ろうとしています。 別のDiv要素には上下左右中央に画像を表示させたいと思い、見よう見まねで下記のようなコードを作成したのですが、表示される画像がサムネイル時の大きさに縮小されてしまい、元の大きさの画像として表示されません。(サムネイルには元画像をcssで縮小して表示しています) やりたいことは以下の2つです。 ・Div要素には元画像の大きさで表示させたい。 ・できれば、フェードイン・アウトで画像を切り替えたい。 色々調べてみたのですが行き詰ってしまい、こちらに質問させて頂きました。 お分かりになる方がいらっしゃいましたら、お知恵をお貸し頂けませんでしょうか。 ////スクリプト//// $(function(){ $('#contents li a').click(function(){ return false; }); $('#contents li a').mouseover(function(){ var $title = $(this).children('img').attr('title'); var w = $(this).children('img').width(); var h = $(this).children('img').height(); $('#photo img').attr('src',$(this).attr("href")); $('#photo span').text($title); var mtop = (h/2)*(-1); var mleft = (w/2)*(-1); $('#photo img').css({"width": + w + "px" ,"height": + h + "px" , "top": "50%" , "left": "50%" , "margin-top": + mtop + "px" , "margin-left": + mleft+ "px"}); }); }); ////HTML//// <div id="contents"> <ul> <li><a href="1.jpg"><img src="1.jpg" title="あああああああああああああああ" /></a></li> <li><a href="2.jpg"><img src="2.jpg" title="いいいいいいいいいいいいいいい" /></a></li> <li><a href="3.jpg"><img src="3.jpg" title="ううううううううううううううう" /></a></li> </ul> </div> <div id="photo"> <img src="1.jpg" /> <span>テキストテキスト</span> </div>

  • 画像の先読み

    画像の先読み 拡大画像の表示場所とサムネイルの表示場所がありサムネイルをクリックすると拡大画像の場所にクリックしたサムネイルが拡大表示されるものを作っています。 以下のソースで試しており動作は問題ないのですが動作がぎこちないです。 具体的にはサムネイルをクリックすると拡大画像の場所がフェードアウトしフェードインします。 ※ここまでは正常 フェードインしたかと思いきやクリックする前の画像が1秒程表示されその後クリックした画像に切り替わる感じでフェードの効果が全く無意味になってしまいます^^; 事情があり画像の出力をphpで行っているのが原因かと思ったのですが単純にキャッシュの問題かとも思い画像の先読みなどを組み込めればいいのですがどのようにすれば可能でしょうか? [html] <p id="imgMain"><img src="resize.php?file=/imgimg01.jpg" alt="" id="target" /></p> <ul id="gallery"> <li><a href="resize.php?file=/img/img01.jpg" ><img src="resize.php?file=/img/img01.jpg&amp;x=173" alt="" /></a></li> <li><a href="resize.php?file=/img/img02.jpg"><img src="resize.php?file=/img/img02.jpg&amp;x=173" alt="" /></a></li> <li><a href="resize.php?file=/img/img03.jpg"><img src="resize.php?file=/img/img03.jpg&amp;x=173" alt="" /></a></li> </ul> [js] $(document).ready( function() { $("#gallery a img") .fadeTo(1, 1) .hover( function() { $(this).fadeTo(200, 0.5); }, function() { $(this).fadeTo(500, 1); } ) $("#gallery a").click(function() { var changeSrc = $(this).attr("href"); $("#target").fadeOut( "slow", function() { $(this).attr("src", changeSrc); $(this).fadeIn(); } ); return false; }); });

  • 初心者です jQueryのマウスオーバーについて

    jQueryを使った画像を使ったメニューを作成しています。 <ul class="drop2">をマウスオーバーしたときに親の位置にある画像1.gifが画像1_o.gifに 切り替わるようにしたいと思っています。 調べながら作ってみたのですが、画像の切替がうまくいきません。 parentを使わずに画像1.gifをdivで囲って指定すれば切り替わったのですが、2つ以上メニューを 作ると、他のulにマウスオーバーしたときも切り替わってしまいます。 ご教授して頂けると嬉しいです。 よろしくお願いいたします。 ■スクリプト部分 jQuery(function ($) { $('ul.drop2').mouseover(function () { // console.log('mouseover'); デバック用 var onSrc = $(this).parent('ul.drop1 a img').attr('src').replace('.gif', '_o.gif'); $(this).parent('ul.drop1 a img').attr('src', onSrc); }); $('ul.drop2').mouseout(function () { var onSrc =$(this).parent('ul.drop1 a img').attr('src').replace('_o.gif', '.gif'); $(this).parent('ul.drop1 a img').attr('src', onSrc); }); }); ■html部分 <ul class="drop1"> <li><a href="/"><img src="画像1.gif" alt="HOME" /></a> <ul class="drop2"> <li><a href="#"><img src="画像1-1.gif" alt="HOME" /></a></li> <li><a href="#"><img src="画像1-2.gif" alt="HOME" /></a></li> </ul> </li> </ul>

  • JS:画像を繰り返しランダム読込すると途中で止まる

    現状は、ページの読み込み時にランダムで2枚の画像を読み込んで、loadのたびに違う画像が表示されるようにしています。 それをリロードせずに繰り返し画像を切り変えるように変更したく下記のように「setTimeout("getImg()",1000); 」を追加したところ、画像の切り替え8回目の切り替えあたりで止まってしまいます。(その際、2枚の画像が同じ画像になります。毎回同じ画像でなるわけではない) 変数か何かをクリアすればいいような気はするのですが、初心者レベルのためわかりませんでした。 原因わかる方いましたらご教示頂ければ幸いです。 javascript:img1111.js ------------------------ function getImg(str){ //ランダム function randNum(){ var randNum = Math.floor(Math.random()*img.length); return randNum; } //表示処理 if(str=="wide"){ var n = randNum(); setIMG = 'url(images/'+img[n][1]+')'; document.getElementById('inner_recomend').style.backgroundImage = setIMG; if(img[n][0]){ setURL = '<a href="'+img[n][0]+'" target="_blank"></a>'; }else{ setURL = ''; } document.getElementById('right_contents_rec').innerHTML = setURL; }else{ //画像とURL取得 function imgSet(id,n){ var setIMG = 'url(images/'+img[n][1]+')'; document.getElementById(id).style.backgroundImage = setIMG; if(img[n][0]){ setURL = '<a href="'+img[n][0]+'" target="_blank"></a>'; }else{ setURL = ''; } document.getElementById(id).innerHTML = setURL; } var n = randNum(); imgSet('right_contents_rec1',n); img.splice(n,1); var nn = randNum(); imgSet('right_contents_rec2',nn); } //次のタイマー呼びだし setTimeout("getImg()",1000); } ------------- htmlは下記 ------------- <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <div id="swap"> <div id="select01"> <div id="inner_recomend"> <div id="right_contents_rec1"></div> <div id="right_contents_rec2"></div> </div> </div> </div> </body> <script type="text/javascript" src="img1111.js"></script> <script type="text/javascript"> var img = new Array(); //画像リストの設定 ('URL','画像ファイル名') img[0] = Array('http://www.000.co.jp/','15961.jpg'); img[1] = Array('http://www.000.co.jp/','15962.jpg'); img[2] = Array('http://www.000.co.jp/','15963.jpg'); img[3] = Array('http://www.000.co.jp/','15964.jpg'); img[4] = Array('http://www.000.co.jp/','15965.jpg'); img[5] = Array('http://www.000.co.jp/','15966.jpg'); img[6] = Array('http://www.000.co.jp/','15967.jpg'); img[7] = Array('http://www.000.co.jp/','15968.jpg'); img[8] = Array('http://www.000.co.jp/','15969.jpg'); // getImg(); </script> </html> ------------- よろしくお願いいたします。

  • マウスオーバーで大きい画像が切り替わる設定について

    同一ページで複数のサムネイルにマウスオーバーしたら 大きな画像が切り替わる設定をしたいのですが・・・ 下記サイト(同一ページで複数のスワップイメージ(ギャラリー)を見せたい)の 『フェードとかない普通のバージョン』を参考にしております。 下記サイトのスクリプトでは、サムネイルをクリックして画像の切り替えを 実行するのですが、サムネイルにマウスを置くだけ(クリックなし)に変更する ことは可能でしょうか? JQuery $(function () { $('div.swap li a').click(function (e) { e.preventDefault(); var imagePath = $(this).attr('href'); var mainImage = $(this).parents('div.swap').find('p img'); $(mainImage).attr('src', imagePath); }); }); 参考サイト http://depthcode.com/2010/10/swap.html クリックなしに変更可能であればご教授いただけないでしょうか。 よろしくお願いします。

専門家に質問してみよう