63 lines
2.0 KiB
JavaScript
63 lines
2.0 KiB
JavaScript
// static/programmer/js/floating-button.js
|
|
const CallbackModal = {
|
|
shown: false,
|
|
modalId: 'callbackModal',
|
|
floatingBtnId: 'floatingButton',
|
|
|
|
init() {
|
|
setTimeout(() => {
|
|
const btn = document.getElementById(this.floatingBtnId);
|
|
if (btn) {
|
|
btn.style.display = 'block';
|
|
this.shown = true;
|
|
const button = btn.querySelector('.btn');
|
|
if (button) button.classList.add('pulse');
|
|
}
|
|
}, 5000);
|
|
},
|
|
|
|
open() {
|
|
const modal = document.getElementById(this.modalId);
|
|
if (modal) {
|
|
modal.style.display = 'block';
|
|
const floatingBtn = document.getElementById(this.floatingBtnId);
|
|
if (floatingBtn && this.shown) {
|
|
floatingBtn.style.display = 'none';
|
|
}
|
|
}
|
|
},
|
|
|
|
close() {
|
|
const modal = document.getElementById(this.modalId);
|
|
if (modal) {
|
|
modal.style.display = 'none';
|
|
const floatingBtn = document.getElementById(this.floatingBtnId);
|
|
if (floatingBtn && this.shown) {
|
|
floatingBtn.style.display = 'block';
|
|
const button = floatingBtn.querySelector('.btn.pulse');
|
|
if (button) {
|
|
button.style.animation = 'none';
|
|
setTimeout(() => button.style.animation = '', 10);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// Инициализация и глобальные обработчики
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
CallbackModal.init();
|
|
|
|
// Закрытие по клику вне модального окна
|
|
const modal = document.getElementById(CallbackModal.modalId);
|
|
if (modal) {
|
|
modal.addEventListener('click', (event) => {
|
|
if (event.target === modal) CallbackModal.close();
|
|
});
|
|
}
|
|
|
|
// Закрытие по ESC
|
|
document.addEventListener('keydown', (event) => {
|
|
if (event.key === 'Escape') CallbackModal.close();
|
|
});
|
|
}); |