2017-04-15 72 views
0
$(window).on("load resize", function() { 
     if ($(window).width() < 768) { 
      menuHeight = '0px'; 
      contactHeight = '100%'; 
     } else { 
      menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
      contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
     } 
    }); 

的可變外慾該函數的外部訪問這兩個變量(menuHeight,contactHeight)在其他地方使用。我正在測量一個模態的頂部高度,但是它不會在調整大小時作出響應,而不僅僅是加載(在這種情況下,這似乎是一個簡單的If/Else會起作用)。我可能需要一些關於範圍的學習。謝謝!!訪問功能邏輯

+0

如果你還沒有在某個地方聲明'menuHeight'和'contactHeight',那麼這個代碼就會陷入[隱式全局的恐怖](http://blog.niftysnippets.org/2008/03/horror-of- implicit-globals.html)*(這是我貧血的小博客上的一篇文章)*。一定要聲明你的變量。 :-) –

回答

0

您需要定義他們:

var menuHeight = ''; 
var contactHeight = ''; 

$(window).on("load resize", function() { 
    if ($(window).width() < 768) { 
     menuHeight = '0px'; 
     contactHeight = '100%'; 
    } else { 
     menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
     contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
    } 
}); 

您可以使用一個函數:

function scroll() { 
    var menuHeight; 
    var contactHeight; 

    if ($(window).width() < 768) { 
    menuHeight = '0px'; 
    contactHeight = '100%'; 
    } else { 
    menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
    contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
    } 

    getHeight(menuHeight,contactHeight) 

} 

function getHeight(menuHeight,contactHeight) { 
    console.log(menuHeight,contactHeight) 
} 

$(window).scroll(scroll); 

對於全局訪問(不推薦)

window.menuHeight = ''; 
window.contactHeight = ''; 
+0

不知道我是否可以使用'window',因爲這是一個Node項目,至少我在這裏閱讀; )。 –

+0

@ChrisJohnson:您的問題中的代碼顯然是基於瀏覽器的,並且已經使用'window'。 :-)您可能正在使用Node編寫它的服務器部分,但這部分是基於瀏覽器的。但不要使用'window.menuHeight'等等;這樣做需要它們是全局變量,這是一個壞事™。 –

+0

@ T.J.Crowder他們是邪惡的:-)最後的手段使用全局變量,但大多數時候你不會需要它。 –

2

你外面的定義它們功能。另外,因爲load在頁面加載過程中發生得相當晚,所以您需要主動初始化它們,然後根據loadresize對其進行更新。這表明你想要一個可重複使用的功能:

var menuHeight;       // Defining... 
var contactHeight;       // ...them 
grabHeights();        // Proactive 
$(window).on("load resize", grabHeights); // And on events 

function grabHeights() { 
    if ($(window).width() < 768) { 
     menuHeight = '0px'; 
     contactHeight = '100%'; 
    } 
    else { 
     menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
     contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
    } 
} 

如果你的代碼是不是已經在一個範圍的功能,你可能希望把它放在一個:

(function() { 
    var menuHeight; 
    var contactHeight; 
    grabHeights(); 
    $(window).on("load resize", grabHeights); 

    function grabHeights() { 
     if ($(window).width() < 768) { 
      menuHeight = '0px'; 
      contactHeight = '100%'; 
     } 
     else { 
      menuHeight = ($('#desktop-menu').height() + 'px').toString(); 
      contactHeight = ($('.get-in-touch-home').outerHeight() + 'px').toString(); 
     } 
    } 
})(); 

...因爲全局是一壞事™。 :-)

你會看到別人告訴你先走一步,掛鉤事件,然後手動觸發它:

$("selector").on("event", function() { 
    // ... 
}).triger("event"); 

我不是一個球迷。如果你需要調用一個函數,只需調用它。

+0

將繼續嘗試這些。謝謝!! –

+0

所以,我想能夠在下面的代碼中使用這個'更新'變量,但它似乎只是獲得初始值。 '$( 「#接觸模態-1」)animatedModal({ modalTarget: '接觸模態', animatedIn: 'slideInUp', animatedOut: 'slideOutDown', 溢出: '滾動', 位置: 'fixed', top:menuHeight, animationDuration:'。7s', color:'#EBEBEB' });'對於不好格式化的道歉。 –

+0

@ChrisJohnson嘗試從我的代碼getHeight()函數。 –