2009-11-21 11 views
31

li要素をホバリングしながらCSSクラスの背景位置を変更したいと思います。jQueryでバックグラウンドの位置を変更してください

HTML:

<div id="carousel"> 
    <ul id="submenu"> 
     <li>Apple</li> 
     <li>Orange</li> 
    </ul> 
</div> 

CSS:

#carousel { 
    float: left; 
    width: 960px; 
    height: 360px; 
    background: url(../images/carousel.png); 
} 

これを行う方法上の任意の提案は?

答えて

41

ここに行く:

$(document).ready(function(){ 
    $('#submenu li').hover(function(){ 
     $('#carousel').css('background-position', '10px 10px'); 
    }, function(){ 
     $('#carousel').css('background-position', ''); 
    }); 
}); 
+20

'newValue'の有効な値は何ですか?それは文字列ですか?それはどのフォーマットですか? –

+0

彼は 'CSSプロパティーbackgroundPosition'を変更しています。詳細はこちら:http://www.w3schools.com/css/pr_background-position.asp – Jakub

+1

@Jakub - リンクは404 – Neil

2
$('#submenu li').hover(function(){ 
    $('#carousel').css('backgroundPosition', newValue); 
}); 
+1

実際には不完全です。ホバリングが停止したときにbackgroundPostionをリセットしません。それがしないので、すでに復元される必要があるbackgroundPositionに意味のある値が設定されている可能性もあると考えていません。 – jitter

+0

彼がJitterを求めているすべてです。 –

+1

いいえ、もう一度質問してください。私には、「ホバリングが止まるとリセットされるようにしたい」ということを意味します。 – jitter

1

submenu divの中のLiが推移したときcarousel divの上backgroundPositionの新しい値を設定します。ホバリングが終了したときにbackgroundPositionを削除し、backgroundPositionを古い値にリセットします。

$('#submenu li').hover(function() { 
    if ($('#carousel').data('oldbackgroundPosition')==undefined) { 
     $('#carousel').data('oldbackgroundPosition', $('#carousel').css('backgroundPosition')); 
    } 
    $('#carousel').css('backgroundPosition', [enternewvaluehere]); 
}, 
function() { 
    var reset = ''; 
    if ($('#carousel').data('oldbackgroundPosition') != undefined) { 
     reset = $('#carousel').data('oldbackgroundPosition'); 
     $('#carousel').removeData('oldbackgroundPosition'); 
    } 
    $('#carousel').css('backgroundPosition', reset); 
}); 
26

君たちは物事を複雑にしています。 CSSからこれを簡単に行うことができます。 CSSに、 '背景位は' 実際には 'のbackground-position-x' のための速記と 'のbackground-position-Y' であるため、上記の

#carousel li { background-position:0px 0px; } 
#carousel li:hover { background-position:100px 0px; } 
+3

はIE6では動作しません。 – meo

+15

@meo「誰が気にする?しかし、アー。 IE6。 –

+15

IE6が最終的に死んでいても、MSはそれを気にしません – Neil

1

反乱の答えは、実際に彼の正しいバージョンので、動作しません。コードは次のようになります。

$(document).ready(function(){ 
    $('#submenu li').hover(function(){ 
     $('#carousel').css('background-position-x', newValueX); 
     $('#carousel').css('background-position-y', newValue); 
    }, function(){ 
     $('#carousel').css('background-position-x', oldValueX); 
     $('#carousel').css('background-position-y', oldValueY); 
    }); 
}); 

それが悪化実現に来ることに対して、それは私の頭を叩いて約4時間かかりました。

+1

これは一部のブラウザでは動作しますが、Firefoxでは動作しません。[background-position-xは標準のCSSではなく、すべてのブラウザではサポートされていません](http:// stackoverflow。com/questions/9511104/jquery-background-position-x-issue) - たとえばFirefoxはjQuery v2でもそれを無視します。[このデモを見る](http://jsbin.com/ivupuj/2/edit) – user568458

+0

[ここでは、xまたはyのクロスブラウザを調整するのに似たものがあります](http:// stackoverflow .com/a/18515087/568458) – user568458

関連する問題