Javascript - Петля с паузами внутри

Я хочу, чтобы это произошло в бесконечном цикле, и я могу выйти в какой-то момент, но это не главное.

Поэтому у меня есть список элементов dom с видео или изображением.

Я сначала смотрю, это образ, если так:

Display the image for X seconds
Then continue

Если его видео

I play the video, and on the onend event, I continue

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

Теперь делать все, что не проблема, но помещая это внутри цикла и останавливаясь на X времени, или пока видео не будет воспроизводиться, там застряли.

Это будет выглядеть так:

func =() ->
console.log "Loop started, now wait X seconds"

delay 3000, ->
    console.log "OK, I waited 3 seconds, now lets go on"

delay 1000, ->
    console.log "Cool, I waited another second, now lets go on"
console.log "Ok, nothing to do, lets start again.."
func()

Таким образом, этот цикл должен в этом случае перезапускаться каждые 4 секунды Любые идеи для методов, на которые я могу смотреть?

0
nl ja de
Никогда, никогда не используйте бесконечный цикл. Если это решение, которое вам кажется нужным, посмотрите на проблему по-другому ...
добавлено автор BenM, источник
Попробуйте использовать jplayer jQuery plugin jplayer.org
добавлено автор Dineshkani, источник
Мне нужно будет иметь бесконечный цикл, его игрок играет контент до тех пор, пока он не остановится (когда пользователь скажет)
добавлено автор Harry, источник
не уверен, что поможет setimeout и setInterval. Конечно, вы можете проверить, разрешает ли говорить каждую секунду, а затем переходить к следующему элементу. но он должен приостанавливаться при отображении изображения. используя setInterval, он будет делать это каждые x секунд. это не хватает точки
добавлено автор Harry, источник
Посмотрите setTimeout() и setInterval() .
добавлено автор JJJ, источник
«Бесконечный цикл» - звон колоколов. Попробуйте использовать обработчики событий или функцию тайм-аута.
добавлено автор Samuel Liew, источник

2 ответы

Я думаю, что ваш код должен быть структурирован следующим образом:

status = 'nothing'

function loop() {
    if status == 'nothing'

        if next item is image
            show image
            status = 'image'
            countdown = 1000//time to display the image

        if next item is video
            play video
            videoIsEnded = false
            status = 'video'
            video.onend = function { videoIsEnded = true }

    if status == 'image'
        if countdown-- < 0
            hide image
            status = 'nothing'

    if status == 'video'
        if videoIsEnded
            hide video
            status = 'nothing'
}

setInterval(loop, 1000)//check the status every second
1
добавлено

Не используйте бесконечный цикл.

Вместо этого используйте requestAnimationFrame :

   //shim layer with setTimeout fallback
    window.requestAnimFrame = (function(){
      return  window.requestAnimationFrame       || 
              window.webkitRequestAnimationFrame || 
              window.mozRequestAnimationFrame    || 
              window.oRequestAnimationFrame      || 
              window.msRequestAnimationFrame     || 
              function( callback ){
                window.setTimeout(callback, 1000/60);
              };
    })();


   //usage: 
   //instead of setInterval(render, 16) ....

    (function animloop(){
      requestAnimFrame(animloop);
      render();
    })();
   //place the rAF *before* the render() to assure as close to 
   //60fps with the setTimeout fallback.

Чтобы сделать паузу, вы можете использовать временную метку:

http://jsfiddle.net/q7qrP/1/

0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском