0

我有一个无序列表的链接,它们充当下面内容的过滤器。

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

单击任何链接时,“活动”类将添加到单击的链接中。这可以完美地工作。

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

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

链接 3(活动)+(滚动时我希望活动链接保持在顶部)

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

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

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

我怎么写这个?

我收到“活动”类的“未捕获类型错误:无法读取未定义的属性‘顶部’”。它还不存在,因为我没有点击任何过滤器。

过滤器代码:

$('#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);
4

2 回答 2

0

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

尝试使用类似$('.active:first').

于 2013-09-02T21:17:50.620 回答
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);
    }
});
于 2013-09-03T00:20:07.793 回答