使用 URL 中没有 # 的锚点滚动

IT技术 javascript html hash
2021-02-07 00:37:14

我需要使用anchor tag.

现在我正在做:

<a href="#div1">Link1</a>

<div id='div1'>link1 points me!!</div>

当我单击 Link1 时,这工作正常,页面滚动到 ID 为“div1”的 div。
关键是,我不想更改我#div点击后作为后缀的URL Link1

我尝试使用锚点 href 作为

void(0);

location.hash='#div1';
return false;

e.preventdefault;

如何避免更改URL?

6个回答

使用 jQuery 的 animate 从 Jeff Hines 那里得到这个答案:

function goToByScroll(id){
    $('html,body').animate({scrollTop: $("#"+id).offset().top},'slow');
}

如果您使用 jQuery,请不要忘记将库添加到您的项目中。

编辑:另外,请确保您仍然“返回假;” 在链接的点击处理程序中,否则它仍会将“#div1”添加到您的 URL(感谢 @niaccurshi)

这很好用。在旧的 # 锚标签上花了很多时间,但是当有一堆脚本时,它们似乎被“破坏”了。
2021-03-27 00:37:14
此外,请确保您仍然在链接的点击处理程序中“返回 false”,否则它仍会将“#div1”添加到您的 URL
2021-04-01 00:37:14

scrollIntoView 当所有其他方法都失败时,做得最好!

document.getElementById('top').scrollIntoView(true);

哪里'top'是你想去的HTML标签的ID。

scrollIntoViewOptions 不过在 Safari 中不起作用。
2021-03-17 00:37:14
非常感谢亲爱的!
2021-03-23 00:37:14
这是一个比接受的更好的解决方案,因为当我使用接受的解决方案时,它不会考虑滚动到的位置上方或下方的任何边距。结果,当滚动完成时,部分文本被截断。
2021-03-25 00:37:14
虽然我喜欢这个答案,但它也无法将注意力集中在滚动的位置。例如,如果您有一个供可访问用户使用的“跳至主要内容”链接,并且您想滚动到主要内容,则使用此链接不会将焦点移到主要内容区域。
2021-04-04 00:37:14
即使我上次尝试时出于某种原因这对我不起作用,也请点赞。
2021-04-06 00:37:14

让您的生活更轻松,请尝试以下操作,如果还有其他问题,请告诉我 ;-)

<div>top</div>
<div style="height: 800px;">&nbsp;</div>
<div><a href="javascript:void(0);" onclick="window.scroll(0,1);">click here</a></div>

仅供参考:你只需要玩一条/单条线href="javascript:void(0);" onclick="window.scroll(0,1);",它对你有用。

祝你有美好的一天!

仅在文档准备好时将此代码添加到 jquery

参考:http : //css-tricks.com/snippets/jquery/smooth-scrolling/

$(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
        }, 1000);
        return false;
      }
    }
  });
});

将平滑滚动添加到任何项目点击,包括锚点、按钮等,而无需向 URL 添加 div id :)

信息: scrollIntoViewOptions(可选) {行为:“自动”| “即时” | "顺利", 块: "开始" | “结尾”, }

function scrollSmoothTo(elementId) {
  var element = document.getElementById(elementId);
  element.scrollIntoView({
    block: 'start',
    behavior: 'smooth'
  });
}
#userdiv {
  margin-top: 200px;
  width: 200px;
  height: 400px;
  border: 1px solid red;
}
<button onclick="scrollSmoothTo('userdiv')">
  Scroll to userdiv
</button>

<div id="userdiv">
  Lorem ipsum this is a random text
</div>

演示

参考:https : //developer.mozilla.org/en/docs/Web/API/Element/scrollIntoView