JavaScript 工具

我们的 JavaScript 工具库易于使用且非常有用。

安装

请参阅我们的 JavaScript安装 页面,了解如何在您的项目中安装我们的文件。

Box

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,但您可以暂停并从上次停止的地方继续。

ImageLoader

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 中工作。