Làm cách nào để tìm hiểu bằng jQuery nếu một phần tử đang được làm động?


101

Tôi đang cố gắng di chuyển một số phần tử trên trang và trong thời gian hoạt ảnh xảy ra, tôi muốn áp dụng "tràn: ẩn" cho một elemnt và "tràn" trở lại "tự động" sau khi hoạt ảnh hoàn tất.

Tôi biết jQuery có một chức năng tiện ích xác định xem một số phần tử có đang được làm động hay không nhưng tôi không thể tìm thấy nó ở bất kỳ đâu trong tài liệu

Câu trả lời:


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

Thông tin thêm : https://api.jquery.com/animated-selector/


Hoặc là:

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

vâng, đó là nó, cảm ơn. làm thế nào tôi có thể bỏ lỡ nó? chết tiệt, tôi đang già đi

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 "tràn: tự động" trong lệnh gọi lại, chỉ cần sử dụng .css('overflow', ''). Truyền một chuỗi rỗng thường loại bỏ hoàn toàn thuộc tính đó khỏi style của phần tử. Không chắc đây có phải là hành vi được ghi lại hay không, nhưng đó là một thủ thuật rất hữu ích.
Ward DS

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

5

Ngoài ra, để kiểm tra xem nội dung nào đó không hoạt hình, bạn có thể chỉ cần thêm dấu "!":

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

Điều này rất không đúng ... Ngược lại với jquery 'is' không phải là 'not'. 'not' xóa các phần tử đã lọc khỏi đối tượng jquery. Nếu bạn muốn kiểm tra cho đối tượng không sinh động bạn làmif (!$(element).is(':animated')) {...}
amosmos

1
@amosmos Câu trả lời đã được chỉnh sửa và được cộng đồng chấp thuận .. Tôi đã chuyển nó trở lại vị trí chính xác.
Bill

2
Tuyệt vời, 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?
amosmos

@amosmos dừng trolling
Eric Cicero

1

nếu bạn đang sử dụng csshoạt ảnh và chỉ định hoạt ảnh bằng cách sử dụng cụ thể class name, thì bạn có thể kiểm tra nó như sau:

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

Nhưng hãy đảm bảo rằng bạn đang xóa tên lớp mà 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 để xóa class namesau khi hoạt ảnh kết thúc:

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

OP đang sử dụng jQuery animaiton.
Michał Perłakowski

chỉ đề xuất một giải pháp thay thế. Và ý của bạn là hoạt hình?
Ari

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


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

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

Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh về cách và / hoặc lý do tại sao nó 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 để cung cấp câu trả lời chất lượng.
thewaywewere
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.