$$plugins.define('tooltip', ['throttle'], function (element, options, throttle) { var openBtn = element.querySelector('.tooltip__btn'), tooltipMain = element.querySelector('.tooltip__main'); openBtn.addEventListener('click', (event) => { event.preventDefault(); if (element.classList.contains('tooltip--open')) { element.classList.remove('tooltip--open'); } else { $('.tooltip').not(element).removeClass('tooltip--open'); element.classList.add('tooltip--open'); } }); document.addEventListener('click', function (event) { if (element !== event.target && !element.contains(event.target) && element.classList.contains('tooltip--open')) { element.classList.remove('tooltip--open'); } }); function tooltipPosition() { element.classList.remove('tooltip--bottom'); element.classList.remove('tooltip--right'); element.classList.remove('tooltip--left'); if (element.getBoundingClientRect().top < window.innerHeight / 2) { element.classList.add('tooltip--bottom'); } else { element.classList.remove('tooltip--bottom'); } if (element.getBoundingClientRect().left < tooltipMain.offsetWidth / 2) { element.classList.add('tooltip--right'); } if (document.body.clientWidth - element.getBoundingClientRect().left < tooltipMain.offsetWidth / 2) { element.classList.add('tooltip--left'); } } tooltipPosition(); window.addEventListener('scroll', throttle(tooltipPosition, 50)); window.addEventListener('resize', throttle(tooltipPosition, 200)); });