Совет 1
Ну, во-первых, я не рекомендую использовать display: block|none
, чтобы показать или скрыть элементы DOM.Вместо этого попробуйте использовать visibility: visible|hidden
или лучше, переключите имя класса css, например: .hidden
.Это потому, что когда вы устанавливаете отображение элемента DOM равным none, его ширина и высота будут равны нулю, что часто приводит к нежелательной потере пространства, поскольку узел DOM визуально разрушается.Например, при наличии свойства видимости элемент просто исчезает без потери места.
Совет 2
Сообщения об ошибках / состоянии всегда должны находиться в своих собственных контейнерах.Не отображать сообщения в качестве замены некоторого контента, который вам нужно вернуть после.Всегда лучше подготовить пустой <div>
, скрыть его по умолчанию с помощью общего * CSS-класса .hidden
, а затем удалить его, как только вам нужно отобразить контейнер.
Предлагаемое решение
Теперь, в вашем случае, я думаю, что вы используете setInterval
неправильно.Вы должны немедленно показать сообщение с предупреждением, а затем заставить его исчезнуть через несколько секунд.Как предложено выше, это должно быть сделано путем переключения классов CSS, использования различных контейнеров и использования setTimeout
для удаления / добавления классов CSS, как только интервал закончится.По сути, setTimeout
восстанавливает все в исходное состояние.
Итак, учитывая этот код HTML:
<div id="alredGuess">This is the original text</div>
<div id="alertbox" class="hidden"></div>
и этот код CSS:
.hidden { visibility: hidden; }
tryэто:
var alertTimeout = 1000; // Timeout in milliseconds.
function showAlertMessage() {
// This is your original text container.
var alredGuess = document.getElementById("alredGuess");
// This is the new error message container named #alertbox
var alertBox = document.getElementById("alertbox");
// Now let's fill it with the specific error text (better using HTML here).
alertBox.innerHTML = "You've already guessed this letter!";
// Hide the original container by adding an .hidden css class.
alredGuess.classList.add('hidden');
// Show the error message container by removing its default .hidden css class.
alertBox.classList.remove('hidden');
// Then set up an interval: as it ends, revert everything to its original state.
setTimeout(function() {
alertBox.classList.add('hidden');
alredGuess.classList.remove('hidden');
}, alertTimeout);
}
// Call the function.
showAlertMessage();
Скрипка: https://jsfiddle.net/qyk4jspd/
Надеюсь, это поможет.