powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Помогите с задержкой(setinterval) условий...
5 сообщений из 5, страница 1 из 1
Помогите с задержкой(setinterval) условий...
    #39771464
KsOD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вкратце, опишу проблему - возникла проблема с пониманием таких команд, как setinterval и settimeout.
Цель была сделать на условиях сделать задержку в 3 секунды, когда эти же условия ходят по циклу(for)... Фактически пример это и есть данный код, именно сейчас все работает, как предполагается, только данный способ меня не устраивает, ибо каждый раз цикл умножая на себя, увеличивает скорость задержки, хотелось бы уйти от данного ускорения.
Очень долго пытался уяснить куда поставить и что сделать, в итоге результат 0, решил обратится к более опытным людям, которые встречались с данной командой.
P.S. Заранее спасибо, прошу разъяснить данную команду и её особенность работы и прошу прощения, что нету комментариев, на данный момент добавить их не предоставляется возможным мне...

JS
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
    var image = new Array(4);

    image[0] = { 'small': "small-0", 'big': "big-0" };
    image[1] = { 'small': "small-1", 'big': "big-1" };
    image[2] = { 'small': "small-2", 'big': "big-2" };
    image[3] = { 'small': "small-3", 'big': "big-3" };
    image[4] = { 'small': "small-4", 'big': "big-4" };

    var active_image = 0;
    var last_image = 0;

    for (var i = 1; i < 100; i++) {
        setTimeout(function() {

            if (last_image == 0) {

                $("#slide-0").html(image[0].small);
                $("#slide-1").html(image[1].small);
                $("#slide-2").html(image[2].small);
                $("#slide-3").html(image[3].small);
                $("#slide-4").html(image[4].big);

                last_image = 4;
            } else {

                if (last_image == 4) {
                    $("#slide-1").html(image[last_image].small);
                    $("#slide-4").html(image[1].big);
                    last_image = 1;
                }

                if (last_image < 4) {
                    active_image = last_image + 1
                    $("#slide-" + active_image).html(image[last_image].small);
                    $("#slide-4").html(image[active_image].big);

                    if (active_image < 4) {
                        last_image = active_image;
                    } else {
                        $("#slide-0").html(image[0].small);
                        $("#slide-1").html(image[1].small);
                        $("#slide-2").html(image[2].small);
                        $("#slide-3").html(image[3].small);
                        $("#slide-4").html(image[4].big);

                        last_image = 4;
                    }
                }
            }
            console.log(i);
        }, 3000 * i);
    }


HTML
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
        <script src="script.js"></script>
    </head>    
    <body>

     <div id="slide-0">0</div> 
     <div id="slide-1">1</div> 
     <div id="slide-2">2</div> 
     <div id="slide-3">3</div> 
     <div id="slide-4">4</div> 
    </body>
</html>

...
Рейтинг: 0 / 0
Помогите с задержкой(setinterval) условий...
    #39771470
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, видимо, не понимаете, как работает асинхронный код. JS, асинхронный, это значит, что когда указатель команды доходит до вызова асинхронной функции - в нашем случае setTimeout - он не ожидает завершения этой функции, если в функции есть ожидание завершения внешнего процесса. Другими словами, основной поток не блокируется на вызове setTimeout, а продолжает последовательное выполнение программы, в вашем случае - тут же начинает новый цикл. Таким образом у вас будут сто таймаутов, которые ОДНОВРЕМЕННО ждут событие таймера, чтобы вызвать анонимную функцию.
...
Рейтинг: 0 / 0
Помогите с задержкой(setinterval) условий...
    #39771472
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
7.
var i = 0;
var loops = 100;
function doAfterTimeout(timeout){
	console.log("Do iteration ", i);
	if(i < loops) setTimeout(doAfterTimeout, (++i) * 1000);
}
doAfterTimeout(i);
...
Рейтинг: 0 / 0
Помогите с задержкой(setinterval) условий...
    #39771476
KsOD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лысый дядька,

Благодарю мужик, выручил... Да, я еще новичок в JS, поэтому не знал данной особенности, еще раз спасибо, все понял.
...
Рейтинг: 0 / 0
Помогите с задержкой(setinterval) условий...
    #39771594
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KsOD,

в новом стандарте js появились асинхронные функции. То есть можно написать анонимную функцию и заставить родителя подождать её выполнения.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
(async function(){
    for (var i = 1; i < 100; i++) {
        await (function() {
            return new Promise(resolve => {
                setTimeout(() => {
                    // тут код, я пробовал с console.log(i)
                    resolve(i);
                }, 30*i)
            })
        })();
    }
})()



Обращаю внимание, что родительская функция должна быть асинхронной, иначе никто никого ждать не будет (оно кажется ошибкой на этапе компиляции ругнётся, хотя может и на этапе выполнения, не помню точно, лишь пару раз юзал такое)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Помогите с задержкой(setinterval) условий...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]