سؤال

يبدو أن كل شخص لديه بعض المشاكل مع واضحالفاصل الزمني.لقد بنيت المنزلق الذي يسمح للناس لتحوم فوق الأسهم.تدور لافتة أيضا بضع ثوان من أي وقت مضى.أريد أن أكون قادرا على إيقاف تشغيل التدوير التلقائي بعد أن ينقر شخص ما على أحد الأسهم.

وهنا رمز بلدي:

$(function(){
    var intvl = 0;
    intvl = setInterval(heroTransitionNext, 2000);
    $('.rightArrow').click(function(){
       window.clearInterval(intvl);
    });
});

تحرير:

هنا هي وظيفة فإنه يدعو:

function heroTransitionNext() {
    $('.HP-hero li').filter(':visible').fadeOut('normal', function () {
        if ($(this).next().length != 0) {
            activeZone = parseInt(activeZone) + 1;
            $(this).next().fadeIn('normal', heroNavHighlight(activeZone));
        } else {
            activeZone = 1;
            $('.HP-hero li:first-child').fadeIn('normal', heroNavHighlight(activeZone));
        }
        $(this).hide();
    });
};
هل كانت مفيدة؟

المحلول

لإيقاف الرسوم المتحركة يمكنك استخدام jqueryفي .stop() لكن لست متأكدا مما إذا كان سيحل المشكلة أم لا التي تواجهها (لم تتخيل) ولكن يمكنك تجربتها

$('.HP-hero li').stop(1,1); // or try $('.HP-hero li').stop()
window.clearInterval(intvl);

كما say2joe قال ذلك clearInterval سوف تتوقف فقط وظيفة من استدعاء في المرة القادمة لكنه لن مسح قائمة الانتظار الحالية (هو على حق) حتى في هذه الحالة stop يمكن استخدامها.

حول توقف.

نصائح أخرى

اعتمادا على مقدار العمل الذي تقوم به وظيفة Herotransitionnext الخاصة بك، قد لا يزال يتعين تنفيذه على الرغم من إزالة الفاصل الزمني - بمعنى آخر، فإن مسح الفاصل الزمني سيقمان الوظيفة من الإلغاء - ولكن أي مثيل من الوظيفة (ق) سوف يستمر تنفيذ الذاكرة في التنفيذ حتى الانتهاء.

لتكون أكثر وضوحا، وهنا حالة استخدام (يمكنك التحقق من ذلك بنفسك باستخدام ملف تعريف في Firebug أو أدوات المطور):

وقت تنفيذ herotransitionnext هو 2.1 ثانية. يتم استدعاء Cleartinerval 6.1 ثانية بعد إجراء SetInterval. عند 6.1 ثانية، تم استدعاء herotransitionnext أربع مرات. ومع ذلك، أكملت عمليات الإعدام الثلاثة الأولى، إلا أن الرابع لن يكمل حتى ينتهي تنفيذ (عند 8.1 ثانية منذ أن تم استدعاء Setinterval). ملاحظة: في حالة الاستخدام هذه، ستنفذ كل استدعاء متتالي في حين أن تنفيذ آخر استدعاء لا يزال مستمرا (مقابل 100 مليون شخص آخر) - بمعنى آخر، سيكون لديك تداخل تنفيذ من 2 إلى 2.1 و 4 إلى 4.1 و 6 إلى 6.1 فترات ثانية.

إذا استغرقت الوظيفة وقتا أطول للتنفيذ من مجموعة الفاصل الزمني، فاستخدم وظيفة متكررة مع Settimeout (). الرابط التالي سوف يمنحك مثالا جيدا.

أيضا، مرجع جيد للتفسير هو https:/developer.mozilla.org/ en / dom / window.setinterval .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top