Как предотвратить прыжок на якорный щелчок?
Я использую e.preventDefault();
, чтобы отключить поведение якоря по умолчанию.
Есть ли способ предотвратить только действие перехода к цели при нажатии?
Я пробовал:
var hash = window.location.hash;
var link = $('a');
$('a').click(function() {
e.preventDefault();
hash = "#"+link.attr("href");
});
Но это не работает: http://jsfiddle.net/ynts/LgcmB/.
Ответы
Ответ 1
$(document).ready(function() {
var hash = window.location.hash;
var link = $('a');
$('a').click(function(e) {
e.preventDefault();
hash = link.attr("href");
window.location = hash;
});
});
Вы также должны указать аргумент события в функции. Называя его как e
или event
, а затем вы можете манипулировать им.
Ответ 2
Это единственное решение, с которым я мог бы работать, который работает последовательно во всех настольных и мобильных браузерах с различными клиентскими пользовательскими интерфейсами и инфраструктурами. Получив координаты окна перед прокруткой, мы можем вернуть и сохранить текущую позицию прокрутки.
$('a').click(function (e) {
var x = window.pageXOffset,
y = window.pageYOffset;
$(window).one('scroll', function () {
window.scrollTo(x, y);
})
});
Ответ 3
Чтобы только предотвратить "прыжок", вам нужно использовать другой идентификатор для целевого элемента, чем тот, который указан в якоре.
например. для ссылки на использование новой вкладки,
<a href="#new" />
а для маски целевого элемента id
<div id="new-tab"></div>
Затем в script добавьте маску к реальному хэшу и используйте его для получения элемента.
$(window).on("hashchange", function(){
var hash = this.location.hash;
var mytab = $(hash + "-tab");
});
Это сохраняет изменения местоположения хэша в истории браузера, которые могут управляться кнопками "назад/вперед", и обнаруживается при загрузке страницы с событием hashchange
, если пользователь вводит страницу с указанным хешем.
Ответ 4
Вы должны привязать событие onclick для привязки и указать return false;
в результате.
Оператор return false;
вызывает поведение кликов по умолчанию (переход) не будет работать.
Вы можете найти более подробную информацию здесь: Как отключить привязку "jump" при загрузке страницы?
Ответ 5
Вам нужно передать событие на функцию.
var hash = window.location.hash;
var link = $('a');
//pass event here
$('a').click(function(e) {
e.preventDefault();
hash = "#"+link.attr("href");
});
Ответ 6
Вы можете использовать match
с ^
для обнаружения, начиная с #
$("a:link").on("click", function(e){
if($(this).attr("href").match("^#")) {
e.preventDefault();
//some other stuff you want to do with the hash, like smooth scroll to anchor
$('html, body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'fast');
}
});