2013-03-22 2 views
2

Я пытаюсь реализовать слайдер в ember.js; для этого мне нужно было бы захватить событие mouseMove, даже если оно покинет представление, которое оно впервые получило. В чистом JS я хотел бы сделать что-то вроде этого:Захват события mouseMove в ember.js

element.addEventListener 'mousemove', ..., true // true means 'capture event' 

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

Я, похоже, не могу найти способ сделать это в ember.js, но я уверен, что я что-то пропускаю. Если нет, то каков рекомендуемый способ сделать что-то подобное?

ответ

2

К сожалению, EventDispatcher, который обрабатывает настройки обработчиков событий по умолчанию в корневом элементе (обычно body), ничего в рамках mouseMove не делать, чтобы на вид, кроме той, в которой он на самом деле происходит.

Вы можете посмотреть в onDrag, onDragStart и onDragEnd (dragStart, drag, dragEnd в Ember жаргоне) событий, которые в спецификации должны быть обожженных на исходном элементе, и, таким образом, огонь на ваш взгляд, независимо от того, где они происходят.

Вы можете вручную назначить обработчики на body самостоятельно. Добавьте обработчики для mouseUp и mouseMove в обработчик mouseLeave и удалите их в mouseEnter (для предотвращения дублирования) и обработчиков mouseUp.

Самый простой способ сделать это было бы использовать on:

$('body').on('mouseMove.custom', $.proxy(this.yourHandler, this)); 

, а затем удалить:

$('body').off('mouseMove.custom') 
+0

Я в конечном итоге добавление слушателей на теле, отлично работает! –

+0

Я отредактировал свой ответ, чтобы удалить костяную область события mouseMove прямо на ваш взгляд. Слушатели должны просто быть на «теле» без выбора области выбора. –

0

обновление для людей, просматривающих старый вопрос. Теперь компоненты содержат mouseMove и другие встроенные обработчики событий, а также способность добавлять пользовательские.

https://guides.emberjs.com/v2.12.0/components/handling-events/

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    mouseMove() { 
     //do stuff 
    } 
}); 
Смежные вопросы