2009-11-21 21 views
31

Vorrei modificare la posizione di sfondo di una classe CSS mentre aleggiava un elemento-li.Cambia la posizione dello sfondo con 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); 
} 

Qualche suggerimento su come fare questo?

risposta

41

Qui si va:

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

Che cos'è un valore valido di 'newValue'? È una stringa? In che formato è? –

+0

Sta cambiando la proprietà 'css backgroundPosition', maggiori dettagli qui: 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

Realmente incompleto. Non ripristina backgroundPostion quando si ferma il passaggio del mouse. Poiché non lo fa, non considera anche che potrebbe già essere impostato un valore significativo per backgroundPosition che deve essere ripristinato – jitter

+0

Bene, tutto ciò che ha chiesto di Jitter. –

+1

No. Rileggere domanda: "mentre si passa sopra un elemento-li". Che per me implica "Voglio che si azzeri quando si blocca" – jitter

1

Imposta nuovo valore per backgroundPosition sul carousel div quando un Li nella submenu div è aleggiava. Rimuove backgroundPosition quando il passaggio del mouse termina e reimposta il valore backgroundPosition al valore precedente.

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

Voi ragazzi sono complicare le cose. Puoi farlo semplicemente da CSS. risposta

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

non funziona in IE6. – meo

+15

@meo Sono così tentato di dire "A chi importa?" ma Argh. IE6. –

+15

IE6 è finalmente morto, anche gli Stati Uniti non se ne preoccupano – Neil

1

di ribellione di cui sopra non potrà mai funzionare, perché per i CSS, 'background-position' è in realtà una scorciatoia per 'background-position-x' e 'background-position-y' in modo che la versione corretta del suo codice sarebbe:

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

Ci sono voluti circa 4 ore di sbattere la testa contro di esso per venire a quella realizzazione aggravanti.

+1

Funziona in alcuni browser, ma non in Firefox: [background-position-x non è un css standard e non è sovradimensionato in tutti i browser] (http: // stackoverflow.it/questions/9511104/jquery-background-position-x-issue) - ad es. Firefox lo ignora anche in jQuery v2, [vedi questa demo] (http://jsbin.com/ivupuj/2/edit) – user568458

+0

[Ecco qualcosa di simile che aggiusta il browser incrociato x o y] (http: // stackoverflow .com/a/18515087/568.458) – user568458

Problemi correlati