6 elem.addEventListener('click', event => {
7 if (event.target === elem) return this.hide();
10 window.addEventListener('keyup', event => {
11 if (event.key === 'Escape') {
16 let closeButtons = elem.querySelectorAll('.popup-header-close');
17 for (let i=0; i < closeButtons.length; i++) {
18 closeButtons[i].addEventListener('click', this.hide.bind(this));
22 hide() { this.toggle(false); }
23 show() { this.toggle(true); }
26 let start = Date.now();
29 function setOpacity() {
30 let elapsedTime = (Date.now() - start);
31 let targetOpacity = show ? (elapsedTime / duration) : 1-(elapsedTime / duration);
32 this.container.style.opacity = targetOpacity;
33 if (elapsedTime > duration) {
34 this.container.style.display = show ? 'flex' : 'none';
38 this.container.style.opacity = '';
40 requestAnimationFrame(setOpacity.bind(this));
44 requestAnimationFrame(setOpacity.bind(this));
48 const body = this.container.querySelector('.popup-body');
56 export default Overlay;