繁体   English   中英

jQuery平滑滚动,可链接到许多锚点

[英]jQuery Smooth Scrolling for Many Links to 1 anchor

我有一个动态创建的链接列表,所有链接都应转到页面底部的一个锚点。 然后,脚本打开第四个jQuery子选项卡。 我的行为确实很奇怪,如果有人可以帮助我,我会喜欢的。 这是代码。

<html>
<a id="editRPTab" href="#editpowerrp">Edit RP</a>
<a id="editRPTab" href="#editpowerrp">Edit RP</a>
<a id="editRPTab" href="#editpowerrp">Edit RP</a>
...lots of these...

<a name="editpowerrp" id="editpowerrp" class="editpowerrp"></a> 
</html>

<script type="text/javascript">
$('#editRPTab').click(function(){
    $(document.body).animate({
        scrollTop: $( $(this).attr('href') ).offset().top
    }, 2000);
    $( "#subtabs" ).tabs({ active: 4 });
});
</script>

所以这就是它在做什么。

页面加载后,除第一个链接外,其他链接均不起作用。

第一次单击第一次时,屏幕闪烁,但没有任何滚动或其他任何显示。 该页面位于顶部。

我第二次单击第一次,它按您的期望向下滚动到锚点(每个js代码)。

然后,所有其他链接开始工作,但立即将页面移至锚点,并且不滚动。 仅第一个链接向下滚动。 您可以一次又一次单击以使其滚动。

我在Chrome和Firefox中都看到了类似的行为,尽管在Firefox中它不会滚动。 但是,在第二个单击第一个链接时,它会跳下,其他链接开始起作用。

真奇怪 我正在尽可能快地学习这些东西,但是这件事让我感到困惑。 请让我知道发生了什么,如果您对如何解决此问题有任何建议。

HTML代码:

<script src="http://code.jquery.com/jquery-latest.min.js"></script>


<a class="editRPTab" href="#editpowerrp">Edit RP</a>
<a class="editRPTab" href="#editpowerrp">Edit RP</a>
<a class="editRPTab" href="#editpowerrp">Edit RP</a>

<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />

<a name="editpowerrp" id="editpowerrp" class="editpowerrp">test</a> 

JS:

$(function() {

    $(document).on('click', '.editRPTab', function(e) {

        e.preventDefault();

         $("html, body").animate({ scrollTop: $($(this).attr('href')).offset().top }, 2000);

    });

});

这对我行得通。 您遇到了几个问题。

首先,如果您的元素是动态添加的,则必须委派它们的事件处理程序,以便其工作而不必每次都重新设置处理程序。

同样,唯一的ID只能分配给一个元素。 因此,我将锚标记更改为使用类。

试试看。

感谢罗比的想法。 您的代码工作不充分,但是我可以使用您的建议来修改我的代码。 现在看来运作良好。

HTML

<a class="editRPTab" href="#editpowerrp">Edit RP</a>
<a class="editRPTab" href="#editpowerrp">Edit RP</a>
<a class="editRPTab" href="#editpowerrp">Edit RP</a>

JS

$('.editRPTab').click(function(){
    $(document.body).animate({
        scrollTop: $( $(this).attr('href') ).offset().top
    }, 2000);
    $( "#subtabs" ).tabs({ active: 4 });
});

看来关键是使用类选择器而不是id / name。 因此,我将id更改为class,然后将js函数中的选择器更改为class而不是id。

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM