Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
popup-window-module
Advanced tools
const myWindow = new Modal([options]);
const myWindow = new Modal([options]);
myWindow.open([options]);
...
myWindow.close([options]);
let options = {
element: document.querySelector('#qqq'),
hash:'#popup1',
open: function(){
//До анимации открытия
},
close: function(){
//До анимации закрытия
},
BGclose: function(){
//При закрытии кликом на фон вокруг попапа
},
afterOpen: function(){
// после анимации открытия
},
afterClose: function(){
// после анимации закрытия
}
}
Если указан хэш, то при открытии ссылки с хэшем откроется и соответствующий попап.
Но если нам эти свойства не нужны, то мы можем в опции просто передать DOM объект или его CSS селектор.
let options = "#myBlock";
или
let options = document.querySelector(#myBlock");
Можно обойтись вообще без опций и просто задать элемент отдельно.
const myWindow = new Modal();
let elementID = #myBlock;
let element = document.querySelector(#myBlock");
myWindow.element(elementID || element) // И тут можно передать CSS селектор или элемент.
myWindow.open();
...
myWindow.close();
myWindow.open()
.then( ()=>{
});
...
myWindow.close()
.then( ()=>{
});
Этот вариант использования коллбеков после анимации отличается от использования опций тем, что тут мы можем назначить обработчик именно на конеретный случай
if (a !== 0) {
myWindow.open()
.then( ()=>{
alert(1);
});
} else {
myWindow.open();
}
и такие коллбеки не будут работать на закрытие по клику на пустую область.
let options = {
element: document.querySelector('#qqq'),
open: function(){...},
close: function(){...},
BGclose: function(){...},
afterOpen: function(){...},
afterClose: function(){...}
}
const modal = new Modal(options);
let newOptions = {
open: null,
close: function(){...}
}
modal.open(newOptions);
Важно то, что новые опции не перетрут старые, а дополнят или заменят. Что-бы очистить нужно использовать свойство null.
Перед открытием попапа применятся новые опции.
Если мы откроем попап и сразу же закроем с помощью кода или кликом
const myWindow = new Modal('#qqq');
myWindow.open();
myWindow.close();
То все сработает, однако есть тонкость. Если мы вдруг нечаянно сделаем так:
const myWindow = new Modal('#qqq');
myWindow.open();
myWindow.close().then(()=>{
console.log(1);
});
...
myWindow.close().then(()=>{
console.log(2);
});
...
То второй then с console.log(2)
не сработает.
Я планирую это исправить, пока так.
Что-бы применить стили для попапа нужно использовать такую разметку
<a href="#qwe" class="modal__trigger">Открыть попап</a>
<ul id="qwe" class="modal" >
<li class="modal__footer">
</li>
<li class="modal__content">
<button class="modal__close">Закрыть</button>
</li>
</ul>
Не обязаьельно использовать список с элементами списка, это могут быть простые дивы.
В разметке нет ошибки, если нужен футер с кнопками, то он должен стоять над контентом
options = {
...
modalStyle: {
'max-height' : '90px',
'width': '1200px',
'top': '100px'
},
bgStyle: {
'height' : '20px',
'background' : 'red'
},
...
}
Важно помнить что свойство и значение должны быть строками 'max-width': '120px'
options = {
...
dinamic:true,
...
}
тогда если мы передаем как элеменет CSS селектор #asd .modal.active
, то перед каждым открытием скрипт будет искать новый попап с нужным CSS селектором.
Если мы не хотим передавать CSS селектор то можно передать HTML коллекцию HTMLCollection
, ни в коем случае не лист узлов NodeList
, например:
// ПРАВИЛЬНО
options = {
...
element:'#asd .modal.active'
dinamic:true,
...
}
options = {
...
element: document.querySelector('#asd').getElementsByClassName('active');
dinamic:true,
...
}
//НЕ ПРАВИЛЬНО
options = {
...
element:document.querySelector('#asd .modal.active') || document.querySelectorAll('#asd .modal.active'),
dinamic:true,
...
}
options = {
...
// Не подходит, так как мы передаем элемент а не коллекцию
element: document.querySelector('#asd').getElementsByClassName('active')[0];
dinamic:true,
...
}
Если мы используем
<a href="#qwe" class="modal__trigger"></a>
для открытия модальных окон по хэшу, то что-бы был динамический попап надо добавить класс
<a href="#qwe" class="modal__trigger modal__dinamic"></a>
FAQs
Модальные окна
We found that popup-window-module demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.