الدرس 8 من 8
ساعة إيقاف
- 15 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الوقت يُحسب من الساعة لا من العدّ
الشرح
أول فكرة تخطر لك عند بناء ساعة إيقاف أن تستعمل setInterval ليزيد عدّادًا كل عُشر ثانية، لكنّ مهلة setInterval حدّ أدنى وليست موعدًا مضمونًا، فالنبضة تتأخّر حين تنشغل الصفحة، والمتصفح يُبطئ المؤقّتات في التبويبات الخلفية إلى نبضة واحدة في الثانية، فتصير عشر دقائق في الخلفية دقيقة واحدة في العدّاد.
والصواب أن تحفظ لحظة البدء بـ Date.now()، ثم تحسب الوقت المنقضي بالطرح في كل مرّة تعرضه، فيكون دور المؤقّت أن يقرّر متى تُحدَّث الشاشة فقط، لا أن يحسب كم مضى من الوقت.
انتبه: لكي تستأنف العدّ بعد الإيقاف تحتاج إلى أن تحفظ الوقت الذي تراكم قبله وتضيفه إلى الفترة الجديدة. وامنع التشغيل المزدوج، لأنّ الضغط على «ابدأ» مرّتين يصنع مؤقّتين لا يُلغى منهما إلا واحد.
المطلوب
اربط الأزرار #start و#stop و#reset، واعرض في #time الثواني بمنزلة عشرية واحدة (0.0 ثم 1.3) محسوبة من Date.now()، واجعل زرّ «صفّر» يوقف الساعة ويعيدها إلى 0.0.
الفحوص
6 فحوص- تبدأ من الصفر
- «ابدأ» يشغّل العدّ
- «أوقف» يجمّد الوقت
- الاستئناف يكمل من حيث توقّفت الساعة
- «صفّر» يوقف الساعة ويعيدها إلى الصفر
- الوقت محسوب من الساعة لا من عدّ النبضات