与jquery中的scroll事件冲突

时间:2015-01-08 16:12:54

标签: jquery

我有一个标题出现在滚动上并且是固定的,但在产品页面上我还希望导航在滚动到某一点时被修复。我遇到的问题是,它们都是同一个事件。因此,我在同一事件中包含带有标题代码的导航代码,但这意味着当我在产品页面以外的页面上时,该操作不再有效,因为它无法在产品页面上找到元素。如果我单独执行它们,它会与同一事件发生冲突。

我可以使用服务器端代码在页面脚本上执行此操作,但我想知道是否有办法解决它,如果它仍然在JS文件中。

height2 = $('#product_nav_cont').offset().top;
header2 = $('#scroll_header_cont').outerHeight();
empty_div = "<div class='empty_div' style='width:100%; height:"+header2+"px; display:block;' ></div>";
$(window).scroll(function() {
    height = $('#main_header_nav_cont').outerHeight();
    scroll = $(this).scrollTop();
    if(scroll > height) {
        $('#scroll_header_cont').fadeIn(400);
    } else {
        $('#scroll_header_cont').stop().hide();
    }

    scroll2 = $(this).scrollTop();
    pos2 = height2-header2
    //$('#scroll_logo').text(height)
    if(scroll2 > pos2) {
        $('#product_nav_cont').css({'position':'fixed','top':header2,'width':'100%'});
        if( !$('.empty_div').length) {
            $('#main_header_nav_cont').after(empty_div);
        }
    } else {
        $('#product_nav_cont').css({'position':'static','top':'0'});
        $(".empty_div").remove();
    }

});

1 个答案:

答案 0 :(得分:0)

为什么不检查页面上是否存在该元素:

$(window).scroll(function() {

    if (document.getElementById('main_header_nav_cont')) //check if this element is on the page. If not it returns null and it won't execute this if clause.
    {
        height = $('#main_header_nav_cont').outerHeight();
        scroll = $(this).scrollTop();
        if(scroll > height) {
            $('#scroll_header_cont').fadeIn(400);
        } else {
            $('#scroll_header_cont').stop().hide();
        }
    }
    scroll2 = $(this).scrollTop();

    //$('#scroll_logo').text(height)
    if (document.getElementById('product_nav_cont')) //same thing here
    {
        pos2 = height2-header2;
        height2 = $('#product_nav_cont').offset().top;
        if(scroll2 > pos2) {
            $('#product_nav_cont').css({'position':'fixed','top':header2,'width':'100%'});
            if( !$('.empty_div').length) {
                $('#main_header_nav_cont').after(empty_div);
            }
        } else {
            $('#product_nav_cont').css({'position':'static','top':'0'});
            $(".empty_div").remove();
        }
    }
});