在knockout.JS中阻止滚动事件

Dan*_*ell 0 javascript jquery knockout.js

我需要在溢出区域重新实现滚动功能,以便鼠标滚轮改变当前选择而不是滚动位置.

要做到这一点,我至少需要阻止浏览器的默认滚动操作.我可以告诉knockout默认情况下,只要你不从事件处理程序返回'true'.

但它似乎不起作用,也没有明确地对事件调用'preventDefault'.此问题必须特定于scroll事件.

scrolled: function (vm, event) {
    event.preventDefault();
    return false;
}
Run Code Online (Sandbox Code Playgroud)

示例:http://jsfiddle.net/vjLqauq5/2/

Roy*_*y J 7

帽子提示安德烈指出你应该使用mousewheel事件而不是滚动事件.

<div class="container" data-bind="foreach: items, event: { mousewheel: scrolled }">
Run Code Online (Sandbox Code Playgroud)

从鼠标滚轮事件中,deltaY将为您提供滚动方向,您可以使用该方向更改选择的项目:

scrolled: function (vm, event) {
    var direction = Math.sign(event.deltaY), // 1 is down, -1 is up
        maxIdx = vm.items().length - 1,
        selectedIdx = vm.items.indexOf(vm.selected()) + direction;
    if (selectedIdx >= 0 && selectedIdx <= maxIdx) {
        vm.selected(vm.items()[selectedIdx]);
    }
    // return false; // implied as long as you don't return true
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/vjLqauq5/8/

  • 这是有效的,所以+1.我想我不得不不同意这种UI行为 - 如果我看到一个可滚动的区域,我希望能够用我的滚轮滚动它... (2认同)