2016-06-08 94 views
0

嘿,我有一個問題$(window).widthif 0123在jQuery中的語句。出於某種原因,即使窗口寬度小於991像素,我的函數仍在運行,但我的if語句指出,如果窗口寬度大於991,它應該運行。

function ctaFixTop() { 
    var mn = $("#new-car-offer-cta"); 
    var offerHead = $('#new-car-offer-head'); 
    mns = "new-car-offer-cta-active"; 
    var hdr = 0; 
    var ctaHeight = $("#new-car-offer-cta").height(); 
    $('.header-wrapper, #top-bar, #new-car-back, #new-car-offer-head').each(function() { 
     hdr += $(this).outerHeight(); 
    }); 
    if ($(window).width() > 991) { 
    $(window).scroll(function() { 
     if ($(this).scrollTop() > hdr) { 
      offerHead.css('margin-bottom', ctaHeight); 
      mn.addClass(mns); 
     } else { 
      offerHead.css('margin-bottom', 0); 
      mn.removeClass(mns); 
     } 
    }); 
    } 
} 
$(window).resize(ctaFixTop); 
ctaFixTop(); 

正如你可以看到ctaFixTop函數被調用兩次,一次在初始加載並且每當調整窗口的大小。當我最初加載窗口寬度低於991px的頁面時,函數的工作方式應該如何,然而,如果我然後增加窗口大小超過911px,並將其大小減小到911px以下,即使在包含if聲明的$(window).scroll函數中,函數也會被調用如果窗口寬度大於991,它應該只運行。

任何想法,爲什麼這可能會發生,因爲我試圖解決這個問題,而根本無法理解爲什麼該函數被稱爲即使與if語句周圍。

感謝

+0

滾動事件已經與窗口綁定。只有在頁面加載時纔會檢查您的條件,如果條件爲真,滾動事件將綁定到窗口,直到您解除綁定或卸載頁面。你應該在滾動甚至回調中移動if條件。滾動時每次檢查窗口寬度。 –

回答

3

這是因爲scroll事件已經連接到窗口,你是不是刪除它。你需要做的是把這樣的.scroll()方法裏面的

if ($(window).width() > 991) { 

$(window).scroll(function() { 
    if ($(window).width() > 991) { 
    if ($(this).scrollTop() > hdr) { 
     offerHead.css('margin-bottom', ctaHeight); 
     mn.addClass(mns); 
    } else { 
     offerHead.css('margin-bottom', 0); 
     mn.removeClass(mns); 
    } 
}});