【问题标题】:Data-scroll and data-anchor — active class is off数据滚动和数据锚 - 活动类已关闭
【发布时间】:2013-06-12 16:56:35
【问题描述】:

我正在开发两个站点,Fredrix DesignBosted System,在那里我使用与 Stack Overflow 上的 another question 完全相同的“一页”系统文件和代码。

在 Fredrix Design 上,它完美运行——导航菜单将用户滑动到他/她通过<a data-scroll="example">点击的任何<section data-anchor="example">。但是,它在 Bosted System 网站上的工作方式不同。滑动机制正常运行,但active 类偏离了 20 像素左右。当我到达不同的<section> 时,它并没有完全改变——当我输入它时它会改变。

SEE DEMO

@roasted 在上述其他问题中提供/制作。

【问题讨论】:

  • 嗨,弗雷德里克!两个站点上的 html 结构看起来不一样。 Bosted 网站的部分包含在“滚动”div 中,可能某些 CSS 属性会影响预期行为。
  • 我会说你需要检查其中的一些值,这些值使它出错:scrollPoint = $('section[data-anchor="' + scrollAnchor + '"]').offset().top - 84; 或 ` if ($(this).position().top
  • 感谢您的回复,@roasted。 CSS 属性是我的第一个想法,但我无法破解它。 scroll 类只是一个快速放置的 div,可以用作演示中使用的 wrapper (jsfiddle.net/gUWdJ/3)。我注意到,通过删除演示中的wrapper,我在 Fiddle 中得到的结果与在 Bosted System 上的结果相同。 84 刚刚让header 停在正确的位置(就在<section> 之前)。不就是这个原因吗?
  • 你认为会实现某种wrapper吗?

标签: jquery html


【解决方案1】:

在 Bosted 网站上,像这样设置窗口滚动处理程序似乎可以解决您的问题。您应该以这种方式进行调查以找出发生了什么,但我认为这是由于某处的一些填充/边距属性:

$(window).scroll(function() {
    var windscroll = $(window).scrollTop();
    if (windscroll >= 100) {
        $('section').each(function(i) {
            if ($(this).position().top <= windscroll + 84) { // << here '+ 84' instead of '- 20'
                $('nav a.active').removeClass('active');
                $('nav a').eq(i).addClass('active');
            }
        });

    } else {
        $('nav a.active').removeClass('active');
        $('nav a:first').addClass('active');
    }

}).scroll();

【讨论】:

  • 这很漂亮。希望额外的评论和投票可以帮助更多的人看到这个小宝石。编辑:不只是 Bosted,偷看这个小 sn-p homies。
猜你喜欢
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 2021-12-18
相关资源
最近更新 更多