gpt4 book ai didi

javascript - float 图像弄乱了 Bootstrap Scrollspy

转载 作者:搜寻专家 更新时间:2023-11-01 04:26:16 24 4
gpt4 key购买 nike

我已经使用 bootstrap 设置了一个页面。 ( http://ethnoma.org/about.html ) 我有一个附加的侧边栏导航(效果很好)。我还在这个导航上使用 bootstrap scrollspy,并且导航中的所有链接都在同一页面内(使用 ancors)。一切正常(即使添加了平滑滚动插件)。在将所有内容添加到页面(我将其放置在 <head> 中)后,我只需调用此脚本来强制 Scrollspy 刷新。

<script type="text/javascript">
// ScrollSpy
$(function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this).scrollspy('refresh')
});
});
</script>

然后我的客户要求我向页面添加图像。我这样做是使用 Bootstrap 标记和 css 类,如下所示:

<a class="pull-right pad5" href="#">
<img class="media-object img-polaroid" src="assets/img/about-001.jpg" alt="Partnership"/>
</a>

这使得父“a”标签向右浮动(在本例中)并使 img 成为 block 元素。

问题是这些 float 图像使页面比原来更长。然而 Scrollspy 仍在同一个地方切换事件链接。这会导致 scrollspy 激活页面下方比您当前位置更远的内容链接。

我不知道如何强制 Scrollspy 在计算 ancors 链接的 ID 位置时考虑 float 图像。你们中有人知道我该如何解决这个问题吗?您可以在以下页面上看到该问题的影响 http://ethnoma.org/about.html

最佳答案

我自己刚遇到这个问题,所以我想我会提供一些解释和可能的解决方案,以防其他人发现自己陷入这种困境。

首先,scrollspy 工作正常。在它计算页面上各种元素的偏移量时,图像尚未加载,因此它们的有效高度为 0。稍后,当图像加载时,浏览器确定它们的原始尺寸,重新计算页面布局,然后用图像重新绘制页面。但是,scrollspy 完全不知道页面已被重绘,因此它继续使用陈旧的偏移量。

如果您在加载所有图像后刷新 scrollspy,您会发现偏移量是正确的。所以,问题是如何做到这一点。

一种解决方案是在每个图像上附加一个onLoad 事件处理程序,然后在处理程序中刷新scrollspy。简化的方法可能如下所示:

<script type="text/javascript">
function refreshScrollspy() {
$('[data-spy="scroll"]').each(function() {
$(this).scrollspy('refresh');
});
}
$(function() {
refreshScrollspy();
});
</script>

<img onload="refreshScrollspy()" src="assets/img/about-001.jpg" alt="Partnership"/>

这是一个 working jsfiddle example .请注意,必须在实际加载图像之前注册该图像的加载处理程序。否则,它不会被解雇。这就是我在这里使用内联事件处理程序的原因。更优雅的解决方案留给读者。

关于javascript - float 图像弄乱了 Bootstrap Scrollspy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com