2010-06-24 39 views
13

Tôi cần giải quyết vấn đề sau.Cách che phủ hình ảnh trong javascript?

Tôi có hai (hoặc nhiều hơn) hình ảnh .PNG có cùng kích thước. Mỗi ảnh PNG được tạo với màu nền trong suốt.

Tôi cần hiển thị img1 và khi nó img2, vì vậy ở những nơi có màu sắc trgparent, img1 sẽ được nhìn thấy.

Ví dụ: img1 phần trên chứa đầy màu trong suốt và bò trên phần dưới. img2 phần trên chứa các đám mây và downpart đầy màu sắc trong suốt.

Tôi muốn kết hợp hai hình ảnh này và thấy những đám mây phía trên bò.

Tôi hiểu rằng tôi cần phải sử dụng một số bộ lọc khi hiển thị cả hai hình ảnh, nhưng không chắc chắn một bộ lọc nào và thông số nào để sử dụng.

+0

Bạn cần phải nghiêm chỉnh thực hiện điều đó trong JS hoặc có thể bạn sử dụng các công cụ khác (I đang nghĩ về PHP/GD)? – nico

+3

Đây là điều bạn sẽ đạt được khi sử dụng CSS thay vì javascript –

Trả lời

3

Bạn không cần sử dụng bất kỳ loại bộ lọc nào (except in IE6).

Bạn chỉ cần đặt các phần tử <img> lên trên nhau, sử dụng CSS position: absolute để làm cho cả hai phần tử này chiếm cùng một khu vực.

In IE6, you'll need an AlphaImageLoader filter simply to display the PNGs with transparency

+0

Xin lỗi, chưa đề cập đến nó: Tôi đang ở IE6: ( Có cách nào để giải quyết vấn đề này không? – Leo

+0

@Leo: Có; bạn cần sử dụng 'AlphaImageLoader' http ://24ways.org/2007/supersleight-transparent-png-in-ie6 – SLaks

+0

Tôi hiểu rằng trong IE6 tôi cần sử dụng bộ lọc, như: filter: progid: DXImageTransform.Microsoft.AlphaImageLoader (...); Ai cũng có thể viết cách thực hiện? Cảm ơn – Leo

0

Bạn có thể thử thiết lập của họ .style.position để "tuyệt đối", cung cấp cho họ các tọa độ tương tự với bên trái và đỉnh (hoặc bên phải hoặc phía dưới), và sau đó thay đổi z-index của họ. Mặc dù nó khá bẩn, và có lẽ nó không hoạt động tốt với trang của bạn, nhưng tôi không thể nghĩ ra một giải pháp khác.

15

Something như thế này nên làm việc (chỉ sử dụng HTML/CSS):

HTML:

<div class="imageWrapper"> 
    <img class="overlayImage" src="cow.png"> 
    <img class="overlayImage" src="clouds.png"> 
    <img class="overlayImage" src="downpart.png"> 
</div> 

CSS:

.imageWrapper { 
    position: relative; 
} 
.overlayImage { 
    position: absolute; 
    top: 0; 
    left: 0; 
} 

Hãy ghi nhớ rằng IE6 không xử lý độ trong suốt trong PNG rất tốt. Nếu bạn cần nó để làm việc trong IE6, bạn sẽ cần phải áp dụng các bộ lọc mà bạn đã đề cập. Thủ tục này là detailed here.

+0

Tôi đã sử dụng ví dụ của bạn (với CSS và HTML) và nó luôn hiển thị hình ảnh thứ hai và Tôi không nhìn thấy một phần của cái nhìn đầu tiên thông qua. Hình ảnh của tôi chắc chắn có backgroung trong suốt, tôi đã sử dụng PHP sau để tạo chúng:

$ resultImage = imagecreatetruecolor (100, 100); $ trans_colour = imagecolorallocatealpha ($ resultImage, 0, 0, 0, 127); imagefill ($ resultImage, 0, 0, $ trans_colour); Và sau đó là họa sĩ trên hình ảnh với màu không trong suốt.

Leo

+0

Vâng, nếu bạn đang sử dụng IE 6, thì bạn sẽ cần thêm bộ lọc để làm công việc minh bạch. – pkaeding

3

Nếu bạn đang sử dụng jquery thử điều này trong bất kỳ trình duyệt

<script> 
$(function() { 
    var position = $("#i1").offset(); 
    $('#i2').css({ position:'absolute', top:position.top, left: position.left}); 
}); 
</script> 
<img id='i1' src='images/zap_ring.png' /> 
<img id='i2' src='images/zap_ring_hover.png' /> 

và điều chỉnh top & left giá trị

$('#i2').css({ position:'absolute', top:position.top-10, left: position.left+5}); 
+4

sử dụng jQuery trong trường hợp này giống như sử dụng AK47 để tiêu diệt một con ruồi. – rochal

+0

Tôi đã sử dụng style = "filter: progid: DXImageTransform.Microsoft.Alpha (Opacity = 50)" cho mỗi hình ảnh và cả hai được nhìn thấy một nửa transperent cái khác. Tôi cần hoàn toàn khác biệt: xem hình ảnh thứ hai độ mờ 100% trong khi ở những nơi có màu trong suốt xem hình ảnh đầu tiên. – Leo

+0

Vâng, đó là cách tôi giết ruồi ... – Darthg8r

Các vấn đề liên quan