私が取り組んでいるかなり標準的な Flexslider インスタンスがあります。 Flexsliderはjquery.mousewheel.jsプラグインとうまく統合されているため、マウスホイール イベントでスライドを移動できます。
ただし、Mac OSX などではスクロール効果に「intertia」が採用されているため、1 つのスライドだけを左右にスクロールすることは事実上不可能です。一般的な効果は、これらの状況でのわずかなスクロール モーションでさえ、複数のマウスホイール イベントをトリガーし、スライダーを複数の画像を左または右にスクロールすることです。明らかに、これは起こり得ません!
解決策は、 underscore.js、特に「デバウンス」機能を使用することだと思います。しかし、私は比較的 JS/jQuery の経験が浅く、実装方法がわかりません。
アンダースコアのドキュメントから:
デバウンス:
_.debounce(function, wait, [immediate])
渡された関数の新しいデバウンスされたバージョンを作成して返します。これは、最後に呼び出されてから待機ミリ秒が経過するまで実行を延期します。入力が到着しなくなった後にのみ発生するはずの動作を実装するのに役立ちます。たとえば、Markdown コメントのプレビューのレンダリング、ウィンドウのサイズ変更が停止した後のレイアウトの再計算などです。
待機間隔の後縁ではなく、前縁でデバウンスが関数をトリガーするようにするには、immediate パラメーターに true を渡します。「送信」ボタンを誤ってダブルクリックして 2 回目が起動するのを防ぐような状況で役立ちます。
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
});
});
残念ながら、デバウンス機能をマウスホイール イベントに適用する方法がわかりません。可動部分をよく理解していないだけだと思います。
flexslider プラグインの関連するコードは次のとおりです。
// 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で確認することもできます。
これについて何か助けていただければ幸いです!