JavaScript отображать сообщение, используя время пользователя в секундах - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть список из 5000 текстовых строк, и я назначил время для каждой из них (от 0 до 86400 секунд)

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

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

Например:

var interval = [0, 1728, 3456, 5184, 6912, 8640, 10368, 12096, 13824, 15552,
17280, 19008, 20736, 22464, 24192, 25920, 27648, 29376, 31104, 32832,
34560, 36288, 38016, 39744, 41472, 43200, 44928, 46656, 48384, 50112,
51840, 53568, 55296, 57024, 58752, 60480, 62208, 63936, 65664, 67392,
69120, 70848, 72576, 74304, 76032, 77760, 79488, 81216, 82944, 84672];

var textstring = ["Verse 1", "Verse 2", "Verse 3", "Verse 4", "Verse 5", "Verse 6", "Verse 7", "Verse 8", "Verse 9", "Verse 10",
"Verse 11", "Verse 12", "Verse 13", "Verse 14", "Verse 15", "Verse 16", "Verse 17", "Verse 18", "Verse 19", "Verse 20",
"Verse 21", "Verse 22", "Verse 23", "Verse 24", "Verse 25", "Verse 26", "Verse 27", "Verse 28", "Verse 29", "Verse 30",
"Verse 31", "Verse 32", "Verse 33", "Verse 34", "Verse 35", "Verse 36", "Verse 37", "Verse 38", "Verse 39", "Verse 40",
"Verse 41", "Verse 42", "Verse 43", "Verse 44", "Verse 45", "Verse 46", "Verse 47", "Verse 48", "Verse 49", "Verse 50"];

function displayverse() {
    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    var currenttime = (hour * 3600) + (minute * 60) + second;

    for (var i = 0; i < interval.length; i++) {
        if (currenttime >= interval[i][0] && currenttime < interval[i][1]) {
            document.getElementById('verse').innerHTML = textstring[i][0];
        }
    }
}

Мой текущий код не работает. Я думаю, что написанное мной «если» неверно. У кого-нибудь есть идеи о том, что я делаю неправильно?

Вот мой текущий код: https://jsfiddle.net/wrgt1/9bs4eu5q/1/

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Вот модифицированная скрипка, произошла ошибка кода:

https://jsfiddle.net/ujfpy47a/

Модифицированный код:

     for (var i = 0; i < interval.length; i++) {
        if (currenttime >= interval[i] && currenttime < interval[i+1]) {
          document.getElementById('verse').innerHTML = textstring[i];
        }
      }
0 голосов
/ 05 апреля 2020

В вашем коде: interval[i] - это не массив, это уже значение, поэтому вы получаете undefined на interval[i][0] или interval[i][1]. Чтобы получить значение, вам нужно просто interval[i] для первого значения и interval[i+1] для второго.

for (var i = 0; i < interval.length; i++) {
    if (currenttime >= interval[i] && currenttime < interval[i+1]) {
        document.getElementById('verse').innerHTML = textstring[i];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...