これは私のimgです。
<img src="one.png" id="one" onMouseOver="animateThis(this)">
ユーザーがjQueryを使用してカーソルを合わせたときに、この画像のsrcを「oneHovered.png」にゆっくりと変更したいと考えています。これを行うにはどのjQueryメソッドが最適ですか? 私が目にする多くの例では、CSS の背景を変更する必要があります。src 属性を直接変更するものはありますか?
これは私のimgです。
<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 ホバーイベントは、ユーザーがマウスで画像の上にカーソルを置いたときに関数が確実に起動するようにします。
詳細については、jQuery fadeOutおよびjQuery fadeInも参照してください。
画像の読み込み時間に関して考えられる問題:
ユーザーが初めて画像にカーソルを合わせてリクエストを行った場合、実際のフェードインにわずかな不具合が発生する可能性があります。これは、newImage.png をリクエストしている間にサーバーからの遅延が発生するためです。これを回避するには、このイメージをプリロードします。画像のプリロードに関する StackOverflow に関するリソースがいくつかあります。
min-height
@jmort253 に加えて、フェードアウトする前にを追加していただけると嬉しいです。そうしないと、特にレスポンシブ画像でぎくしゃくすることがあります。
私の提案は
$('#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);
});
});