Это очень кратко всплыло в последнем видео: как сделать так, чтобы браузер не скатывался вниз, когда вы нажимаете хэш-ссылку? Это поведение браузера по умолчанию, и, к счастью, с помощью JavaScript мы можем запретить браузеру этого делать.
Самый простой способ справиться с этим:
$("a").on("click", function(event) ( event.preventDefault(); ));
Вы увидите, что эти ссылки не переходят вниз, как вы могли подумать:
Смотрите Pen a5aeaa4890837ac172605983324d5470 Криса Койера (@chriscoyier) на CodePen
Хотя, конечно, будьте осторожны. Это остановит переход хеш-ссылки вниз по странице, но также остановит переход обычной ссылки на новый URL-адрес. Поэтому используйте его только для якорных ссылок, которые, как вы знаете, вы хотите обрабатывать исключительно в своем собственном JavaScript. Вы могли бы сузить круг вопросов вроде $("a(href^='#')")
. например, «Атрибут href ссылки начинается с хеша».
Но часто вы тоже увидите это:
$("a").on("click", function() ( return false; ));
И это делает то же самое. Что здесь происходит, так это то, что на return false;
самом деле он делает две вещи. Он делает то event.preventDefault();
и другое:event.stopPropagation();
Вы можете использовать return false; если хотите, вам просто нужно понять, что такое stopPropagation, и смириться с этим. Я считаю, что обычно лучше не останавливать распространение, если вы не знаете, что конкретно этого хотите. Что он делает, так это останавливает «всплытие» события DOM. Например, если вы DOM, это выглядит так:
- Home
- About
- Clients
- Contact Us
Затем вы щелкаете прямо прямо на слове «Home», это событие click запускает привязку, затем оно всплывает до элемента списка, затем всплывает до неупорядоченного списка, а затем до элемента навигации, полностью вверх. к самому документу.
Когда вы выполняете stopPropagation, при любом событии элемента, в котором вы его запускаете, всплытие на этом останавливается. Просто имейте в виду!
Подробнее об этой разнице я писал здесь.
Ближе к концу видео я говорю о предотвращении прокрутки элемента с помощью preventDefault. Я был совершенно неправ, что ты мог это сделать. Так уж получилось, что это одно событие, которое нельзя так остановить. Есть способы предотвратить это, например, использовать CSS ( overflow: hidden;
- что может быть странно) - или стать довольно необычным.