gpt4 book ai didi

javascript - Twitter Bootstrap - 即时更新 Affix Data-Offset 属性

转载 作者:行者123 更新时间:2023-11-29 22:19:50 25 4
gpt4 key购买 nike

我正在为页面上的一个区域使用“粘性页脚”技术,该区域也有一个使用词缀的导航栏。问题是 data-offset 属性需要根据粘性页脚的位置进行更新——因此不能对其进行硬编码。

如何获取粘性页脚所在位置的像素值,并将该值传递给数据偏移属性,以便它知道何时附加自己?

如有任何帮助,我们将不胜感激!

最佳答案

我还在根据不能硬编码到 css 中的位置修复导航栏。不是因为粘性页脚,而是导航栏上方的空间(当未固定时)是动态的,但我想解决方案是相似的。

我正在使用 JavaScript 通过动态设置/取消设置适当的类来修复/取消修复,具体取决于某些 DOM 元素在视口(viewport)上是否可见。方案如下:

  • navbar 的样式是position: absolute 并且包含它的空间具有导航栏的静态高度,因此固定时下方内容的位置不会发生变化,
  • 如果上面的元素不可见,则绑定(bind)监视滚动和修复导航栏的函数,
  • 通过比较元素位置的底部与视口(viewport)位置的顶部来检查元素是否可见,
  • 通过在每次用户滚动或更改窗口大小时添加/删除 Bootstrap 类来修复/取消修复。

Opa framework中的代码(转换为 JS+jQuery 应该很简单,因为 Opa 的 DOM 库只是简单地绑定(bind)到 jQuery):

// id of the element above the navbar, and the navbar
logobar_id = "logo-bar";
navbar_id = "main-menu";
// hardcoded height of the navbar
navbar_height_px = 30;

client function distance() {
dom = #{logobar_id};

// hardcoded height of the navbar
win = Dom.select_window();

// position of the top of the viewport
scroll_visible = Dom.get_scroll_top(win);

// return the distance between of bottom of element above the navbar and the top of
dom_bottom = Dom.get_offset(dom).y_px + Dom.get_height(dom);
dom_bottom - scroll_visible;
}

dom = #{navbar_id};

private client function fixation() {
if (distance() <= 0) {
// TODO: remember if subnav is fixed, dont fix if fixed
Dom.add_class(dom, "navbar-fixed-top");
Dom.remove_class(dom, "container");
} else {
// TODO: remember if subnav is fixed, dont unfix if unfixed
Dom.remove_class(dom, "navbar-fixed-top");
Dom.add_class(dom, "container");
void;
}
}

// (un)fix when scroll
private client function onscroll(_) {
fixation();
}

// bind the `onscroll` handler for subnav when it is loaded
private client function onready(_) {
_ = Dom.bind(Dom.select_window(), {scroll}, onscroll);
fixation();
}

导航栏上方的 DOM 元素和导航栏本身:

<div class="container" id=#{logobar_id}>
My logo with dynamic content
</div>
<div class="container" style="height: {navbar_height_px}px; position: relative; top: 0px">
<div style="position: absolute; top: 0px">
<div class="navbar container" id=#{navbar_id} onready={onready}>
...
</div>
</div>
</div>

关于javascript - Twitter Bootstrap - 即时更新 Affix Data-Offset 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079529/

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