jQuery

2009-11-21 6 views
31
ile arka plan konumunu değiştirin

Bir CSS sınıfının arka plan konumunu değiştirmek için bir li-elementi kaydırıyorum.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); 
} 

Bunun nasıl herhangi bir öneriniz? submenu div bir li süpürdü edilir carousel div üzerinde backgroundPosition için

cevap

41

gitmek:

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

"newValue" nin geçerli bir değeri nedir? Bu bir ip mi? Hangi formatta? –

+0

'css property backgroundPosition' değiştiriyor, daha fazla ayrıntı burada: http://www.w3schools.com/css/pr_background-position.asp – Jakub

+1

@Jakub - link is 404 – Neil

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

Aslında tamamlanmamış. Gezinme durduğunda backgroundPostion'u sıfırlamaz. Bunu yapmadığı için, geri yüklemesi gereken – jitter

+0

için backgroundPosition için anlamlı bir değer olabileceğini de düşünmüyor. –

+1

Hayır. Soruyu tekrarla: "bir li-elementi tutarken." Hangisi benim için "Gezinme durduğunda sıfırlanmasını istiyorum" diye işaret ediyor – jitter

1

Setleri yeni değer. Uçları bittiğinde backgroundPosition öğesini kaldırır ve backgroundPosition değerini eski değerine sıfırlar. İşte

$('#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

Sizler şeyler karmaşık hale. Bunu CSS'den basit bir şekilde yapabilirsiniz.

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

, IE6'da çalışmıyor. – meo

+15

@meo "Kimin umurunda?" Demek için çok çekicim. ama Argh. IE6. –

+15

IE6 nihayet öldü, MS bile umrumda değil – Neil

1

isyanın cevabı yukarıdaki aslında, çünkü CSS, işe yaramaz, 'background-position' doğru sürümüne yüzden 'background-position-x' ve 'background-pozisyonunda-y' için steno aslında onun kod şöyle olacaktır:

$(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); 
    }); 
}); 

o ağırlaştırıcı fark etmesi gerekir karşı başımı beceriyor yaklaşık 4 saat sürdü.

+1

Bazı tarayıcılarda çalışır, ancak Firefox'ta değil: [background-position-x standart css değildir ve tüm tarayıcılarda desteklenmez] (http: // stackoverflow.com/questions/9511104/jquery-background-position-x-issue) - ör. Firefox, jQuery v2'de bile görmezden gelir, [bu demoya bakın] (http://jsbin.com/ivupuj/2/edit) – user568458

+0

[Burada x veya y çapraz tarayıcıyı ayarlayan benzer bir şey var] (http: // stackoverflow com/a/18515087/568458) – user568458