※ ChatGPTを利用し、要約された質問です(原文:jQueryのfadeToの動きが変(サーバ上))
jQueryのfadeToの動きが変(サーバ上)
このQ&Aのポイント
jQueryを使用したイメージギャラリーで、メイン画像が指定した時間で薄っすらと表示されるような効果を実現しています。
ローカル環境では正常に動作するが、サーバ上では初回サムネイルをクリックしたときに遅延が発生し、fadeToの効果が聞かなくなります。
ブラウザを閉じない状態で同じサムネイルをクリックすると正常に動作することから、キャッシュの問題である可能性があります。
サムネイル画像をクリックするとメイン画像にそれを映し出し
そのメイン画像が指定した時間で薄っすらと表示されるような効果のイメージギャラリーをjQeryを使って制作しています。
jQueryバージョン:jquery-1.7.2.min.js
※(薄っすらと表示される効果:jqueryにてメイン画像のopacityを0→1)に変化させて実現しています
【問題点】
ローカルPC上でテストすると意図する動作をするのにサーバ上にデータをアップしてテストすると
メイン画像の移り変りにブラウザ起動後、初回サムネイルをクリックしたときのみ遅延が発生し、JqeryのfadeToも効きません。
何かjQueriのfadeto関係などソースに問題があるとか、これはキャッシュの問題で仕方ないとかあればご指導のほどよろしくお願いします。
【問題点詳細】
しかし、自分のパソコン内(ローカル環境)で動作させてみると意図したとおりになるのですが、
データをレンタルサーバ上にアップし、確認してみると、サムネイルをクリックすると
jqueryのfadetoの(opacityを0から1にする部分)動作がおかしくなります。
ブラウザを起動し初回サムネイルをクリックしたときのみ、メイン画像が前の残像が残り(遅延発生)し、fadetoの(opacityの変化)が聞かなくなります。
【状況整理】
1.どのPCでもローカル環境(自分のPC内)でテストすると意図する動作をする。
2.レンタルサーバ上だと、ブラウザを起動後、初回サムネイルをクリックしたときのみおかしい動作をする。(メイン画像の切り替わりに遅延が発生する(fadetoも効かない))
3.ブラウザを閉じない状態で、同じサムネイルをクリック(2回目)すると意図する動作をする。
※2.3を考えますと2回目以降クリックしたときに大丈夫なのは1回目クリックしたときに取得したメイン画像のキャッシュがブラウザに保存されているからだと思います。
またローカルだと大丈夫なのはメイン画像取得する時間(ダウンロードがない)から
じゃないかな?とも思います。
メイン画像に使っているそれぞれのファイルサイズは80KBと軽いです。
またIE 8/9でもfirefox12でも同じ状況です。
■HTMLソース(XHTML)
<div id="carousel">
<!--メイン画像-->
<div><img src="img/main.jpg" alt="" class="main_img"/></div>
<!--サムネイル画像-->
<div class="anyClass">
<ul>
<li><a href="img/photo1.jpg"><img src="img/photo1_thumb.jpg" alt="" /></a></li>
<li><a href="img/photo2.jpg"><img src="img/photo2_thumb.jpg" alt="" /></a></li>
<li><a href="img/photo3.jpg"><img src="img/photo3_thumb.jpg" alt="" /></a></li>
</ul>
</div>
</div>
■Javascript(jQuery)
$(function() {
$("#carousel .anyClass a").click(function(){
$("#carousel .main_img").css("opacity",0); ←いったんメイン画像のopacityを0に落とす
$("#carousel .main_img").attr("src",$(this).attr("href")); ←メイン画像のURLにセット
$("#carousel .main_img").fadeTo("normal",1); ←メイン画像のopacityを1に変化
return false;
});
});
お礼
大きなヒントありがとうございました。 画像の読み込みにタイムラグがあるのが原因とわかり、 ページが表示されたらメインに映し出す画像をjavascriptのプリロードすることで実装できました。 これでタイムラグがなくなりました。