Как отследить клик по любой ссылке на странице?

Суть в том, что хочу затемнять страницу, после нажатия на ссылку. Т.е., в тот момент, пока браузер не загрузил ещё новую страницу.

Мне необходимо отследить клик по любой ссылке на странице и выполнить функцию. Не подскажите, как мне отследить нажатие на ссылку?

Нужно именно на чистом JS.


Ответы (2 шт):

Автор решения: Daniil Loban

Для всей страницы лучше делать через делегирование событий, определить функцию клика, далее убедится что клик произошел именно на ссылке. Для того чтобы ссылка не открылась (действие по умолчанию) это нужно запретить методом preventDefault()

 <a href="https://google.com">открыть гугл</a>

 <script type="text/javascript">
  window.addEventListener('click', filter, false)
  function filter(e){
    if (e.target.tagName === 'A'){ // провека что кликнули на ссылку
      console.log(e.target.href);  // получаем URL адрес ссылки
      e.preventDefault();          // отменяем переход 
         
      /*  реализуете свою логику  */

      window.location.href = e.target.href; // переходите по ссылке
    }
  }
 </script>

для более надежного перехвата нужно не забыть про события:

  • onmouseup
  • oncontextmenu
  • onkeydown
  • touchstart

если на окно больше никаких событий не будете навешивать можно сделать это цепочкой присвоений:

window.onclick = window.onmouseup = window.oncontextmenu =
window.onkeydown = window.touchstart = function(e){...} 
→ Ссылка
Автор решения: CbIPoK2513

Можно использовать делегирование событий:

document.addEventListener('click', function(e) {
  if(e.target.tagName === 'A') {
    e.preventDefault(); // Отменяем переход по ссылке
    console.info(e.target.href);
  }
});
<a href="https://google.com">Ссылка</a>

<div>
  <div>
    <div>
      <a href="https://yandex.ru">Глубоко</a>
    </div>
  </div>
</div>

→ Ссылка