javascript - 滚动过去 anchor 后如何添加类?

标签 javascript jquery

我已经构建了一个 Accordion 选项卡页面。打开选项卡后,页面会自动滚动,将折叠式面板标题放在页面顶部。我想要发生的是,当用户开始向下滚动时,将一个类添加到面板标题中,该类会缩小并固定在顶部。我已在面板主体内部放置了一个 anchor div,但我的脚本未激活。

JS:

function sticky_relocate() {
      var window_top = $(window).scrollTop();
      var div_top = $('.shrink-anchor').offset().top;
      if (window_top > div_top)
        $('.panel-heading a').addClass('shrink')
      else
        $('.panel-heading a').removeClass('shrink');
      }
     $(function() {
      $(window).scroll(sticky_relocate);
      sticky_relocate();
      });

HTML:

<div class="panel panel-main {{ id }}-panel">
    <div class="panel-heading">
        <h2 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#{{ id }}">{% block icon %}<span class="icon icon-cotm"></span>{% endblock %} {% block title %}{% endblock %}</a>
        </h2>
    </div>
    <div id="{{ id }}" class="panel-collapse collapse">
        <div class="panel-body">
            <div class="shrink-anchor"></div>
            {% block content %}
            {% endblock %}
        </div>
    </div>
</div>

如果我将 anchor div 移动到标题面板的结束标记内,它就会起作用。该类已添加,但非常不一致。顶部面板激活较晚。中间面板按时激活。下部面板激活得太早。

花了我一段时间,但整理了一个 JSFIDDLE向您展示这个问题。这没有自动滚动,但您可以看到激活已关闭。它似乎正在读取折叠面板 1 的 anchor 。

最佳答案

还有另一种选择。如果你想要一些强大的东西,有一个名为 WayPoint 的库,它会给你相同的效果和其他选项。

var waypoint = new Waypoint({
  element: document.getElementById('element-waypoint'),
  handler: function(direction) {
    notify(this.element.id + ' triggers at ' + this.triggerPoint)
  },
  offset: '75%'
})

当指定元素距离窗口顶部 75% 时,处理函数将触发。您可以使用它来添加/删除调整元素大小的类。

这是链接 http://imakewebthings.com/waypoints/guides/getting-started/

关于javascript - 滚动过去 anchor 后如何添加类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799314/

相关文章:

javascript - 如何创建动态选项卡内容

JavaScript onClick 事件函数

javascript - 无法使 JavaScript Accordion 与 SQL Server 表一起正常工作

javascript - 将鼠标悬停在 div 上但不在其链接上

javascript - javascript中输入文本值字符串验证

javascript - 通过 mongoDB 集合查询需要什么?

javascript - 为什么 .html() 在用于相同目的时比 .text() 快得多?

javascript - 为什么javascript/jquery-feature不能应用于多个节点?

javascript - 在上传之前将图像从本地文件系统加载到 Canvas

java - Spring JSON 请求得到 406( Not Acceptable )