Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Рандомное время в setInterval (https://javascript.ru/forum/misc/24338-randomnoe-vremya-v-setinterval.html)

Vampir3 26.12.2011 19:10

Рандомное время в setInterval
 
есть функция:

function test(){

alert('random alert');

}

нужно чтоб функция выполнялась в разное время (от 1 до 10 секунд)

setInterval('test()' //тут рандомное время);

можно создать переменную с Math.random() и вставить переменную вместо времени?

Livaanderiamarum 26.12.2011 19:24

//рандом от min до max
function rand(min, max){
return (max-min)*Math.random()+min
}

// команда return означает то, что функция будет подставлять НА СВОЕ МЕСТО после того как выполнится)))
// в данном случае подставляется то, что посчитает выражение (max-min)*Math.random()+min, а оно подсчитает случайное число между числами min и max включая)

//тест()
function test(){
alert('ня!')
}

//запускаем тест() используя рандом
setInterval('test()' ,   rand(1000, 10000) );

FINoM 26.12.2011 19:25

function test(text){
  alert('random alert ' + text);
}
(function runInterval() {
    interval = Math.random()*1000*9 + 1000;
    setTimeout(function(){
       test(interval);
       runInterval();
    }, interval);
})()

nerv_ 26.12.2011 19:26

Если не накосячил, а за мной это сегодня наблюдается :) , примерно так
(function() {
	var x = (Math.random() * 10) + 1 >> 0;
	alert("следующий вызов ~ " + x + " сек.");
	setTimeout(arguments.callee, x * 1000);
})();

Livaanderiamarum 26.12.2011 19:30

мой вариант как обычно лучший)))
помогает понять КАК)) и не содержит ненужных понтов и замыканий и.т.п.))
привет всем)

Livaanderiamarum 26.12.2011 19:48

Цитата:

Сообщение от nerv_ (Сообщение 146251)
Если не накосячил, а за мной это сегодня наблюдается :) , примерно так
(function() {
	var x = (Math.random() * 10) + 1 >> 0;
	alert("следующий вызов ~ " + x + " сек.");
	setTimeout(arguments.callee, x * 1000);
})();

оой, ты использовал рекурсию, в замыкании.. это та круто, теперь объясни это парню ))

Vampir3 26.12.2011 20:27

всем спасибо) выбрал вариант Аватар для Livaanderiamarum'a :)

nerv_ 26.12.2011 20:33

Цитата:

Сообщение от Livaanderiamarum
оой, ты использовал рекурсию, в замыкании.. это та круто, теперь объясни это парню ))

1. Это не круто. Круто пишут старожилы форума. Я пока так не умею :no:
2. Где там замыкание? :)
var x = (Math.random() * 10) + 1 >> 0; //эту строку можно запистаь без скобок, т.е.
var x = Math.random() * 10 + 1 >> 0;

zebra 26.12.2011 20:38

Цитата:

Сообщение от Livaanderiamarum
мой вариант как обычно лучший)))

Цитата:

Сообщение от Livaanderiamarum
setInterval('test()' , rand(1000, 10000) );

eval

Livaanderiamarum 26.12.2011 20:39

Цитата:

Сообщение от nerv_ (Сообщение 146265)
1. Это не круто
2. Где там замыкание? :)
var x = (Math.random() * 10) + 1 >> 0; //эту строку можно запистаь без скобок, т.е.
var x = Math.random() * 10 + 1 >> 0;

я почему-то назвал ссылку на саму себя замыканием) не знаю почему) но все ровно твой пример не оч подходил для данного вопроса)

разве нет)? человеку же не понятно что ты написал) тогда в чем цель твоего обьяснения)? дать готовый вариант? он он не совсем это хотел) я бы предпочел научить его как делать рандом, именно это он и не понимал)

Livaanderiamarum 26.12.2011 20:41

Цитата:

Сообщение от zebra (Сообщение 146267)
eval

при чем тут ивал? человек рандом не понимал как делать!

zebra 26.12.2011 20:44

А причём здесь
Цитата:

Сообщение от Livaanderiamarum
мой вариант как обычно лучший)))

?

Livaanderiamarum 26.12.2011 20:52

Цитата:

Сообщение от zebra (Сообщение 146270)
А причём здесь

?

при том что я сделал лучший вариант чем другие) и человеку имеет смысл использовать его)

dmitriymar 26.12.2011 21:03

Цитата:

Сообщение от Livaanderiamarum
мой вариант как обычно лучший)))
помогает понять КАК)) и не содержит ненужных понтов и замыканий и.т.п.))
привет всем)

как всегда -читай доки. как всегда ,твой вариант не правильный:agree:
http://shamansir.github.com/JavaScri...other.timeouts
Цитата:

Сообщение от Livaanderiamarum
при том что я сделал лучший вариант чем другие) и человеку имеет смысл использовать его)

ты сделал худший вариант и к томуже -неправильный в корне!!!

Livaanderiamarum 26.12.2011 21:24

Цитата:

Сообщение от dmitriymar (Сообщение 146280)
как всегда -читай доки. как всегда ,твой вариант не правильный:agree:
http://shamansir.github.com/JavaScri...other.timeouts

ты сделал худший вариант и к томуже -неправильный в корне!!!

нет же, я сделал лучший вариант их всех представленных:)

dmitriymar 26.12.2011 21:28

Цитата:

Сообщение от Livaanderiamarum
нет же, я сделал лучший вариант их всех представленных

да ,философский вопрос-может ли неправильное быть лучшим?..
или он лучше от того что человек не разбирающийся в скрипте сказал что он лучше?

Livaanderiamarum 26.12.2011 21:34

Цитата:

Сообщение от dmitriymar (Сообщение 146286)
да ,философский вопрос-может ли неправильное быть лучшим?..
или он лучше от того что человек не разбирающийся в скрипте сказал что он лучше?

именно)! именно я выполнил цель лучще остальных! именно мой скрипт лучше выполнил свою работу чем скрипты остальных людей)!

если бы я делал себе я бы либо сделал как нерв (он немного неравнодушен к экономии памяти) , либо декларнул функцию и сделал обычный сет таймаут и автозапуск через рандомтайм декларнул чтобы намеренно засрать область

dmitriymar 26.12.2011 22:17

Livaanderiamarum,
блин, читать как ты себя восхваляешь противно как минимум.
перейди по ссылке что дал и попробуй понять почему у тебя бред.
Цитата:

Сообщение от Livaanderiamarum
либо декларнул функцию и сделал обычный сет таймаут и автозапуск через рандомтайм декларнул чтобы намеренно засрать область

именно ты засераешь память:agree:

melky 26.12.2011 23:37

Цитата:

Сообщение от Livaanderiamarum (Сообщение 146252)
мой вариант как обычно лучший)))
помогает понять КАК)) и не содержит ненужных понтов и замыканий и.т.п.))
привет всем)

Цитата:

Сообщение от Livaanderiamarum (Сообщение 146273)
при том что я сделал лучший вариант чем другие) и человеку имеет смысл использовать его)

Цитата:

Сообщение от Livaanderiamarum (Сообщение 146285)
нет же, я сделал лучший вариант их всех представленных:)

Цитата:

Сообщение от Livaanderiamarum (Сообщение 146288)
именно)! именно я выполнил цель лучще остальных! именно мой скрипт лучше выполнил свою работу чем скрипты остальных людей)!

Тролль парней @ сиди в бане

Livaanderiamarum 27.12.2011 00:42

Цитата:

Сообщение от melky (Сообщение 146299)
Тролль парней @ сиди в бане

то что я писал что я лучший СТОЛЬКО раз это я к тому что тут люди писали что нет. Вынужден был опровергать. а так я написал 1 раз. и то, после того как увидел что люди пишут вообще что-то не по теме.
на самом деле люди понтовались. получили задание и начали соревноваться кто более оптимально сделает и заковыристей. и плевать вы хотели а человека который вопрос задал.

слушай, я конечно троллил тут пару раз особенно когда тупость спрашивают, но тем что я сделал лучший вариант я хотел подчеркнуть то что я реал не понимаю зачем вы начали делать все эти заумные функции.. вы ВСЕГДА так делаете! Человек не понял как рандом делать! как реализовать вызов он сам догадается, я даже намеренно поставил интервал за место таймера, чтобы у него ошибка была которую он бы сам исправил.
При том он умеет обращаться с переменными, он просто не правильно сформулировал вопрос. а он был таков "Ребята, как сделать рандом от стольки то до стольки то"

вызов тут совершенно не при чем, тема не про это!

Livaanderiamarum 27.12.2011 00:45

Цитата:

Сообщение от dmitriymar (Сообщение 146293)
Livaanderiamarum,
блин, читать как ты себя восхваляешь противно как минимум.
перейди по ссылке что дал и попробуй понять почему у тебя бред.

да не бред у меня ты мозги то включай)! не мысли узколобо)! смотри шире на ситуацию! я разжевал выше)! а этот гарден я читал уже раза 3 еще как он только выходил. мы не автвызов делали а объясняли человеку как сделать так чтобы сгенерить случайное число в диапазоне! при том ПОДСТАВИТЬ его за место времени)! именно это я ему и показал!! а вы даже не поняли сути.
а то что не приятно то хорошо. буду писать открытым текстом что я имею ввиду) я не думаю что я лучше вас шарю)

FINoM 27.12.2011 01:44

Livaanderiamarum, ты вообще классный, я бы хотел быть тобой. Мне очень жаль, что я не ты.

trikadin 27.12.2011 02:01

Цитата:

Сообщение от Livaanderiamarum
на самом деле люди понтовались. получили задание и начали соревноваться кто более оптимально сделает и заковыристей. и плевать вы хотели а человека который вопрос задал.

А ты сам не такой, да?) Паладин выискался.

Ваш вариант - гавно, вы ничего не понимаете в кошерном JS-программировании.

Livaanderiamarum 27.12.2011 02:27

Цитата:

Сообщение от trikadin (Сообщение 146319)
А ты сам не такой, да?) Паладин выискался.
Ваш вариант - гавно, вы ничего не понимаете в кошерном JS-программировании.

да((? ну вот((((( вместо того чтобы издеваться надо мной могли бы и помочь научиться((((

Livaanderiamarum 27.12.2011 02:31

Цитата:

Сообщение от trikadin (Сообщение 146319)
Ваш вариант - гавно, вы ничего не понимаете в кошерном JS-программировании.

нотка, а что плохого в моем варианте(((? по моему все отлично, разве есть недочеты?
ну максимум что я ошибку может и зря оставил, но я думаю с этим он сам разберется заметив что переодичность не меняется) главное что я дал ему инструмент и показал что чтобы что-то куда-то вставить не обязательно класть это в переменную, показал что функции могут подставлять на свое место результат своей работы с помощью команды ретурн), а вот ребята ни чего не показали ему)) ^__^

может я плохой учитель((((? может я говенный учитель( и ни чего не понимаю в айти((? как это исправить(?
что не так в моей функции(? она же идеальна!! если нет, то укажи на минусы, а не сливай карму!

trikadin 27.12.2011 02:41

Цитата:

Сообщение от Livaanderiamarum
нотка

Научись нажимать на ник, это копирует его в тело ответа. Что в вашем ответе плохо - вам уже сообщалось:
setInterval(*!*'test()'*/!* ,   rand(1000, 10000) );

Передавать строку заместо функции - некошерно. Плюс, у вас в ф-ции спокойно может получиться дробное время. Две причины, по которым ваш ответ можно признать, мягко говоря, не самым лучшим.

Цитата:

Сообщение от Livaanderiamarum
а вот ребята ни чего не показали ему))

Показали))

Цитата:

Сообщение от Livaanderiamarum
может я плохой учитель((((? может я говенный учитель(

Это точно.

Livaanderiamarum 27.12.2011 02:49

Цитата:

Сообщение от trikadin (Сообщение 146327)
Это точно.

если бы я написал так, было бы лучше((((?

(function test(min, max){
alert('ня!')
setTimeout(function(){test(min, max)}, (max-min)*Math.random()+min);
})(1000, 5000)


я прощен(((? я минут 40 писал это исправляя свои ошибки... норма(? может как то контекст сохранять? или не? я думаю ... хотя может и да? может нужно ему было этот вариант дать? чтобы он ни хрена не понял а тупо копировал его? не не, серьезно, а то так он мозги напрягать начнет((...

p.s. к сведению, это лучший вариант из всех точек зрения(хотя вариант нерва лучше в том что рандомное значение заранее известно) с этим ни кто не поспорит), но этот вариант не понятен человеку и не отвечает на его вопросы.

FINoM 27.12.2011 02:51

Одно из двух: это или немо или соловей.

Livaanderiamarum 27.12.2011 02:54

Цитата:

Сообщение от FINoM (Сообщение 146330)
Одно из двух: это или немо или соловей.

кто млять такое немо??? Меня Леха зовут! http://vk.com/maxmaxmaximus достали с немо!

trikadin 27.12.2011 02:56

Livaanderiamarum, да, так лучше.

FINoM, не думаю. Он третья сила))

Livaanderiamarum, запрос в поиск "немо" по этому форуму.

Livaanderiamarum 27.12.2011 02:59

Цитата:

Сообщение от trikadin (Сообщение 146333)
Livaanderiamarum, да, так лучше.

спасибо, я потратил 12 секунд не зря, но это ведь правда не выполнило цель прибывания на форуме.. помогать юзерам разобраться, а не выполнять их квесты.. щас без сарказма.

Livaanderiamarum 27.12.2011 03:01

Цитата:

Сообщение от trikadin (Сообщение 146333)
FINoM, не думаю. Он третья сила))

к слову, я не тролль. прост иногда само включается когда на меня нападают и начинают просто так придираться не разобравшись.

trikadin 27.12.2011 03:03

Livaanderiamarum, проблема не в том, что пользователь получил слишком простой вариант. Проблема в том, что пользователь получил неправильный вариант. А он этот вариант запомнит и будет использовать. Поэтому ваш вариант плох.

Livaanderiamarum 27.12.2011 03:05

Цитата:

Сообщение от trikadin (Сообщение 146336)
Livaanderiamarum, проблема не в том, что пользователь получил слишком простой вариант. Проблема в том, что пользователь получил неправильный вариант. А он этот вариант запомнит и будет использовать. Поэтому ваш вариант плох.

не, он же функцию вообще тестовую сделал! ему это и не нужно в продакшене! Он не может понять как получить диапазон рандома. ну в том что он подумал что я показывал не только это а еще и все остальное то это да, ты прав наверное.. он написал Интервал, я намеренно так оставил чтобы не путать его. щас подумал что зря. Как я понял он хочет чтобы она КАЖДЫЙ РАЗ вызывалась в разное время. Но интервал для этого не годятся. По этому , как я подумал, он заметив это, использует сеттаймаут, но не подумал что он не знает как сделать самовызов.

в любом случае я предоставил ему генератор по диапазону включая. вынес в отдельную функцию чтобы он мог юзать. я как понял ему именно это и не понятно было. еще я подумал что он думает что можно только переменными переменные значения передавать. я показал что не обязательно сохранять в промежуточной переменной что-либо чтобы его передать, показать что функции могут "превращаться" в результат своей работы.

да, и небольшой секрет, 100% того что я спрашиваю на форуме я знаю. но на некоторые темы хочется поболтать, либо поспорить потому что я считаю что сделали не правильно, например.

Livaanderiamarum 27.12.2011 03:44

да, кстати вот как бы я сделал обратный таймер, если уж он мне нужен был

<span id='ня'></span>
<script type='text/javascript'>
(function timerFunction(s,m,h, timer, start){
			if(s){										
				timer = (s + (m?m:0)*60 + (h?h:0)*3600) * 1000	
				start = (new Date()).getTime() 
			}
			var last = timer - ((new Date()).getTime() - start), 
			timeout = last.toString().slice(-3) 			

			document.getElementById('ня').innerHTML = last

			setTimeout(function(){ timerFunction(0,0,0,timer,start) },
				timeout>0&&timeout>500?timeout:timeout<500?1000-timeout:1000) 
})(10, 1)  //секунды, минуты, часы
</script>

trikadin 27.12.2011 03:58

Цитата:

Сообщение от Livaanderiamarum
да, и небольшой секрет, 100% того что я спрашиваю на форуме я знаю. но на некоторые темы хочется поболтать, либо поспорить потому что я считаю что сделали не правильно, например.

Это может вызвать удаление ваших тем как засоряющих форум.

И успокойтесь вы с вашим таймером.

Livaanderiamarum 27.12.2011 04:10

Цитата:

Сообщение от trikadin (Сообщение 146342)
Это может вызвать удаление ваших тем как засоряющих форум.

хорошо, тогда я не буду так делать..

melky 28.12.2011 23:58

Цитата:

Сообщение от Livaanderiamarum (Сообщение 146345)
хорошо, тогда я не буду так делать..

делай, беседы и споры оживлт форум. только стиль спора стоит поменять с толстого троллинга на тонкие дискуссии.

Цитата:

Сообщение от Livaanderiamarum (Сообщение 146334)
спасибо, я потратил 12 секунд не зря, но это ведь правда не выполнило цель прибывания на форуме.. помогать юзерам разобраться, а не выполнять их квесты.. щас без сарказма.

ну не с eval же.
аалог - помочь старушке донести её сумки до дома, и с потом ее дома ограбить.


Часовой пояс GMT +3, время: 01:37.