これは私の画像です、<img src="one.png" id="one" onMouseOver="animateThis(this)">
ユーザーがjQueryを使用してカーソルを合わせたときに、この画像srcを「oneHovered.png」にゆっくりと変更したいと思います。これを行うのに最適なjQueryメソッドはどれですか?私が見る多くの例では、CSSの背景を変更したいと思っています。 src属性を直接変更するものはありますか?
最初に画像をフェードアウトし、最初のオプションパラメータを使用してフェードアウトの期間を制御することから始めることができます。フェードアウトが完了すると、匿名のコールバックが発生し、画像のソースが新しいものに置き換えられます。その後、ミリ秒単位で測定された別の継続時間値を使用して画像をフェードインします。
元のHTML:
<img src="one.png" id="one" />
JavaScript:
$('#one').hover(function() {
// increase the 500 to larger values to lengthen the duration of the fadeout
// and/or fadein
$('#one').fadeOut(500, function() {
$('#one').attr("src","/newImage.png");
$('#one').fadeIn(500);
});
});
最後に、jQueryを使用すると、HTML自体にJavaScript属性を使用せずに、JavaScriptイベントを動的にバインドする方がはるかに簡単です。元のimg
タグを変更して、src
属性とid
属性だけを持つようにしました。
jQuery hover イベントは、ユーザーがマウスで画像にカーソルを合わせたときに関数が確実に起動するようにします。
詳細については、 jQuery fadeOut および jQuery fadeIn も参照してください。
画像の読み込み時間に関する問題の可能性:
ユーザーが画像にカーソルを合わせてリクエストするのが初めての場合、newImage.pngをリクエストしている間、サーバーからの遅延が発生するため、実際のフェードインにわずかな不具合が発生する可能性があります。この回避策は、このイメージをプリロードすることです。 画像のプリロードに関するStackOverflow にはいくつかのリソースがあります。
これを試して
<img class="product-images-cover" src="~/data/images/productcover.jpg" />
<div class="list-images-product">
<div>
<img class="thumbnail" src="~/data/images/product1.jpg" />
</div>
<div>
<img class="thumbnail" src="~/data/images/product2.jpg" />
</div>
</div>
$(document).ready(function () {
$(".list-images-product .thumbnail").click(function (e) {
e.preventDefault();
$(".product-images-cover").fadeOut(250).attr("src", $(this).attr('src')).fadeIn(250);
});
});
@ jmort253に加えて、フェードアウトする前にmin-height
を追加すると便利です。そうしないと、特にレスポンシブ画像がぎくしゃくすることがあります。
私の提案は
$('#one').hover(function() {
// add this line to set a minimum height to avoid jerking
$('#one').css('min-height', $('#one').height());
// increase the 500 to larger values to lengthen the duration of the fadeout
// and/or fadein
$('#one').fadeOut(500, function() {
$('#one').attr("src","/newImage.png");
$('#one').fadeIn(500);
});
});
Jqueryで画像ソースを変更する場合、読み込みに時間がかかり、ちらつきが発生します。この問題を解決するために、上記のコードを変更しました。
$(".list-images-product .thumbnail").fadeTo(1000,0.30, function() {
$(".list-images-product .thumbnail").attr("src",newsrc);
$(".list-images-product .thumbnail").on('load', function(){
$(".list-images-product .thumbnail").fadeTo(500,1);
});
});