2012-04-06 45 views
5

Tôi có thẻ IMG với hình ảnh thang độ xám. Tôi đã kết nối một sự kiện Hover() để thay đổi "src" thành một hình ảnh màu khi di chuột và quay lại màu xám khi di chuột ra ngoài.Hoạt ảnh thay đổi hình ảnh jQuery Hover

Điều này chỉ hoạt động tốt, tuy nhiên thay đổi đột ngột. Tôi muốn thêm một chút fadeIn() vào hiệu ứng để màu sắc xuất hiện mờ dần và mờ dần. Tôi đã viết những điều sau đây mà tôi nghĩ rằng sẽ làm việc, nhưng không. (Hình ảnh thay đổi, nhưng không có mờ dần hoặc trì hoãn hiệu ứng). Tôi đang làm gì sai?

  $("#showForm").hover(
       function() { 
       $(this).fadeIn('slow', function(){ 
        $(this).attr("src", 'images/AddButtonSmall.gif'); 
       }); 
       }, 
       function() { 
       $(this).fadeIn('slow', function(){ 
        $(this).attr("src", 'images/AddButtonSmallGray.gif'); 
       }); 
       } 
      ); 
+1

Bạn không thể phai nhạt trong một 'thay đổi .src'. Để mờ dần Trong một hình ảnh mới trong khi hình ảnh cũ bị mờ dần, bạn sẽ cần phải sử dụng hai hình ảnh chồng chéo và mờ dần vào và hình kia. – jfriend00

Trả lời

9

Dưới đây là một vài giải pháp. Mã của bạn không hoạt động vì bạn đang đặt nguồn thay đổi hình ảnh ngay lập tức.Nó có lẽ dễ dàng hơn chỉ để tải cả hai hình ảnh, che phủ chúng với CSS và sau đó làm mờ màu một trong khi thùng chứa mẹ được kết nối. Hoặc bạn có thể vượt qua phai chúng

css

.fader { display: inline-block; } 
.fader img:last-child { 
    position: absolute; 
    top: 0; 
    left: 0; 
    display: none; 
}​ 

html

<div class="fader"> 
    <img src="http://placehold.it/300x300/000fff" /> 
    <img src="http://placehold.it/300x300/fff000" /> 
</div>​ 

fade in trên mouseover

http://jsfiddle.net/Xm2Be/3/

$('.fader').hover(function() { 
    $(this).find("img:last").fadeToggle(); 
});​ 

mốt chéo e

http://jsfiddle.net/Xm2Be/2/

$('.fader').hover(function() { 
    $(this).find("img").fadeToggle(); 
});​ 
+1

Đây là phiên bản đơn giản của ý tưởng của bạn: http://jsfiddle.net/jfriend00/Xm2Be/ – jfriend00

+0

@ jfriend00 - Cảm ơn, không biết về 'fadeToggle'! – mrtsherman

+0

Xin chào @mrtsherman bạn sẽ viết CSS của bạn như thế nào trong SASS? :) http://stackoverflow.com/questions/16905061/last-child-and-last-of-type-not-working-in-sass –

0
$(this).fadeIn('slow', 

là thực sự cố gắng để phai trong các yếu tố này, chậm rãi, và 'này' đề cập đến

$("#showForm") 

Thay vào đó nếu bạn muốn, bạn có thể đưa hình ảnh màu trực tiếp trên màu xám hiện tại hình ảnh, và đánh dấu các hình ảnh màu ẩn, sau đó có nó từ từ mờ dần. Giả sử chúng được định vị trên đầu trang của nhau, bạn có thể làm:

$("#showForm").hover(
    function() { 
     $("#colorImageID").fadeIn(); 
    }, 
    function() { 
     $("#colorImageID").fadeOut(); 
    }); 
    } 

);

giả html là một cái gì đó tương tự (nơi sameAbsolutePosition là css để đặt chúng ở vị trí chính xác cùng, như vậy có lẽ cái gì đó như position: absolute; left: 20; top: 20px;):

<img src='images/AddButtonSmallGray.gif' class="sameAbsolutePosition"> 
<img src='images/AddButtonSmall.gif' style="display:none;" class="sameAbsolutePosition"> 

Để nhắc lại, bạn sẽ làm mờ hình ảnh mới ở trên cùng của hình ảnh khác. Bạn cũng có thể làm mờ hình ảnh màu xám đồng thời.

0

Bạn đang mờ dần ở đâu? Fade in không display:block với opacity thay đổi từ 0 đến 100. Fade ra không display:none với opacity thay đổi từ 100 đến 0.

Một lần, bạn fadeIn, hình ảnh là display:block và opacity là 100. Vì vậy, bạn không nhìn thấy một hình ảnh động . Vì vậy, hoặc làm một màn hình: none hoặc fadeOut trước khi fadeIn một lần nữa.

Đưa ra ví dụ với những điều giải thích. Bạn nên thay đổi nó theo yêu cầu của bạn. giải pháp

$("#showForm").hover(
       function() { 
       $(this).fadeOut('fast').fadeIn('slow', function(){ 
        $(this).attr("src", 'images/AddButtonSmall.gif'); 
       }); 
       }, 
       function() { 
       $(this).fadeOut('fast').fadeIn('slow', function(){ 
        $(this).attr("src", 'images/AddButtonSmallGray.gif'); 
       }); 
       } 
      ); 
0

Tốt hơn nhiều:

Quên javascript để làm công việc này. Sử dụng CSS sprites để thay thế. Nếu bạn nhấn mạnh vào việc có fadeIn, fadeOut, hãy sử dụng các hiệu ứng chuyển tiếp.

CẬP NHẬT: Trả lời nhận xét bên dưới, tôi không thể viết một số mã vì không có cách nào tôi có thể dự đoán kích thước và vị trí trong ảnh của Todd. Tôi cũng muốn làm rõ rằng đề xuất của tôi là sử dụng sprites và sau đó chuyển tiếp để tăng cường "chức năng" và không chỉ chuyển tiếp vì tôi cho rằng anh ta cần điều này để làm việc trong IE8 và IE9.

+0

Một trang web nói về các họa tiết và không hề biết cách chuyển đổi hình ảnh không hữu ích lắm. Điều này không trả lời câu hỏi của anh ta chút nào. – mrtsherman

+0

Đồng ý rằng các bình luận sprites không thực sự liên quan; nhưng bạn CÓ THỂ làm điều này với một quá trình chuyển đổi CSS3; Tôi chỉ muốn xem mã. –

+1

Cảm ơn bạn đã đề xuất này. Tôi không thực sự quen thuộc với việc sử dụng sprites và tôi muốn đọc lên nó, vì vậy đây là một "prod" tốt để làm như vậy. :) –

0

Hãy thử với điều này

$("#showForm").hover(
      function() { 
       $(this).fadeOut('fast',function(){ 
       $(this).attr("src", 'images/AddButtonSmall.gif'); 
       $("#img_src").html("images/AddButtonSmall.gif"); 
       }); 
      $(this).fadeIn('fast'); 
      }, 
      function() { 
      $(this).fadeOut('fast',function(){ 
       $(this).attr("src", 'images/AddButtonSmallGray.gif'); 
       $("#img_src").html("images/AddButtonSmallGray.gif"); 
       }); 
      $(this).fadeIn('fast'); 
      } 
     );​ 

Dưới đây là Fiddle

0

Bạn có thể làm phai chéo này với css3 sử dụng chuyển tiếp quá. Không có sẵn cho tất cả các trình duyệt nhưng vẫn ... http://www.w3schools.com/css3/css3_transitions.asp

Bằng cách tương tự như CSS: image link, change on hover

Ví dụ:

#showForm 
{ 
    background: transparent url('images/AddButtonSmallGray.gif') center top no-repeat; 

    -webkit-transition:all 0.3s ease-in-out; 
    -moz-transition:all 0.3s ease-in-out; 
    transition:all 0.3s ease-in-out; 
} 

#showForm:hover { 
    background-image: url('images/AddButtonSmall.gif'); 
} 
Các vấn đề liên quan