2012-06-13 35 views
5

Follwing là phần của tập lệnh mà tôi đang sử dụng để tạo thanh trượt bằng cách thay đổi hình nền cho mọi imageobject i có trong một chu kỳ ..Chaging background-Image sử dụng Jquery gây ra hiệu ứng nhấp nháy

 #Sliderimg - height is 500px, 

     $("#Sliderimg").css({ 
      "background-image": "url(../Images/" +SliderImageObj.image + ")", 
      "display": "block", 
      "z-index": "50px" 
     }); 

Điều gì có thể đã đi sai với điều này khi tôi nhận được hiệu ứng nhấp nháy mỗi khi tôi thay đổi hình ảnh, Vấn đề của tôi không phải là với hình ảnh mới sắp tải, nhấp nháy của nó (nhấp nháy ở cuối màn hình) cho hình ảnh cũ sắp được thay thế.

+0

W hy là bạn thiết lập các thuộc tính hiển thị và z-index mỗi khi bạn muốn cập nhật hình nền? Tốt nhất chuyển các thuộc tính hiển thị và z-index sang CSS của bạn. Ngoài ra z-index: 50px không hợp lệ. z-index lấy giá trị số nguyên. – Lowkase

+0

bạn có ảnh chụp màn hình không? – Grigor

+1

Bạn có đang tải trước hình ảnh của mình không? Nếu không, nhấp nháy có thể trong khi trình duyệt đang tải xuống. –

Trả lời

0

Có thể xóa "px" khỏi thuộc tính chỉ mục z của bạn? Nó có giá trị thập phân.

+0

Ha, được phát hiện tốt! –

+0

@ChrisFrancis Cảm ơn :) nhưng không ai đánh giá cao rằng: P –

+0

Tôi đồng ý với các bạn, tôi đã sửa lỗi đó, nhưng tôi vẫn gặp vấn đề tương tự – user824910

1

Bạn thấy nhấp nháy vì mỗi khi bạn thay đổi hình nền, trình duyệt của bạn phải tải xuống trước khi có thể hiển thị nền. Nếu hình ảnh không quá lớn (nhiều hơn nói, 5kb), bạn có thể thử lưu vào bộ nhớ đệm trong trình duyệt bằng cách áp dụng chúng cho các yếu tố mà chúng không hiển thị.

Ngoài ra, 50px không phải là chỉ mục z hợp lệ, thuộc tính đó chỉ yêu cầu số nguyên.

+0

Không đúng, một trình duyệt thích hợp sẽ lưu hình ảnh trong khi đi xe đạp và ghi nhớ những người đó, chiến đấu chậm trễ tải xuống. nhấp nháy xuất phát từ cách trình duyệt vẽ lại các mục. – Tschallacka

+0

Vấn đề của tôi không phải là với hình ảnh mới sắp tải, nhấp nháy của nó cho hình ảnh cũ sắp được thay thế – user824910

+0

Nó có thể giúp bạn có một ví dụ cụ thể hơn, vì hơi khó để nói chính xác những gì đang diễn ra. – davethegr8

0

trình duyệt buộc phải vẽ lại toàn bộ nền.

cách thực hiện việc này bằng cách đặt nền thành trắng và sau đó vẽ lại nền mới.

sử dụng jquery.animate() để chiến đấu với điều này.

0

Tôi đã gặp vấn đề tương tự vào ngày khác. Kỳ lạ thay, nó có vẻ là ok trong FF, nhưng sẽ nhấp nháy trong IE, Chrome, và đôi khi Safari. Giải pháp là sử dụng một bảng sprite css. Bạn tạo một hình ảnh có cả hai hình nền bên cạnh nhau. Bạn chỉ hiển thị một phần của trang tính nền. bạn chuyển đổi nó bằng cách điều chỉnh lề trên nền. Bạn có thể xử lý các điều chỉnh lề bằng cách sử dụng addClass và removeClass. Dưới đây là mã, xem ở đây để một fiddle: http://jsfiddle.net/fMhMY/

CSS

.navButton span{ 
width:32px; 
height:32px; 
display:block; 
} 

a.leftButton span, a#leftButton span{ 
background-image:url(Prev.png); 
background-position:-64px 0px; 
} 

/*nav button sprites */ 

/*sprite order is pushed, hover, natural */ 

a.leftButton.navOver span, a.rightButton.navOver span{ 
background-position:-32px 0px; 
} 

a.leftButton.navPressed span, a.rightButton.navPressed span{ 
background-position:0px 0px; 
} 

HTML

<div style='display:inline-block'> 
    <a href="javascript:void(0);" class="leftButton navButton" id='lefty'> 
     <span></span> 
    </a> 
</div> 

jQuery

$('.leftButton').mousedown(function() { 

     $('.leftButton').addClass('navPressed'); 
     console.log('mousedown'); 

}); 
$('.leftButton').mouseup(function() { 
     $('.leftButton').removeClass('navPressed'); 
     console.log('mouseup'); 
}); 

$('.leftButton').hover(function() { 
     $('.leftButton').addClass('navOver'); 
     console.log('hover'); 
}); 


$('.leftButton').mouseout(function() { 
     $('.leftButton').removeClass('navPressed').removeClass('navOver'); 
     console.log('mouseout'); 
}); 
Các vấn đề liên quan