JavaScript 實用程式

我們的 JavaScript 公用程式函式庫易於使用且非常有幫助。

安裝

請參閱我們的 JavaScript安裝 頁面,了解如何在您的專案中安裝我們的檔案。

盒子

js/foundation.util.box.js

其中一個有用的函式庫是 Foundation.Box,它有幾個方法,旨在讓您的生活更輕鬆。您可以將 jQuery 物件或純 JavaScript 元素傳遞給這兩個方法。


var dims = Foundation.Box.GetDimensions(element);

將傳回包含 element 維度的物件。回傳的物件如下所示


{
  height: 54,
  width: 521,
  offset: {
    left: 198,
    top: 1047
  },
  parentDims: {
    height: ... // parentDims and windowDims share the same format as the element dimensions.
  },
  windowDims: {
    height: ...
  }
}

還包含 ImNotTouchingYou 函式。它會根據傳遞的 element 是否與視窗邊緣(預設值)或父元素發生碰撞,傳回布林值。其餘兩個選項是布林值,用於將碰撞偵測限制在一個軸上。


var clear = Foundation.Box.ImNotTouchingYou(element [, parent, leftAndRightOnly, topAndBottomOnly]);

鍵盤

js/foundation.util.keyboard.js

另一個相當有用的函式庫,Foundation.Keyboard 擁有許多方法,讓鍵盤事件互動對所有人來說都更輕鬆。感謝德國的 Marius Olbertz 構思並編寫這個函式庫。

是否曾經想要一個常見鍵碼和其代表按鍵的便利清單?使用 Foundation.Keyboard.keys。這是一個物件,包含我們架構中使用最頻繁的按鍵的鍵值配對。

想要管理自己的鍵盤輸入?沒問題!在 .on('key**') 回呼中,呼叫 Foundation.Keyboard.parseKey(event) 以取得按下的按鍵字串,例如 'TAB''ALT_X'。(你也可以在 Foundation 元件之外,在自己的 JavaScript 程式碼中使用這個函式!)

如果你想要知道頁面上某處是否有可聚焦的元素?無須從頭開始撰寫自己的函式和選擇器,只要使用

var focusable = Foundation.Keyboard.findFocusable($('#content'));

鍵盤工具程式也提供函式,將鍵盤焦點限制在給定元素內。這對彈出視窗而言,在無障礙性方面相當有用。當焦點受限時,在給定容器內最後一個可聚焦元素被選取時,按下 tab 會將焦點移至第一個元素,反之亦然。

// Trap focus to given element
Foundation.Keyboard.trapFocus($('#content'));

// Release focus from given element
Foundation.Keyboard.releaseFocus($('#content'));

不過,這個函式庫真正的精華在於 handleKey 函式。任何註冊到工具程式中的外掛程式都可以呼叫這個方法來管理鍵盤輸入。

Foundation.Keyboard.register('pluginName', {
  'TAB': 'next'
});
...//in event callback
Foundation.Keyboard.handleKey(event, 'pluginName', {
  next: function(){
    //do stuff
  }
});

還有 handledunhandled 函式,你可以將任何程式碼置於其中,這些程式碼將在鍵盤事件處理完畢(或未處理)後始終執行。

如果你想要使用自己的按鍵繫結,只要呼叫 Foundation.Keyboard.register 函式即可。它甚至可以在 Foundation 初始化之後執行。

媒體查詢

js/foundation.util.mediaQuery.js

Foundation 使用的媒體查詢函式庫有兩個公開存取的函式和兩個屬性


Foundation.MediaQuery.get('medium');
// returns the minimum pixel value for the `medium` breakpoint.
Foundation.MediaQuery.atLeast('large');
// returns a boolean if the current screen size is, you guessed it, at least `large`.
Foundation.MediaQuery.queries;
// an array of media queries Foundation uses for breakpoints.
Foundation.MediaQuery.current;
// a string of the current breakpoint size.

還包含一個斷點變更的事件發射器。你可以使用以下方式連結到這個事件


$(window).on('changed.zf.mediaquery', function(event, newSize, oldSize){});

動態和移動

js/foundation.util.motion.js

兩個便利的工具程式,一個小檔案。

Foundation.MotionMotion-UI 函式庫使用的相同 JavaScript,並包含在 Foundation 6 中。請參閱 GitHub 頁面以取得更多詳細資訊。

Foundation.Move 是瀏覽器 requestAnimationFrame 方法的一個簡單輔助函式,用於硬體加速。像這樣呼叫

Foundation.Move(durationInMS, $element, function(){
  //animation logic
});

動畫完成後,您的 jQuery 元素將觸發 finished.zf.animate

計時器

js/foundation.util.timer.js


var timer = new Foundation.Timer($element, {duration: ms, infinite: bool}, callback);
// includes: timer.start(), timer.pause(), timer.restart()

類似於 setInterval,但您可以在中斷處暫停並繼續。

影像載入器

js/foundation.util.imageLoader.js

Foundation.onImagesLoaded($images, callback);

當您的 jQuery 集合中的所有影像載入後,這將執行您的回呼函數。

觸控

js/foundation.util.touch.js

讓您能將 swipe* 和偽拖曳事件加入元素。

$('selector').addTouch().on('mousemove', handleDrag);
// Binds elements to touch events. Used in the Slider plugin for mobile devices.
$('selector').on('swipeleft', handleLeftSwipe);
// Binds elements to swipe events. Used in the Orbit plugin for mobile devices.

觸發器

js/foundation.util.triggers.js

提供多個事件監聽器和觸發器,您的腳本可以連結到這些監聽器和觸發器。大多數監聽器和觸發器不言自明,且用於許多 Foundation 外掛程式。

<button data-open="someId">I open something!</button>
<button data-close="someId">I close something!</button>
<button data-toggle="someId">I toggle something!</button>
// Add the data-open/close/toggle="idOfElement" tag to your markup.
// When a click event is triggered on that element, these are the non-bubbling events directed at your element.
// If you don't use an `id` selector, an event will be triggered that bubbles up to window.
$('selector').on('open.zf.trigger', handleOpen);
$('selector').on('close.zf.trigger', handleClose);
$('selector').on('toggle.zf.trigger', handleToggle);

除了這些有用的按一下觸發器之外,還有其他監聽器可供您使用。需要知道視窗何時已調整大小,但僅在調整大小完成時需要知道嗎?緩衝捲動事件如何?加入這個標記和 JavaScript,您就可以開始了!

<div data-scroll="someId">...</div>
<div data-resize="someId">...</div>
$('#someId').on('scrollme.zf.trigger', handleScroll);
$('#someId').on('resizeme.zf.trigger', handleResize);

節流

js/foundation.core.js

許多時候,當您建立回呼時,加入延遲以防止它被觸發多次是有利的。Foundation 包含一種回呼延遲:throttle

Throttle 防止函數每 n 毫秒執行超過一次。節流通常用於在事件觸發時(在連續動作期間)觸發回呼不利的案例中,但您仍想要在事件發生時觸發反應。這方面的範例會是對瀏覽器視窗調整大小做出反應,或對元素進行動畫。

無延遲

// Button click handler
$('.button').on('click', function(e){
  // Handle Click
});

// Resize function
$(window).on('resize', function(e){
  // Do responsive stuff
});

有延遲

// Throttled resize function
$(window).on('resize', Foundation.util.throttle(function(e){
  // Do responsive stuff
}, 300));

方法簽章

// Arguments:
//    Func (Function): Function to be throttled.
//
//    Delay (Integer): Function execution threshold in milliseconds.
//
// Returns:
//    Lazy_function (Function): Function with throttling applied.

throttle(func, delay) { ... }

其他

Foundation 在核心函式庫中包含許多有用的功能,這些功能用於許多地方,您可以使用這些功能。

Foundation.GetYoDigits([number, namespace]) 傳回一個 36 進位制的偽亂數字串,並帶有連字號命名空間(如果您包含一個命名空間)。兩個參數都是選用的;預設情況下,它會傳回一個六個字元長的字串。

Foundation.getFnName(fn) 傳回一個命名函數的字串表示。看起來很小,但相信我們,這很有用。

Foundation.transitionend() 是函數 ,它傳回適當地供應商加上字首的 transitionend 事件字串。現今大多數瀏覽器不需要字首,但對於需要字首的瀏覽器,我們已為您準備好了。但 IE 9 不支援轉場嗎?你說得對!在這種情況下,使用轉場的我們的外掛程式將僅調整到它們前往的任何位置或可見度狀態,而且此函數將手動在您傳遞的元素上觸發 transitionend 事件。它仍然提供預期的結果,並允許 Motion-UI 在 IE 9 中運作。