ฉันจะทราบได้อย่างไรว่า jQuery องค์ประกอบกำลังเคลื่อนไหวอยู่


102

ฉันกำลังพยายามย้ายองค์ประกอบบางอย่างในหน้าและในช่วงเวลาที่ภาพเคลื่อนไหวเกิดขึ้นฉันต้องการให้ใช้ "overflow: hidden" กับ elemnt และ "overflow" กลับเป็น "auto" เมื่อภาพเคลื่อนไหวเสร็จสมบูรณ์

ฉันรู้ว่า jQuery มีฟังก์ชั่นยูทิลิตี้ที่กำหนดว่าองค์ประกอบบางอย่างเคลื่อนไหวได้หรือไม่ แต่ฉันไม่พบที่ใดในเอกสาร

คำตอบ:


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

ข้อมูลเพิ่มเติม : https://api.jquery.com/animate-selector/


หรือ:

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

ใช่แล้วขอบคุณ จะพลาดได้อย่างไร ไอ้ฉันแก่แล้ว

FYI ถ้าคุณไม่ต้องการที่จะเสี่ยงการเขียนทับรูปแบบ CSS ของคุณโดยการเขียนโปรแกรม "ล้น: อัตโนมัติ" .css('overflow', '')ในการเรียกกลับใช้เพียง โดยทั่วไปการส่งสตริงว่างจะลบคุณสมบัตินั้นออกจากสไตล์ขององค์ประกอบทั้งหมด ไม่แน่ใจว่านี่เป็นพฤติกรรมที่บันทึกไว้หรือไม่ แต่เป็นเคล็ดลับที่มีประโยชน์มาก
Ward DS

2
ฉันไม่คิดว่ามันรองรับภาพเคลื่อนไหว CSS
Gqqnbig

5

หรือหากต้องการทดสอบว่าสิ่งที่ไม่เคลื่อนไหวหรือไม่คุณสามารถเพิ่ม "!":

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

สิ่งนี้ไม่เป็นความจริง ... สิ่งที่ตรงกันข้ามกับ jquery 'คือ' ไม่ใช่ 'ไม่ใช่' 'not' ลบองค์ประกอบที่กรองออกจากวัตถุ jquery หากคุณต้องการตรวจสอบว่าไม่ใช่วัตถุเคลื่อนไหวที่คุณทำif (!$(element).is(':animated')) {...}
amosmos

1
@amosmos คำตอบได้รับการแก้ไขและชุมชนอนุมัติแล้ว .. ฉันย้อนกลับไปยังจุดที่ถูกต้องแล้ว
บิล

2
เยี่ยมมากตอนนี้มันซ้ำกับคำตอบที่ยอมรับแล้ว BTW ชุมชนอนุมัติหมายความว่าอย่างไร
amosmos

@amosmos หยุดหลอก
Eric Cicero

1

หากคุณใช้cssภาพเคลื่อนไหวและกำหนดภาพเคลื่อนไหวโดยใช้เฉพาะclass nameคุณสามารถตรวจสอบได้ดังนี้:

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

แต่ตรวจสอบให้แน่ใจว่าคุณกำลังลบชื่อคลาสซึ่งกำลังจัดการแอนิเมชั่นอยู่หลังจากที่แอนิเมชั่นเสร็จสิ้น!

รหัสนี้สามารถใช้เพื่อลบclass nameหลังจากภาพเคลื่อนไหวเสร็จสิ้น:

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

OP ใช้ jQuery animaiton
MichałPerłakowski

แค่แนะนำทางเลือก และคุณหมายถึงแอนิเมชั่นหรือเปล่า?
อารีย์

ใช่ฉันหมายถึงแอนิเมชั่น IMO คำตอบของคุณไม่ตรงประเด็น
MichałPerłakowski


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

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

แม้ว่ารหัสนี้อาจตอบคำถามได้ แต่การให้บริบทเพิ่มเติมเกี่ยวกับวิธีการและ / หรือเหตุผลในการแก้ปัญหาจะช่วยเพิ่มมูลค่าในระยะยาวของคำตอบ โปรดอ่านวิธีการตอบเพื่อให้คำตอบที่มีคุณภาพ
thewaywewere
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.