Создание появляющегося на несколько секунд сообщения
Доброго времени суток!
Пытаюсь создать появляющийся на несколько секунд блок с текстом, со следующими правилами: На странице будет несколько кнопок, по клику на которые будет создаваться сообщение с тем или иным текстом и CSS классом. При последующем клике на туже кнопку, сообщение должно продлить показ. При клике на другую кнопку, сообщение поменяет текст и CSS класс, а так же продлит показ. Написал такой код:
.EventMessageError {
background-color: #f43587;
color: #FFFFFF;
}
.EventMessageNormal {
background-color: #40bb39;
color: #FFFFFF;
}
<button onclick="EventMessage('Текст обычного сообщения', 'EventMessageNormal')"></button>
<button onclick="EventMessage('Текст сообщения об ошибке', 'EventMessageError')"></button>
function EventMessage(MessageText, MessageType) {
function MessageBlockCreate() {
let NewMessageBlock = `<div class="${MessageType}" id="EventMessage">${MessageText}</div>`;
let NewMessageBlockPosition = document.querySelector('body');
NewMessageBlockPosition.insertAdjacentHTML('afterbegin', NewMessageBlock);
//console.log('Block crested');
}
function MessageBlockDestroy(Delay) {
let MessageBlockDestroyTimer = window.setTimeout(() => {
document.body.removeChild(document.getElementById('EventMessage'));
//console.log('Block destroyed');
}, Delay);
}
if (document.getElementById('EventMessage')) {
document.body.removeChild(document.getElementById('EventMessage'));
} else {
MessageBlockDestroy(2500);
}
MessageBlockCreate();
}
Все работает так, как предполагалось, за исключением времени показа сообщения, оно равно времени установленному в setTimeout, на все последующие вызовы функции. Понимаю, что нужно сбросить setTimeout, но не понимаю как. |
всплывающее сообщение
osv,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.EventMessageError {
background-color: #f43587;
color: #FFFFFF;
}
.EventMessageNormal {
background-color: #40bb39;
color: #FFFFFF;
}
</style>
<script>
let MessageBlockDestroyTimer;
function EventMessage(MessageText, MessageType, Delay) {
function MessageBlockRemove() {
let block = document.getElementById('EventMessage');
if (block) block.remove();
}
function MessageBlockCreate() {
MessageBlockRemove();
let NewMessageBlock = `<div class="${MessageType}" id="EventMessage">${MessageText}</div>`;
let NewMessageBlockPosition = document.querySelector('body');
NewMessageBlockPosition.insertAdjacentHTML('afterbegin', NewMessageBlock);
//console.log('Block crested');
}
function MessageBlockDestroy(Delay) {
window.clearTimeout(MessageBlockDestroyTimer);
MessageBlockDestroyTimer = window.setTimeout(MessageBlockRemove, Delay);
}
if (!document.querySelector(`.${MessageType}`)) MessageBlockCreate();
else document.querySelector(`.${MessageType}`).textContent = MessageText;
MessageBlockDestroy(Delay);
}
</script>
</head>
<body>
<button onclick="EventMessage('Текст обычного сообщения 1', 'EventMessageNormal', 3000)">Normal 1</button>
<button onclick="EventMessage('Текст обычного сообщения 2', 'EventMessageNormal', 3000)">Normal 2</button>
<button onclick="EventMessage('Текст сообщения об ошибке', 'EventMessageError', 5000)">Error</button>
</body>
</html>
|
Цитата:
К примеру так:
<button onclick="EventMessage('Текст обычного сообщения 1', 'EventMessageNormal', 3000)">Normal 1</button>
<button onclick="EventMessage('Текст обычного сообщения 2', 'EventMessageNormal', 3000)">Normal 2</button>
<button onclick="EventMessage('Текст сообщения об ошибке', 'EventMessageError', 5000)">Error</button>
При нажатии кнопки Normal 1, а затем Normal 2, сообщение не создается. Если исправить на !MessageBlockCreate(); то работает. Спасибо! |
Цитата:
|
| Часовой пояс GMT +3, время: 21:57. |