Двойной таймер Javascript

Итак, я хочу установить ванильный JavaScript для отображения текста на экране сообщения в течение 30-40 секунд, а затем отображать другой текст в течение 10 секунд. Первое сообщение должно измениться в определенном порядке (например, привет, мир, я, люблю java, скрипт). И пройдитесь по циклу. Я попытался поместить его в массив с таймером, но не удалось заставить таймер колебаться между 30 и 10 секундами. То есть ... привет 30 секунд, затем мир 10 секунд, затем 30 секунд "я люблю" и так далее. В настоящее время я следую этому примеру, но я бы предпочел не заниматься математикой, должен быть лучший способ чище. https://www.w3schools.com/jsref/met_win_settimeout.asp

Это то, что я делаю сейчас. Сокращенно

function timedText() {
    setTimeout(myTimeout1, 10000) setTimeout(myTimeout2, 30000) setTimeout(myTimeout3, 40000)
}

function myTimeout1() {
    document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: yellow; color: black; text-align: center;'>Mountin Climbers</h2>";
}

function myTimeout2() {
    document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: red; color: white; text-align: center;'>REST</h2>";
}

function myTimeout3() {
    document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: yellow; color: black; text-align: center;'>Inch Worms</h2>";
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
98
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Почему бы просто не иметь две функции, одну, которая устанавливает другую, и наоборот?

function one() {
  window.alert('Messsage One')
  setTimeout(two, 10*1000);
}

function two() {
  window.alert('Message two');
  setTimeout(one, 30*1000);
}

setTimeout(two, 30*1000);

Очевидно, вы можете изменить вызовы window.alert на любой метод, который вы фактически используете для отображения текста.

РЕДАКТИРОВАТЬ Хорошо, обновить по вашему запросу. Если вы хотите, чтобы массив слов повторялся в разное время, я сделал это так. Учитывая HTML:

<div id='msgBox'></div>

Вы можете настроить массив и функцию для отображения из этого массива следующим образом:

var msgBox = document.getElementById('msgBox');
var messages = ['hello', 'world', 'i' ,'love', 'java', 'script']

function updateMessage() {
  // take the first word out of the array and store it in the msg variable
  var msg = messages.shift();
  // set the div content to the word
  msgBox.innerHTML = msg;
  // pick a duration based on if the remaining array length is odd or even
  var duration = messages.length % 2 ? 10 * 1000 : 30 * 1000
  // queue up the next message update
  setTimeout(updateMessage, duration)
}

setTimeout(updateMessage, 10*1000)

Очевидно, вы можете настроить бит продолжительности, как хотите; Я только что выполнил операцию по модулю, так что в основном, если длина массива четная, вы ждете 10 секунд, если это нечетно, вы ждете 30 секунд.

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

Вот рабочий пример

Я надеялся использовать массив, один таймер за другим, предупреждения - плохой пример, потому что я думаю, что они приостанавливают экран, но когда я делаю txt id, таймеры запускаются сразу. Спасибо за быстрый ответ

pablo 22.11.2018 07:40

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

Paul 22.11.2018 07:45

@pablo, хорошо, это ближе к тому, что ты пытаешься сделать?

Paul 22.11.2018 09:33

вы можете сделать что-то подобное ниже!

you can modify timeout interval as per your requirement

function myTimeout1() {
    document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: yellow; color: black; text-align: center;'>Mountin Climbers</h2>";
    setTimeout(myTimeout2,3000);
}

function myTimeout2() {
    document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: red; color: white; text-align: center;'>REST</h2>";
    setTimeout(myTimeout3,5000);
}

function myTimeout3() {
    document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: yellow; color: black; text-align: center;'>Inch Worms</h2>";
    setTimeout(myTimeout1,2000);
}
myTimeout1();
<div id = "tebatademo">
</div>

Чувак, это почти идеально, спасибо большое. Единственная проблема в том, что массив не завершается правильно. Всегда заканчивается undefined?

pablo 26.11.2018 03:22

@pablo рад, что это помогло, и, пожалуйста, примите ответ, когда он вам поможет. и я не понимаю The only issue is the array does not seem to terminate correctly. It always ends with undefined?, не могли бы вы объяснить поподробнее?

Dhaval Pankhaniya 26.11.2018 08:18

Таким образом, даже в скрипке в примере выполняется итерация по массиву, но к концу кажется, что цикл бесконечен, не завершаясь. Я рассмотрел логику и не вижу, где что-то не так, но опять же, я не лучший JavaScripter. (Попасть туда)

pablo 26.11.2018 15:35

Message.shift заставлял скрипт зацикливаться бесконечно. Добавлено if (messages.length> 0) {}, чтобы исправить это ..... спасибо за тяжелую работу

pablo 27.11.2018 04:12

Лучший способ сделать это с помощью ООП.

function Timer(fn, delay) {
  this.startTimer = function(fn, delay) {
    setTimeout(fn, delay);
  }
  return this;
}

function timedText() {
  let timer1 = new Timer();
  let timer2 = new Timer();
  let timer3 = new Timer();
  timer1.startTimer(myTimeout1, 1000);
  timer2.startTimer(myTimeout2, 3000);
  timer2.startTimer(myTimeout3, 4000);
}

function myTimeout1() {
  document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: yellow; color: black; text-align: center;'>Mountin Climbers</h2>";
}

function myTimeout2() {
  document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: red; color: white; text-align: center;'>REST</h2>";
}

function myTimeout3() {
  document.getElementById("tebatademo").innerHTML = "<h2 style='background-color: yellow; color: black; text-align: center;'>Inch Worms</h2>";
}

timedText();
<div id = "tebatademo"></div>

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

Надеюсь это поможет!

@ Пол, как это не так? не могли бы вы объяснить?

Varit J Patel 22.11.2018 09:49

Другие вопросы по теме