Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2017, 19:50   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье Самовызов функции, с передачей параметров, до выполнения условия

Здравствуйте!
Помогите, пожалуйста такой вопрос: Как сделать динамическим обратный отсчет?
Есть функция, которая вычисляет и выводит на страницу остаток времени до определенного момента, проще сказать, таймер обратного отсчета.
Проблема в том, остаток времени вычисляется по входным параметрам функции.
Вопрос:
Как сделать самовызов функции, с передачей динамических параметров?
Код:
function nnn(b){
var a = 1;
  if(a < b) {b = b-1; nnn(); console.log('Осталось до а '+b); }
}
var b = 100;
nnn(b);
Женя32 вне форума Ответить с цитированием
Старый 02.09.2017, 20:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Гуглите функции JS SetInterval() и SetTimeout()

а время, которое осталось до события лучше вычислять исходя из разницы между текущим временем и временем события. счётчики можно использовать, но они не очень надёжны.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2017, 20:35   #3
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Гуглите функции JS SetInterval() и SetTimeout()
...
Я не про сам вызов функции спрашиваю, а про передачу параметров.
Если повторно вызвать функцию nnn(), допустим, с помощью функции SetTimeout(), то, какое значение будет иметь переменная b ?

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
...
а время, которое осталось до события лучше вычислять исходя из разницы между текущим временем и временем события. счётчики можно использовать, но они не очень надёжны.
Я так и делаю.
Женя32 вне форума Ответить с цитированием
Старый 02.09.2017, 20:46   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что передадите, то и будет.
Откуда значение брать-то надо?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.09.2017, 21:24   #5
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что передадите, то и будет.
Откуда значение брать-то надо?
Значение нужно брать из функции, и этой же функции передавать....

Есть кнопка, которая вызывает функцию с параметрам b. По сути, это кнопка запуска обратного отсчета. А через параметр b, передается то время, до которого нужно посчитать сколько осталось времени с текущего момента. И чтобы остаток времени обновлялся сам, нужно как-то постоянно вызывать функцию, с изменяющимся, внутри функции, параметром b.
Женя32 вне форума Ответить с цитированием
Старый 02.09.2017, 21:31   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем что-то передавать если время не меняется? Просто вычисляйте остаток в функции переданной setInterval раз в секунду и т.п.
Можно кстати останавливать его, смотрите документацию (clearInterval).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.09.2017, 21:37   #7
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем что-то передавать если время не меняется? ...
Время меняется!
Функция:

Код:
function Unlock(idls)
{
              if (localStorage[idls]){
moment.locale('ru');
var UnlockRe = moment(localStorage[idls]).valueOf();


var DateTime = moment().valueOf();
var d  = UnlockRe - DateTime;

if (d > 0) 
   {
       $('#mes-re').attr("class","message-error").html('Повторить попытку можно будет через: '+moment(d).utc().format('HH:mm:ss')).slideDown(400);
    d > 0 && window.setTimeout(Unlock(), 300)	
   }else
   {
      ...
	return 'false';    
   }
                    }else
					  {return 'false';}
}
Кнопка запуска отсчета:
Код:
$('#button-re').click(function(){
	var rec = $("#rel").val();
	
	if (rec == "" || rec.length > 20)
	{
	    $("#reс").css("borderColor","#FDB6B6");	
	}else
	{
	    var Unlock = UnlockRemind(rec);
		if (Unlock == 'false')
		   { 
                    ...
                   }
	}
	});
Женя32 вне форума Ответить с цитированием
Старый 02.09.2017, 22:02   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Набросал пример:
Код:
function nnn(b){
	var a = new Date();
	a.setTime(a.getTime() + b * 1000);
	var t = function(){
		var now = new Date();
		var left = Math.ceil((a - now) / 1000);
		if (left > 0){
			console.log('Осталось до а ' + left);
			setTimeout(t, 1000);
		} else {
			console.log('Сработало!');
		}
	}
	t();
}
var b = 10;
nnn(b);
Если по ходу дела время до срабатывания может меняться - делайте a глобальным и меняйте его значение.
Arigato вне форума Ответить с цитированием
Старый 03.09.2017, 16:07   #9
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Спасибо большое!

Последний раз редактировалось Alex11223; 03.09.2017 в 16:49.
Женя32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запускать консольное приложение через форму с передачей параметров Titan_of_war Visual C++ 1 29.04.2016 13:26
Запрос из таблицы, с передачей параметров из ячеек. IliaIT Microsoft Office Excel 0 26.02.2015 10:59
Проблемы с передачей параметров в поток через TStringList Pcrepair Общие вопросы Delphi 1 04.01.2013 13:34
Вопрос с передачей параметров в С swooppy Помощь студентам 0 09.05.2012 08:47
проблема с передачей параметров Mira-girl Общие вопросы по Java, Java SE, Kotlin 2 22.11.2010 23:59