2009-11-21 83 views
31

Tôi muốn thay đổi vị trí nền của lớp CSS trong khi di chuột qua phần tử li.Thay đổi vị trí nền bằng 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); 
} 

Bất kỳ đề xuất về cách để làm điều này?

Trả lời

41

Ở đây bạn đi:

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

Giá trị hợp lệ của 'newValue' là gì? Nó là một chuỗi? Định dạng là gì? –

+0

Anh ấy đang thay đổi 'css property backgroundPosition', chi tiết hơn tại đây: http://www.w3schools.com/css/pr_background-position.asp – Jakub

+1

@Jakub - liên kết là 404 – Neil

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

Thực tế chưa hoàn tất. Không đặt lại backgroundPostion khi lơ lửng dừng lại. Vì nó không làm điều đó, cũng không xem xét rằng có thể có giá trị có ý nghĩa thiết lập cho backgroundPosition cần được khôi phục – jitter

+0

Vâng đó là tất cả những gì anh ta đã yêu cầu cho Jitter. –

+1

No. Đọc lại câu hỏi: "trong khi di chuột qua phần tử li." Mà với tôi ngụ ý "Tôi muốn nó thiết lập lại khi lơ lửng dừng lại" – jitter

1

Sets giá trị mới cho backgroundPosition trên carousel div khi một li trong submenu div đang bay lượn. Xóa backgroundPosition khi di chuột kết thúc và đặt lại backgroundPosition thành giá trị cũ.

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

Các bạn đang làm phức tạp mọi thứ. Bạn có thể làm điều này đơn giản từ CSS. câu trả lời

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

không hoạt động trong IE6. – meo

+15

@meo Tôi rất muốn nói "Ai quan tâm?" nhưng Argh. IE6. –

+15

IE6 cuối cùng đã chết, thậm chí MS không quan tâm đến nó – Neil

1

nổi loạn của trên sẽ không thực sự làm việc, bởi vì CSS, 'background-position' thực sự là viết tắt cho 'background-position-x' và 'background-position-y' để các phiên bản đúng của mình mã sẽ là:

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

Mất khoảng 4 giờ đập đầu tôi để chống lại điều đó.

+1

Điều đó hoạt động trong một số trình duyệt, nhưng không phải Firefox: [background-position-x không phải là tiêu chuẩn css và không bị chặn trong tất cả các trình duyệt] (http: // stackoverflow.com/questions/9511104/jquery-background-position-x-issue) - ví dụ: Firefox chỉ bỏ qua nó ngay cả trong jQuery v2, [xem demo này] (http://jsbin.com/ivupuj/2/edit) – user568458

+0

[Đây là một cái gì đó tương tự mà điều chỉnh hoặc x hoặc y qua trình duyệt] (http: // stackoverflow .com/a/18515087/568458) – user568458