Я пытаюсь создать пуленепробиваемый скрипт, который выполняет анимационную прокрутку на якорь с помощью jQuery, но только если местоположение якоря в href указывает на существующий якорь на моем текущем сайте.
Это скрипт:
var assConfig;
assConfig = {
duration: 500,
easing: 'swing',
complete: null
};
//Smooth scrolling with links
$('a[href*=\\#]:not([href$=\\#])').on('click', function(event) {
var hash;
// if the anchor is on another site or subsite simply proceed with the default action
// which will probably be leaving the site and go to ghe href location
if (!o(event.target).attr("href")).startsWith("#") && (##### CONDITION-PART ######)) {
return;
}
event.preventDefault();
hash = '#' + $(event.target).attr("href").split("#")[1];
if (typeof $(hash).offset() !== 'undefined') {
$('html,body').animate({
scrollTop: $(this.hash).offset().top
}, assConfig.duration, assConfig.easing, assConfig.complete);
}
});
// Smooth scrolling when the document is loaded and ready
$(document).ready(function() {
if (typeof $(location.hash).offset() !== 'undefined') {
$('html,body').animate({
scrollTop: $(location.hash).offset().top
}, assConfig.duration, assConfig.easing, assConfig.complete);
}
});
У меня вопрос, что поставить вместо ##### CONDITION-PART ######
. Если якорь начинается с хэштега, он может быть только на той же странице. Якорные ссылки, такие как:
href="/?controller=info&action=site/foo#my-beautiful-anchor-target"
href="/#my-beautiful-anchor-target"
href="http://www.example.com/?foo#my-beautiful-anchor-target"
Иногда они могут означать один и тот же сайт, хотя они разные, например:
href="http://www.example.com/?foo#my-beautiful-anchor-target"
href="/?foo#my-beautiful-anchor-target"
href="?foo#my-beatiful-anchor-target"
Так, каков наилучший способ обнаружить, если между $(event.target).href
и window.location.href
происходит перезагрузка страницы?