我正在处理一个非常标准的 Flexslider 实例。 Flexslider与jquery.mousewheel.js插件很好地结合在一起,允许幻灯片在鼠标滚轮事件上移动。
然而,Mac OSX 和其他人使用“intertia”来滚动效果,几乎不可能只向左或向右滚动一张幻灯片。一般的效果是,在这些情况下,即使是最轻微的滚动动作也会触发多个鼠标滚轮事件并左右滚动滑块多个图像。显然,这不可能发生!
我认为解决方案是使用underscore.js - 特别是“去抖动”功能。但是,我在 JS / jQuery 方面相对缺乏经验,无法弄清楚如何实现它。
来自下划线的文档:
去抖:
_.debounce(function, wait, [immediate])
创建并返回传递函数的新去抖动版本,该版本将推迟其执行,直到自上次调用以来等待毫秒过去后。对于实现仅在输入停止到达后才应发生的行为很有用。例如:渲染 Markdown 注释的预览,在窗口停止调整大小后重新计算布局等等。
为立即参数传递 true 以导致去抖动在等待间隔的前沿而不是后沿触发函数。在防止意外双击“提交”按钮再次触发等情况下很有用。
var lazyLayout = _.debounce(calculateLayout, 300); $(window).resize(lazyLayout);
这是我用来初始化 flexslider 的代码:
// MOUSEWHEEL FIX:
function debounceEffect() { // apply debounce to mousewheel here
}
// Initialize FlexSlider
$(window).load(function() {
$('div.flexslider').flexslider({
animation:'slide',
controlNav:true,
mousewheel:true,
pauseOnHover:true,
direction:'horizontal',
animationSpeed:500,
slideshowSpeed:5000,
after:debounceEffect
});
});
不幸的是,我不知道如何将去抖动功能应用于鼠标滚轮事件。我想我只是不太了解运动部件。
// MOUSEWHEEL:
if (vars.mousewheel) {
slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
event.preventDefault();
var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
slider.flexAnimate(target, vars.pauseOnAction);
});
}
如果这很重要,我可以编辑它以包含一些鼠标滚轮插件代码,或者你可以在github上查看它。
我将不胜感激任何帮助!