javascript - 如何防止散列标签链接滚动页面?

标签 javascript jquery hash

这简直让我抓狂。我正在为一个项目构建一个非常定制的 slider jQuery 插件。我的要求之一是用户必须能够深入链接到特定幻灯片。所以很自然地,我所有的幻灯片都有哈希标签,导航链接也有相应的哈希标签。我的问题是散列标签链接的默认功能是在我由 javascript 触发的滑动动画之上触发的。也就是说,它不是滑动到第 4 张幻灯片,而是立即跳到第 4 张幻灯片,然后动画到第 8 张幻灯片。尽管我使用了我能想到的所有技巧来阻止默认功能。这是有问题的代码片段。

$(slider.nav).bind( 'click', function(event) {
    event.preventDefault();
    if( !$(this).hasClass('active') ) {
        var target = slider.nav.index( $(this) );
        slider.animate( target );
    }
});

如您所见,我使用了 event.preventDefault()。我也试过返回错误。没有运气。有什么想法吗?

最佳答案

没有看到 HTML 很难说。但如果它是我想象的那样,如果它不会去任何地方,你就不需要在链接中保留 href="#"。您可以使用 jQuery 只获取下一张幻灯片,或者不依赖 href="#"链接获取第 7 张幻灯片。

相反,您可以执行以下操作:

<ul id="slideshow">
    <li id="slide_1">Slide 1</li>
    <li id="slide_2">Slide 2</li>
    <li id="slide_3">Slide 3</li> 
</ul>

<a class="slide_nav" data-index="1">1</a>
<a class="slide_nav" data-index="2">2</a>
<a class="slide_nav" data-index="3">3</a>
<a class="slide_nav" data-index="4">4</a>

在 JS 中,做类似的事情:

$('.slide_nav').click(function() {
    var slides = $('#slideshow li'); // get all slides
    var target_id = $(this).data('id') - 1; // Get the current ID and then subtract 1 (index starts at 0)
    slider.animate(slides[target_id]);
});

无论如何,这更像是一个伪示例而不是其他任何东西,我不确定它是否会按原样工作,但代码应该有望为您指明避免使用 href="#"的方向,因此避免您现在遇到的问题。

祝你好运。

关于javascript - 如何防止散列标签链接滚动页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088649/

相关文章:

javascript - 是否可以优雅地处理 Google Maps AJAX 请求超时?

javascript - setInterval 内的 setTimeout 循环

javascript - jQuery 在 html 表中切换 'animation'

jquery - 在 iframe 中将类切换为 HTML

c++ - 实现哈希表

javascript - 如何在具有按钮元素的情况下在 "show more"和 "show less"之间切换?

javascript - 在 Javascript 中将 var 转换为自定义类

jquery - 仅将 CSS 边距应用于 div 中的文本

ruby-on-rails - Ruby - 向哈希添加值会添加重复数据

java - 哈希攻击 : find strings of length 2^N with same hashCode()