addClass链接点击,然后滚动修复所说的链接到顶部

时间:2013-09-02 21:09:03

标签: jquery click addclass scrollto

我有一个无序的链接列表,作为下面内容的过滤器。

链接1 链接2 链接3 链接4

点击任意链接后,“已激活”类会添加到已点击的链接中。这完全可以正常工作。

链接1 链接2 链接3(活动) 链接4

但是一旦我向下滚动页面,该链接就会消失,所以我希望“活动”链接通过添加另一个类“fixednav”来坚持到顶部。

链接3(有效)+(滚动时我希望活动链接贴在顶部)

**我基本上需要将这两者与首先出现的主动点击小提琴结合起来:

http://jsfiddle.net/m35dB/1/

http://jsfiddle.net/zq9hd/ **

我怎么写这个?

对于“active”类,我得到一个“Uncaught TypeError:无法读取未定义的属性'top'”。它还不存在,因为我没有点击任何过滤器。

过滤代码:

$('#filters a').click(function(){

    if( $(this).is('.active') ) {
       // don't do anything while class is active
    }
    else {
        $('#filters a').removeClass('active'),
        $(this).addClass('active');
    }

});

滚动代码:

function fixDiv() {
    var $div = $(".active");
    if ($(window).scrollTop() > $div.data("top")) { 
        $('.active').addClass('fixednav'); 
    }
    else {
        $('.active').removeClass('fixednav');
    }
}

$(".active").data("top", $(".active").offset().top);
$(window).scroll(fixDiv);

2 个答案:

答案 0 :(得分:0)

好吧,$('.active')返回一组元素,而不是单个元素。

尝试使用类似$('.active:first')的内容。

答案 1 :(得分:0)

尝试将$(".active").data("top", $(".active").offset().top);移动到您的点击功能中,如下所示:

$('#filters a').click(function(){
    var $this = $(this);
    if(!$this.is('.active'))
    {
        $('#filters a').removeClass('active').removeData("top");
        $this.addClass('active').data("top", $this.offset().top);
    }
});