2009-04-07 36 views
94

Tôi đang cố gắng di chuyển một số thành phần trên trang và trong thời gian hoạt ảnh xảy ra, tôi muốn áp dụng "overflow: hidden" cho elemnt và "overflow" quay lại "auto" khi hoạt ảnh hoàn tất .Làm cách nào để tìm hiểu với jQuery nếu một phần tử đang được làm động?

Tôi biết jQuery có một chức năng tiện ích mà sẽ xác định xem một số yếu tố đã được hoạt hình nhưng tôi không thể tìm thấy nó ở bất cứ đâu trong tài liệu

+2

Sử dụng gọi lại cho tác vụ này. – Mork0075

Trả lời

189
if($(elem).is(':animated')) {...} 

Thông tin thêm: http://docs.jquery.com/Selectors/animated


Hoặc:

$(elem) 
    .css('overflow' ,'hidden') 
    .animate({/*options*/}, function(){ 
     // Callback function 
     $(this).css('overflow', 'auto'); 
    }; 
+0

vâng, đúng vậy, cảm ơn. làm thế nào tôi có thể bỏ lỡ nó? damn, tôi nhận được cũ –

+0

FYI, nếu bạn không muốn mạo hiểm ghi đè các kiểu CSS của mình bằng cách lập trình "overflow: auto" trong hàm gọi lại, chỉ cần sử dụng '.css ('overflow', '')'. Việc truyền một chuỗi rỗng thường loại bỏ thuộc tính đó khỏi kiểu của phần tử. Không chắc chắn nếu điều này là hành vi tài liệu, nhưng nó là một thủ thuật rất hữu ích. –

+0

Tôi không nghĩ rằng nó hỗ trợ hoạt ảnh CSS. – Gqqnbig

5

Cách khác , Để kiểm tra nếu có điều gì là không sinh động, bạn có thể chỉ cần thêm một "!":

if (!$(element).is(':animated')) {...} 
+0

Điều này là rất không đúng ... Đối diện của jquery 'là' không phải là 'không'. 'không' sẽ xóa các phần tử lọc khỏi đối tượng jquery. Nếu bạn muốn kiểm tra đối tượng không hoạt hình bạn làm 'if (! $ (Phần tử) .is (': hoạt hình')) {...}' – amosmos

+1

@amosmos Câu trả lời đã được chỉnh sửa và được chấp thuận bởi cộng đồng .. Tôi đã cuộn nó trở lại nơi nó đã đúng. – Bill

+1

Tuyệt vời, chỉ bây giờ nó là một bản sao của câu trả lời được chấp nhận. BTW có nghĩa là cộng đồng được chấp thuận là gì? – amosmos

-1

nếu bạn đang sử dụng css hoạt hình và gán các hình ảnh động bằng cách sử dụng cụ thể class name, sau đó bạn có thể kiểm tra xem nó như thế này:

if($("#elem").hasClass("your_animation_class_name")) {} 

Nhưng hãy chắc chắn rằng bạn đang loại bỏ tên lớp đang xử lý hoạt ảnh, sau khi hoạt ảnh kết thúc!

Mã này có thể được sử dụng để loại bỏ các class name sau khi hình ảnh động kết thúc:

$("#elem").on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', 
function(){ 
     $(this).removeClass("your_animation_class_name"); 
}); 
+0

OP đang sử dụng jQuery animaiton. –

+0

chỉ đề xuất một giải pháp thay thế. Và bạn có nghĩa là hình ảnh động? – KeepMove

+0

Vâng, ý tôi là hoạt hình. IMO câu trả lời của bạn là hoàn toàn ngoài chủ đề. –

0
$('selector').click(function() { 
    if ($(':animated').length) { 
    return false; 
    } 

    $("html, body").scrollTop(0); 
}); 
+0

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về cách thức và/hoặc lý do giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời. Vui lòng đọc [cách trả lời] này (http://stackoverflow.com/help/how-to-answer) để cung cấp câu trả lời có chất lượng. – thewaywewere

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