मैं एक साधारण जावास्क्रिप्ट क्रोनोग्रफ़ कि "d2" कहा जाता है एक फार्म क्षेत्र पर प्रदर्शित होती है खो देता है, यह जांच करने के लिए कितनी देर तक किसी को एक विशेष कार्य कर रही है पर ले जाता प्रयोग किया जाता है:setTimeout काम नहीं कर रहा है जब खिड़की ध्यान केंद्रित
var milisec=0
var seconds=0
var complemento1=""
document.form1.d2.value='00:00:00'
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else{
milisec+=1
}
complemento1=complemento2=complemento3="";
if ((seconds%60)<10) complemento1="0";
if ((Math.floor(seconds/60)%60)<10) complemento2="0";
if ((Math.floor(seconds/3600))<10) complemento3="0";
document.form1.d2.value=complemento3+Math.floor(seconds/3600)+":"+complemento2+(Math.floor(seconds/60)%60)+":"+complemento1+(seconds%60)
setTimeout("display()",100)
}
समस्या यह है कि जब व्यक्ति एक नया टैब खोलता है/किसी अन्य प्रोग्राम का उपयोग करता है तो टाइमर बंद हो जाता है, और तब विंडो फिर से केंद्रित होती है (क्रोम का उपयोग करके) फिर से शुरू होती है। इसमें अजीब व्यवहार है, क्योंकि कभी-कभी यह काम करता है, कभी-कभी ऐसा नहीं होता है।
मैंने कई पदों को देखा जो फोकस पर नहीं होने पर रोकने के लिए एक स्क्रिप्ट की आवश्यकता होती है, मैं बिल्कुल विपरीत और एक किस्मत के साथ एक घंटे से अधिक खोजना चाहता हूं। आपकी मदद बहुत ही सराहनिय है!
nitpick: (प्रदर्शन, 100) 'setTimeout को setTimeout लाइन बदलने के' , तारों का उपयोग न करें क्योंकि इससे अतिरिक्त मूल्यांकन होता है। – epascarello
संभावित डुप्लिकेट [जब मैं क्रोम में एक टैब निष्क्रिय होता है तो मैं सेटइंटरवाल भी कैसे काम कर सकता हूं?] (Http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when- ए-टैब-इन-इनएक्टिव-इन-क्रोम) – epascarello
टैब स्वचालित रूप से टाइमआउट और अंतराल को थ्रॉटल करता है जब टैब केंद्रित नहीं होता है, और मुझे नहीं लगता कि आप इसे अन्यथा करने के लिए मजबूर कर सकते हैं, लेकिन आप आसानी से विसंगतियों की गणना और क्षतिपूर्ति कर सकते हैं , खासकर अगर आप समय की गणना कर रहे हैं। आपके टाइमआउट को अगले 100ms में चलाने के बजाय, वर्तमान समय को बचाने के लिए और समय की तुलना में उस समय की तुलना करने की बजाय। – Mahn