2011-01-20 58 views
7

http://dl.dropbox.com/u/921159/desktopography/index.htmlvấn đề jquery opacity với fadeIn và fadeOut

Tôi đang xây dựng một blog giấy dán tường và cố gắng sử dụng jquery để hiển thị/ẩn một liên kết tải về (Tôi là một newbie). Vấn đề là, nếu bạn di chuột qua hình ảnh và để cho liên kết mờ dần, sau đó nhanh chóng di chuyển ra và bật lại trong khi nó mờ dần ... liên kết sẽ dừng lại ở mức độ mờ đục hiện tại. Nó kết thúc là một vấn đề khi một người dùng tình cờ di chuyển qua các hình ảnh và độ mờ đục bị mắc kẹt tại 0. Whats gây ra điều này?

Trả lời

17

clearQueue trong hoạt hình .stop() phương pháp mặc định là false (see API) nhưng bạn muốn nó được true bởi vì bạn muốn hình ảnh động hiện tại để rõ ràng và có nó bắt đầu hoạt hình trạng thái di chuột mới. Thay đổi mã của bạn như sau:

$(function() { 
    $('.wallpaper').hover(function() { 
     $(this).children('p').stop(true, true).fadeIn(300); 
    }, function() { 
     $(this).children('p').stop(true, true).fadeOut(400); 
    }); 
}); 
2

Hãy xem phương thức .stop(). Nó được thiết kế để khắc phục những vấn đề này.

+0

OP đang sử dụng 'stop()'. Đó là nguyên nhân * của vấn đề. – user113716

+0

@patrick dw - bạn nói đúng. Nhưng tôi nghĩ rằng nếu anh ấy đã thêm .stop (đúng, đúng) tôi nghĩ rằng sẽ sửa chữa nó. –

+0

Có, điều đó sẽ giữ cho nó khỏi bị kẹt, nhưng nó cũng nhảy đến cuối của hình ảnh động, tạo ra một hiệu ứng chói tai. Tôi đoán OP không muốn điều đó. – user113716

4

Đây là kết quả của việc bạn đang sử dụng stop()(docs) để tạm dừng hoạt ảnh và đảo ngược. Rắc rối là chức năng phai tiếp theo ghi nhớ điểm dừng và sử dụng điểm đó.

Bạn có thể sử dụng fadeTo()(docs) thay vào đó để bạn có thể sửa các mục tiêu độ mờ tại 10.

$('.wallpaper').hover(function() { 
    $(this).children('p').stop().fadeTo(300, 1); 
}, function() { 
    $(this).children('p').stop().fadeTo(400 ,0); 
}); 

EDIT: Tương đương sử dụng animate()(docs) là:

$('.wallpaper').hover(function() { 
    $(this).children('p').stop().animate({opacity:1}, 300); 
}, function() { 
    $(this).children('p').stop().animate({opacity:0}, 400); 
}); 

Lưu ý rằng không ai trong số này sẽ thiết lập display:none ở cuối. Nếu bạn muốn điều đó, bạn sẽ cần phải làm điều đó bằng tay.

$('.wallpaper').hover(function() { 
    $(this).children('p').show().stop().fadeTo(300, 1); 
}, function() { 
    $(this).children('p').stop().fadeTo(400 ,0, function(){$(this).hide()}); 
}) 
    .children('p').css('opacity',0); 
+0

Đây là một nhận xét tuyệt vời tuyệt vời. Tôi đã gặp vấn đề trong/ra tương tự, và ý tưởng của bạn đã giải quyết được vấn đề một cách hoàn hảo, cảm ơn bạn! – LearnWebCode

+0

Tôi thích điều này bởi vì ông trích dẫn lựa chọn thay thế! –