2011-08-05 24 views
24

मैं जानना चाहता हूं कि कैसे प्राप्त किया जाए: यादृच्छिक संख्या के बाद यादृच्छिक संख्या उत्पन्न करता है। और इसका पुन: उपयोग करें।यादृच्छिक सेट अंतराल (यादृच्छिक अंतराल के बाद एक ही यादृच्छिक को फिर से लिखना)

function doSomething(){ 
    // ... do something..... 
} 

var rand = 300; // initial rand time 

i = setinterval(function(){ 

    doSomething(); 
    rand = Math.round(Math.random()*(3000-500))+500; // generate new time (between 3sec and 500"s) 

}, rand); 

और इसे बार-बार करें।

अब तक मैं एक यादृच्छिक अंतराल उत्पन्न करने में सक्षम था, लेकिन पृष्ठ को रीफ्रेश किए जाने तक यह तब तक चलता रहा (एक अलग समय से उत्पन्न - अंतराल)।

धन्यवाद इस तरह

उत्तर

68

यहाँ यह करने के लिए एक बहुत साफ और स्पष्ट तरीका है की कोशिश :

http://jsfiddle.net/Akkuma/9GyyA/

function doSomething() {} 

(function loop() { 
    var rand = Math.round(Math.random() * (3000 - 500)) + 500; 
    setTimeout(function() { 
      doSomething(); 
      loop(); 
    }, rand); 
}()); 

संपादित करें:

स्पष्टीकरण: लूप केवल तुरंत आवंटित फ़ंक्शन संदर्भ में मौजूद है, इसलिए यह स्वयं को कॉल कर सकता है।

+0

सही! मुझे यह पसंद है। – Timmerz

+1

अच्छा समाधान, लेकिन अगर आप थोड़ी देर में "अंतराल" को हटाने में सक्षम होना चाहते हैं, तो इसके लिए कुछ बदलाव की आवश्यकता है। –

+2

@toprightgamedev अगर आप लूपिंग को रोकना चाहते हैं, तो बस आपको आवश्यक तर्क के साथ सेटटाइमआउट के आस-पास एक कथन दें। – Akkuma

4

कुछ काम करना चाहिए - के बजाय setTimeout() उपयोग करें ताकि आप एक नई यादृच्छिक मूल्य हर बार सेट कर सकते हैं:

function doSomething() { 
    alert("doing something"); 
} 

function init() { 
    var myFunction = function() { 
     doSomething(); 
     var rand = Math.round(Math.random() * (3000 - 500)) + 500; // generate new time (between 3sec and 500"s) 
     setTimeout(myFunction, rand); 
    } 
    myFunction(); 
} 

$(function() { 
    init(); 
}); 

Working jsFiddle here

+0

@roXon: हाँ - इस तरह आप हर बार यादृच्छिक अंतराल को अपडेट कर सकते हैं – BrokenGlass

+0

यह अंत में jQuery है, सादा जावास्क्रिप्ट नहीं है। – felwithe

4

बस सेटअप अंतराल हर बार जब आप रैंड (और यह पहली स्पष्ट)

function doSomething(){ 
    // ... do something..... 
} 

var i; 
var rand = 300; 

function randomize() { 
    doSomething(); 
    rand = Math.round(Math.random()*(3000-500))+500; 
    clearInterval(i); 
    i = setInterval('randomize();', rand); 
} 

i = setInterval('randomize();', rand); 

या setTimeout का उपयोग कर (और randing के बाद फिर से स्थापित करने)

+1

एक तरफ ध्यान दें कि यह 'सेट इंटरवल (यादृच्छिक, रैंड) होना चाहिए; ' –

1

बस रिंग में मेरी टोपी फेंक

var keepLooping = true; 
    (function ontimeout(){ 
     if(keepLooping){ 
      doTheAction(); 
      setTimeout(ontimeout, Math.random() * 100); 
     } 
    })(); 

निर्भर करता है कि आप setTimeout कॉलबैक या नहीं अंदर doTheAction() रखना चाहते हैं। मुझे लगता है कि इसे पहले/बाहर रखना ठीक है। यदि आप प्रारंभिक देरी चाहते हैं, तो इसे अंदर रखें, यदि नहीं, तो इसे सादगी के लिए बाहर रखें।

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