javascript - 如何在不自动滚动整个页面的情况下使用 anchor 标记在 div 内滚动?

标签 javascript scroll mouseevent anchor page-jump

我想使用 anchor 标签在网页的 div 内滚动。但是,当我点击 anchor 标签时,整个页面跳转到 div 中的 anchor 标签。

div 中的内容应该滚动,网页主体不会自动滚动。

数周以来,我一直在谷歌上搜索并试图解决这个问题,但尚未找到可接受的解决方案。这似乎也是一个非常常见的问题。

我对 javascript 知之甚少,但据我所知,似乎有两种可能的方法可以实现这一点:

<我>1。使页面主体只能通过鼠标滚轮/手动滚动,而不是 anchor 标记。这将仅适用于正文,而不适用于其他元素。

-或-

<我>2。滚动到 div 内的 anchor 标记,并在它影响 body 之前取消该过程。

如果它没有将 anchor 标记添加到 url,将是一个奖励。

以下是一些指向类似问题的附加链接,您可能有一些想法可以使用: 看起来很有希望,无法让它工作 Scrolling within a div without moving page

使用 event.preventDetfault() 或 event.returnValue = false anchor 链接向右滚动后可能对正文有效 http://js-unit-testing.com/2013/08/08/preventing-anchor-clicking-from-scrolling-to-the-top/

类似问题的其他思路 How to prevent page scrolling when scrolling a DIV element?

How to go to anchor tag in scrollable div without having the whole browser jump down?

How can I differentiate a manual scroll (via mousewheel/scrollbar) from a Javascript/jQuery scroll?

类似问题的其他方法 HTML anchor link with no scroll or jump

这是一个包含相关元素的示例 HTML 和 CSS。您可以调整浏览器窗口的大小,以便主页有一个滚动条,以查看不需要的自动滚动效果:

<html>
<body>
<div id="main">
<div id="mainwide">
<div id="left">
<a href="#2">2</a>
</div>
<div id="right">
<a id="link" name="2">2</a>
</div>
</div>
</div>
</body>
</html>

这是CSS

html {
background-color: LightGreen;
}
#main {
border: 1px solid black;
margin-top: 200px;
width: 500px;
height: 300px;
overflow: hidden;
}
#mainwide {
width: 1000px;
height: 300px;
}
#left {
background-color: MediumSpringGreen;
width: 500px;
height: 300px;
float: left;
display: inline;
}
#right {
background-color: MediumSeaGreen;
width: 500px;
height: 300px;
float: left;
display: inline;
}
a#link {
float: right;
margin: 0;
padding: 0;
}

也许您可以通过明确回答这个常见问题来获得一些分数?

最佳答案

您可以使用 scrollTop Jquery 中的函数可以将可滚动的 div 准确定位到您想要的位置。

$( "#viv_button" ).click(function() {
    var container = document.getElementById('col2'); 
    var scrollTo = document.getElementById('viv');
    container.scrollTop = scrollTo.offsetTop;
});

Here is a fiddle of it working
我使用 anchor 标签来定位它,但您可以使用任何带有 ID 的内容。

关于javascript - 如何在不自动滚动整个页面的情况下使用 anchor 标记在 div 内滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206176/

相关文章:

javascript - 提交后提交按钮不会消失

html - 即使页面放大或缩小,如何保持固定的背景图像大小?

ios - 实现 ScrollView

Javascript:捕获鼠标滚轮事件并且不滚动页面?

javascript - 带有 mouseenter 和 mouseleave 事件的菜单

c# - 来自 Panel 及其子控件的 MouseEnter 和 MouseLeave 事件

java - 保存EventQueue事件并恢复

javascript - 谷歌应用脚​​本: "Missing ' ;' before statement"

javascript - JavaScript 文件中八进制/十六进制与 ascii 占用的空间差异

javascript - Jquery类切换