2010-09-18 14 views
5

एक तरीका जो संसाधनों को हॉग नहीं करता है, केवल 1 सेकंड के लिए निष्पादन रोकता है फिर निष्पादित करता है?क्या जावास्क्रिप्ट में कोई सुरक्षित देरी है?

मैं जो करना चाहता हूं वह गतिशील रूप से एक Google से गेज को एक मूल्य से दूसरे स्थान पर ले जाया जाता है, जिससे इसका प्रभाव बढ़ने के बजाय मूल्य पर जा रहा है।

अर्थात -

for(original_value; original_value < new_value; original_value++) 
{ 
    data.setValue(0, 1, original_value); 
    delay half a second here in JavaScript? 
} 

इस ऐसा करने का एक तरीका है ठीक है या क्या डेमो कर रही है अत्यंत बेहतर है के करीब कुछ है? :
How to: Dynamically move Google Gauge?

उत्तर

5

नहीं। वेब ब्राउज़र में जावास्क्रिप्ट केवल एक ही थ्रेडेड नहीं है, लेकिन यह ब्राउज़र प्रतिपादन के साथ एक ही धागा साझा करता है। यदि आपका जावास्क्रिप्ट कोड ब्लॉक करना था, तो उस अवधि के दौरान ब्राउज़र यूआई उत्तरदायी नहीं होगा।

जावास्क्रिप्ट में समय-आधारित घटनाओं से निपटने का सामान्य तरीका asynchronous timers का उपयोग कर है। John Resig ने कुछ समय पहले "How JavaScript Timers Work" नामक एक घुसपैठ लेख लिखा था, जिसे आप देखना चाहते हैं।


अद्यतन:

आप गेज के लिए Google Visualization API का उपयोग कर रहे हैं? यदि ऐसा है, तो मुझे ऐसा लगता है कि Google पहले से ही चिकनी एनीमेशन को संभालता है जिसे आप प्राप्त करने का प्रयास कर रहे हैं। (नेटवर्क गेज पर नज़र रखने) Google Code Playground में निम्नलिखित का प्रयास करें:

function drawVisualization() { 
    // Create and populate the data table. 
    var data = new google.visualization.DataTable(); 
    var chart; 

    data.addColumn('string', 'Label'); 
    data.addColumn('number', 'Value'); 
    data.addRows(3); 
    data.setValue(0, 0, 'Memory'); 
    data.setValue(0, 1, 80); 
    data.setValue(1, 0, 'CPU'); 
    data.setValue(1, 1, 55); 
    data.setValue(2, 0, 'Network'); 
    data.setValue(2, 1, 68); 

    // Change the value of the Network Gauge after 3 seconds. 
    setTimeout(function() { data.setValue(2, 1, 20); chart.draw(data); }, 3000); 

    // Create and draw the visualization. 
    chart = new google.visualization.Gauge(document.getElementById('visualization')); 
    chart.draw(data); 
} 
+1

@ डैनियल वासलोलो: सेटटाइमऑट() (केवल) रास्ता (jQuery के बिना) जाने का तरीका है? –

+1

हां, 'setTimeout' UI थ्रेड को अवरुद्ध नहीं करेगा। –

+2

@ ग्रेग: हां, [सेटटाइमआउट()] (https://developer.mozilla.org/en/window.setTimeout) और [setInterval()] (https://developer.mozilla.org/en/window.setInterval) निष्पादन को अवरुद्ध न करें। वे आपको कॉलबैक फ़ंक्शन को परिभाषित करने देंगे, जिसे टाइमआउट समाप्त होने पर कॉल किया जाएगा। आम तौर पर, जावास्क्रिप्ट में अधिकांश समय-आधारित घटनाओं के लिए जाने का यह तरीका है। –

4

यह काम करना चाहिए।

var id, value = original_value; 
id = setInterval(function() { 
    if (value < new_value) { 
     data.setValue(0, 1, value++); 
    } else { 
     clearInterval(id); 
    } 
}, 1000); 
+0

अच्छा, महान उदाहरण, धन्यवाद। –

संबंधित मुद्दे