javascript - Knockout.JS 中的阻止滚动事件

标签 javascript jquery knockout.js

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

为了至少做到这一点,我需要阻止浏览器的默认滚动操作。 据我所知,如果您不从事件处理程序返回“true”,则 knockout 默认会执行此操作。

但是它似乎不起作用,也没有在事件上显式调用“preventDefault”。这个问题一定是滚动事件特有的。

scrolled: function (vm, event) {
    event.preventDefault();
    return false;
}

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

最佳答案

向 Andrey 致敬,他指出您应该使用鼠标滚轮事件而不是滚动事件。

<div class="container" data-bind="foreach: items, event: { mousewheel: scrolled }">

通过鼠标滚轮事件,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
}

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

关于javascript - Knockout.JS 中的阻止滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916926/

相关文章:

javascript - 如何通过id触发元素? (".click();"不起作用)

listview 中的 asp.net 复选框调用 javascript 代码 onchange

javascript - 查找相对于字符串中给定位置左侧第一次出现的空格

javascript - MVVM Javascript 与传统 ASP.NET MVC 网站的可扩展性比较如何

javascript - 将 Knockout js json 转换为可观察的

php - 从输入字段中删除文件

php - Cakephp 创建 secret 输入的最佳方法

javascript - HTML5 : how do I disable all links after any one of them are clicked?

javascript - JQGrid 表格上的自定义标题行

javascript - 通过访问 observableArray 来 knockout 计算可观察对象