2015-08-10 5 views
0

Мне нужно переопределить функции прокрутки над областью переполнения, так что колесико мыши изменяет текущий выбор, а не положение прокрутки.Событие прокрутки блока в knockout.JS

Чтобы сделать это, по крайней мере, мне нужно заблокировать действие прокрутки по умолчанию браузера. Из того, что я могу сказать, нокаут делает это по умолчанию, при условии, что вы не возвращаете 'true' из обработчика события.

Однако, похоже, что это не сработало и не вызывает явное предупреждение 'preventDefault'. Эта проблема должна быть специфичной для события прокрутки.

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

Пример: http://jsfiddle.net/vjLqauq5/2/

+1

http://stackoverflow.com/ a/15479625/2182767 - проверьте этот ответ – Andrey

+0

Это использование jQuery pluggin и просто завершение инициализации внутри привязки нокаута. Возможное решение, но то, что мне действительно нужно, я не могу заблокировать событие, где я есть. –

+0

http://stackoverflow.com/a/4770179/10756 - указывает, что событие прокрутки itelf не может быть отменено. Это должно означать, что здесь не виноваты ни ko, ни jquery. –

ответ

6

Hat наконечник к Андрею за указание на то, что вы должны использовать это событие колеса прокрутки, а не событие прокрутки.

<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/

+2

Это работает, поэтому +1. Я думаю, что мне пришлось бы не согласиться с этим поведением пользовательского интерфейса, хотя, если я увижу прокручиваемую область, я ожидаю, что смогу прокрутить ее с помощью моего колеса ... –

+0

Согласитесь с @JamesThorpe, но хороший ответ mate #roy +1 , ура –

Смежные вопросы