सबसे सरल संभव जावास्क्रिप्ट उलटी गिनती घड़ी? [बन्द है]


240

बस यह पूछना चाहता था कि सरलतम उलटी गिनती टाइमर कैसे बनाया जाए।

यह कहते हुए साइट पर एक वाक्य होगा:

"05:00 मिनट में पंजीकरण बंद हो जाता है!"

इसलिए, मैं जो करना चाहता हूं वह एक सरल जेएस उलटी गिनती टाइमर बनाना है जो "05:00" से "00:00" तक जाता है और फिर समाप्त होने पर "05:00" पर रीसेट हो जाता है।

मैं पहले कुछ उत्तरों से गुज़र रहा था, लेकिन वे सभी बहुत तीव्र (डेट ऑब्जेक्ट्स इत्यादि) महसूस कर रहे थे कि मैं क्या करना चाहता हूँ।


4
और फिर, आप प्रासंगिक HTML को छोड़ रहे हैं, हालांकि कम से कम आपने इस बार जटिलता के मुद्दे को समझाया है। लेकिन गंभीरता से, आपको खुद एक समाधान बनाने की जरूरत है , और फिर आओ और हमें उन समस्याओं के बारे में पूछें जो आप कर रहे हैं।
डेविड का कहना है कि मोनिका

शिकायतों के साथ कोड उदाहरण कैसे वे बहुत जटिल हैं? वैसे भी, मुझे लगता है कि आप आसानी से कर सकते हैं setIntervalऔर तारीख आधारित के बजाय इसे .inHTML आधारित बना सकते हैं ।
bjb568

1
हां, लोगों को इसका समाधान खुद बनाना चाहिए। लेकिन javaScript के साथ सामान्य कार्य करने के बहुत सारे उदाहरण हैं। मुझे पता है कि टाइमर की गिनती कैसे की जाती है, लेकिन मैं पसंद करता हूं कि मुझे वेब में एक (एक घटक की तरह) मिल जाए। तो इस सवाल के लिए धन्यवाद और व्यापक जवाब मुझे वही मिला, जिसकी मुझे तलाश थी। उलटी गिनती तर्क
कार्लोस राफेल रामिरेज़ 15

2
मुझे ये उपाय सरल लगे: stackoverflow.com/questions/32141035/…
nu everest

जवाबों:


490

मेरे पास दो डेमो हैं, एक साथ jQueryऔर एक बिना। न तो दिनांक फ़ंक्शन का उपयोग करें और इसे प्राप्त करने के बारे में सरल हैं।

वेनिला जावास्क्रिप्ट के साथ डेमो

function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    setInterval(function () {
        minutes = parseInt(timer / 60, 10);
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds;

        if (--timer < 0) {
            timer = duration;
        }
    }, 1000);
}

window.onload = function () {
    var fiveMinutes = 60 * 5,
        display = document.querySelector('#time');
    startTimer(fiveMinutes, display);
};
<body>
    <div>Registration closes in <span id="time">05:00</span> minutes!</div>
</body>

JQuery के साथ डेमो

function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    setInterval(function () {
        minutes = parseInt(timer / 60, 10);
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.text(minutes + ":" + seconds);

        if (--timer < 0) {
            timer = duration;
        }
    }, 1000);
}

jQuery(function ($) {
    var fiveMinutes = 60 * 5,
        display = $('#time');
    startTimer(fiveMinutes, display);
});

हालाँकि यदि आप एक अधिक सटीक टाइमर चाहते हैं जो केवल थोड़ा अधिक जटिल है:

function startTimer(duration, display) {
    var start = Date.now(),
        diff,
        minutes,
        seconds;
    function timer() {
        // get the number of seconds that have elapsed since 
        // startTimer() was called
        diff = duration - (((Date.now() - start) / 1000) | 0);

        // does the same job as parseInt truncates the float
        minutes = (diff / 60) | 0;
        seconds = (diff % 60) | 0;

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds; 

        if (diff <= 0) {
            // add one second so that the count down starts at the full duration
            // example 05:00 not 04:59
            start = Date.now() + 1000;
        }
    };
    // we don't want to wait a full second before the timer starts
    timer();
    setInterval(timer, 1000);
}

window.onload = function () {
    var fiveMinutes = 60 * 5,
        display = document.querySelector('#time');
    startTimer(fiveMinutes, display);
};
<body>
    <div>Registration closes in <span id="time"></span> minutes!</div>
</body>

अब जब हमने कुछ सरल सरल समय बना लिए हैं तो हम पुन: प्रयोज्य और अलग-अलग चिंताओं के बारे में सोचना शुरू कर सकते हैं। हम यह पूछकर "टाइमर डाउन काउंट क्या करना चाहिए?"

  • क्या एक गणना नीचे टाइमर नीचे गिना जाना चाहिए? हाँ
  • क्या एक गणना डाउन टाइमर को पता होना चाहिए कि डोम पर खुद को कैसे प्रदर्शित किया जाए? नहीं
  • क्या एक गणना डाउन टाइमर 0 तक पहुंचने पर खुद को पुनरारंभ करना जानता है? नहीं
  • क्या काउंट डाउन टाइमर क्लाइंट को एक्सेस करने का एक तरीका प्रदान करता है कि कितना समय बचा है? हाँ

तो इन बातों को ध्यान में रखकर लिखने से बेहतर है (लेकिन अभी भी बहुत सरल) CountDownTimer

function CountDownTimer(duration, granularity) {
  this.duration = duration;
  this.granularity = granularity || 1000;
  this.tickFtns = [];
  this.running = false;
}

CountDownTimer.prototype.start = function() {
  if (this.running) {
    return;
  }
  this.running = true;
  var start = Date.now(),
      that = this,
      diff, obj;

  (function timer() {
    diff = that.duration - (((Date.now() - start) / 1000) | 0);

    if (diff > 0) {
      setTimeout(timer, that.granularity);
    } else {
      diff = 0;
      that.running = false;
    }

    obj = CountDownTimer.parse(diff);
    that.tickFtns.forEach(function(ftn) {
      ftn.call(this, obj.minutes, obj.seconds);
    }, that);
  }());
};

CountDownTimer.prototype.onTick = function(ftn) {
  if (typeof ftn === 'function') {
    this.tickFtns.push(ftn);
  }
  return this;
};

CountDownTimer.prototype.expired = function() {
  return !this.running;
};

CountDownTimer.parse = function(seconds) {
  return {
    'minutes': (seconds / 60) | 0,
    'seconds': (seconds % 60) | 0
  };
};

तो यह कार्यान्वयन दूसरों की तुलना में बेहतर क्यों है? यहां कुछ उदाहरण दिए गए हैं कि आप इसके साथ क्या कर सकते हैं। ध्यान दें कि सभी लेकिन पहला उदाहरण startTimerकार्यों द्वारा प्राप्त नहीं किया जा सकता है ।

एक उदाहरण जो XX: XX प्रारूप में समय प्रदर्शित करता है और 00:00 तक पहुंचने के बाद पुनरारंभ होता है

एक उदाहरण जो समय को दो अलग-अलग स्वरूपों में प्रदर्शित करता है

एक उदाहरण जिसमें दो अलग-अलग टाइमर हैं और केवल एक पुनरारंभ होता है

एक उदाहरण जो बटन दबाते ही काउंट डाउन टाइमर शुरू करता है


2
आप ही है वह आदमी! ठीक वैसा ही मैं देख रहा था। धन्यवाद! एक और बात: मैं मिनटों के सामने "0" कैसे जोड़ सकता हूं, इसलिए यह "4:59" के बजाय "04:59" दिखाता है?
बार्टेक

1
minutes = minutes < 10 ? "0" + minutes : minutes;
लूटमज

8
@timbram यह मुझे पहली बार में भी अजीब लगा, जब तक मुझे महसूस नहीं हुआ कि एक varघोषणा के बाद अल्पविराम अलग-अलग घोषणाओं को अलग करता है। इसलिए minutesऔर secondsबस घोषित किए गए (लेकिन प्रारंभिक-प्रारंभिक) चर हैं। तो timerबस durationपैरामीटर के बराबर है , कुछ भी अधिक नहीं, कुछ भी कम नहीं।
२२:०२ पर

2
@SinanErdem मैंने कुछ कोड लिखे हैं जो ऐसा करता है। मैं आज बाद में उस कोड को उत्तर में जोड़ सकता हूं। ऐसा होने पर मैं तुम्हें पिंग करूंगा।
लूटमज

3
आप रीसेट विकल्प कैसे जोड़ सकते हैं? और एक ठहराव और फिर से शुरू भी? मैंने इस फ़ील्ड में एक फ़ील्ड जोड़ने की कोशिश की, और बंद में इसे जांचें। लेकिन घड़ी हालांकि चलती रहती है।
दजंग गुयेन

24

यदि आप एक वास्तविक टाइमर चाहते हैं तो आपको दिनांक ऑब्जेक्ट का उपयोग करने की आवश्यकता है।

अंतर की गणना करें।

अपनी स्ट्रिंग प्रारूपित करें।

window.onload=function(){
      var start=Date.now(),r=document.getElementById('r');
      (function f(){
      var diff=Date.now()-start,ns=(((3e5-diff)/1e3)>>0),m=(ns/60)>>0,s=ns-m*60;
      r.textContent="Registration closes in "+m+':'+((''+s).length>1?'':'0')+s;
      if(diff>3e5){
         start=Date.now()
      }
      setTimeout(f,1e3);
      })();
}

उदाहरण

Jsfiddle

इतना सटीक टाइमर नहीं

var time=5*60,r=document.getElementById('r'),tmp=time;

setInterval(function(){
    var c=tmp--,m=(c/60)>>0,s=(c-m*60)+'';
    r.textContent='Registration closes in '+m+':'+(s.length>1?'':'0')+s
    tmp!=0||(tmp=time);
},1000);

JsFiddle


16

आप setInterval.Below का उपयोग करके आसानी से एक टाइमर कार्यक्षमता बना सकते हैं। कोड आप टाइमर बनाने के लिए इसका उपयोग कर सकते हैं।

http://jsfiddle.net/ayyadurai/GXzhZ/1/

window.onload = function() {
  var minute = 5;
  var sec = 60;
  setInterval(function() {
    document.getElementById("timer").innerHTML = minute + " : " + sec;
    sec--;
    if (sec == 00) {
      minute --;
      sec = 60;
      if (minute == 0) {
        minute = 5;
      }
    }
  }, 1000);
}
Registration closes in <span id="timer">05:00<span> minutes!


3
प्रत्येक सेकंड का सटीक रूप से प्रतिनिधित्व नहीं करता है, यह बहुत तेजी से नीचे गिना जा रहा है।
स्कॉट रौले

4
500 से 1000 को बदलना इसे सटीक बनाता है।
स्कॉट रौले

स्लिक सॉल्यूशन,
कन्फ्यूजन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.