【发布时间】:2019-10-12 21:44:41
【问题描述】:
我已经建立了一个平滑滚动的单页网站,在平滑滚动后从 URL 中去除锚链接。这是我正在使用的 jQuery:
$(function() {
$('a.page-scroll').on('click', function(event) {
var $anchor = $(this);
$('html, body').stop().animate({
scrollTop: $($anchor.attr('href')).offset().top - 60
}, 1000, 'easeInOutExpo');
event.preventDefault();
});
});
在我添加其他页面之前,一切都很好。在另一个外部页面上的<a class="page-scroll" href="../#contact">Contact</a> 之类的链接之后,我无法删除锚链接。
我在 SO 上进行了高低搜索,但找不到有效的解决方案。
如果链接来自外部页面,我并不完全关心平滑滚动。我最需要的是导航/滚动到主页的 id 部分(带有偏移以适应固定导航)并在链接来自外部页面(来自我网站上的其他页面)时从浏览器 URL 窗口中删除锚链接,或来自其他网站)。
我也试过这个,但它同样只适用于同一页面上的 id 的内部链接:
<script>
$(function() {
$('a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top - 60
}, 1000);
return false;
}
}
});
});
</script>
我也试过这个,但没有运气:
<script type="text/javascript">
(function($) {
$(document).ready(function() {
var url=document.URL.split("#");
var ancher=url[1];
$('html, body').animate({
'scrollTop': $('#'+ancher).offset().top - 60
}, 5000);
});
})(jQuery);
</script>
任何新年前夜的帮助都将不胜感激,这样我就可以完成这个项目!
【问题讨论】:
-
您是否知道 jQuery 的
bind方法自 1.7 版以来已被弃用? -
感谢鲁布斯托。剧本来自另一个人写的剧本。我需要自己写这些东西。都是好时光。感谢您的帮助。
-
让它在a solution Ian Clark 的基础上工作 - 谢谢!
标签: javascript jquery