当前位置: 首页 > 面试题库 >

使用Transition / CSS3滚动到锚点

谯阳伯
2023-03-14
问题内容

我有一系列使用锚机制的链接:

<div class="header">
    <p class="menu"><a href="#S1">Section1</a></p>
    <p class="menu"><a href="#S2">Section2</a></p>
    ...
</div>
<div style="width: 100%;">
<a name="S1" class="test">&nbsp;</a>
<div class="curtain">
Lots of text
</div>

<a name="S2" class="test">&nbsp;</a>
<div class="curtain">
lots of text
</div>
...
</div>

我正在使用以下CSS:

.test
{
    position:relative; 
    margin: 0; 
    padding: 0; 
    float: left;
    display: inline-block;
    margin-top: -100px; /* whatever offset this needs to be */
}

一切正常。但是,当然,当我们单击链接时,它会从一个部分跳到下一个部分。因此,我想使用某种滚动到所选部分的开头进行平滑过渡。

我想我在Stackoverflow上读到,CSS3尚不可能(但现在),但是我想确认一下,并且我想知道什么是“可能的”解决方案。我很高兴使用JS,但不能使用jQuery。我试图在链接上使用on
click功能,检索需要显示的div的“垂直位置”,但未成功。我仍在学习JS,但对它的了解还不足以提出自己的解决方案。

任何帮助/想法将不胜感激。


问题答案:

虽然某些答案非常有用且有用,但我想我会写下我想出的答案。Alex的回答非常好,但是在一定程度上限制了div的高度,需要在CSS中对其进行硬编码。

因此,我想出的解决方案使用JS(没有jQuery),实际上是简化解决方案的版本(几乎到最小),用于解决我在Statckoverflow上发现的类似问题:

的HTML

<div class="header">
    <p class="menu"><a href="#S1" onclick="test('S1'); return false;">S1</a></p>
    <p class="menu"><a href="#S2" onclick="test('S2'); return false;">S2</a></p>
    <p class="menu"><a href="#S3" onclick="test('S3'); return false;">S3</a></p>
    <p class="menu"><a href="#S4" onclick="test('S4'); return false;">S3</a></p>
</div>
<div style="width: 100%;">
    <div id="S1" class="curtain">
    blabla
    </div>
    <div id="S2" class="curtain">
    blabla
    </div>
    <div id="S3" class="curtain">
    blabla
    </div>
    <div id="S4" class="curtain">
    blabla
    </div>
 </div>

注意“返回错误;” 在点击通话中。如果您要避免浏览器跳到链接本身(并让效果由JS管理),则这一点很重要。

JS代码:

<script>
function scrollTo(to, duration) {
    if (document.body.scrollTop == to) return;
    var diff = to - document.body.scrollTop;
    var scrollStep = Math.PI / (duration / 10);
    var count = 0, currPos;
    start = element.scrollTop;
    scrollInterval = setInterval(function(){
        if (document.body.scrollTop != to) {
            count = count + 1;
            currPos = start + diff * (0.5 - 0.5 * Math.cos(count * scrollStep));
            document.body.scrollTop = currPos;
        }
        else { clearInterval(scrollInterval); }
    },10);
}

function test(elID)
{
    var dest = document.getElementById(elID);
    scrollTo(dest.offsetTop, 500);
}
</script>

非常简单。它使用其唯一ID(在功能测试中)找到div在文档中的垂直位置。然后,它调用scrollTo函数,以传递起始位置(document.body.scrollTop)和目标位置(dest.offsetTop)。它使用某种缓入曲线执行过渡。

感谢大家的帮助。

了解一些编码可以帮助您避免(有时很繁重)库,并为您(程序员)提供更多控制权。



 类似资料:
  • 问题内容: 有没有一种方法可以使用jQuery向下滚动到锚链接? 喜欢: ? 问题答案: 这是我的方法: 然后,您只需要像这样创建锚:

  • 从我的AngularJS主页,我需要滚动到另一个页面中的锚定标记。基于url,这两个页面都作为部分html进入ng视图组件。启动服务器时,会加载主页,然后需要从主页转到常见问题页面。我使用了带有#的普通href,但它没有指向目标页面中的正确div。下面是我用$anchorScroll尝试的内容 这里是控制器方法 这是我在家里使用它的方法。html 但这并不能正常工作。如果我直接加载faq页面,然后

  • 问题内容: 我正在使用Bootstrap3,并且希望在用户滚动到我页面上的大标题图像时实现此效果。我需要导航栏的背景从透明变为白色。我查看了他们的代码,我知道它是用javascript完成的,甚至我认为它在哪里发生(在JS中查找ID’#main-header’)… 除了不知道高级Javascript之外,我正在寻找一种在滚动到特定点时将其应用于导航栏的方法。我的代码类称为“ navbar”,当它传

  • 问题内容: 我想让浏览器仅使用JavaScript即可将页面滚动到给定的锚点。 我在HTML代码中指定了或属性: 要么 通过导航到,我希望获得与您相同的效果。应滚动页面,使锚点位于页面可见部分的顶部附近。 问题答案: 完全不需要jQuery!

  • 我需要设置一个ng click事件,以便它加载一个新页面,然后,一旦页面加载完毕,滚动到页面上的一个定位点。我已经尝试了这篇文章中提出的每一个解决方案,但我无法让它正常工作。 大多数解决方案都围绕着滚动到已经加载的页面上的锚定。我需要在加载新页面后出现滚动。 这表示“配置文件卡”中的按钮。当用户点击卡片时,它会将他们带到一个个人资料页面。但是,当他们单击按钮时,它需要将他们带到该配置文件页面的#j

  • 问题内容: 我需要使用浏览整个页面。 现在我正在做: 当我单击Link1时,此方法工作正常,页面滚动到ID为“ div1”的div。 关键是,我不想更改单击后的后缀为URL的URL 。 我尝试了锚href 和 如何避免更改URL? 问题答案: 从Jeff Hines的jQuery动画中获得以下答案: 如果您使用的是jQuery,请不要忘记将库添加到项目中。 编辑:另外,请确保您仍然“返回false