2016-11-09 3 views
0

Я хочу выполнить функцию, когда движение мыши заканчивается в mouseDown Observer. Но функция onComplete не выполняется, когда я опускаю мышью. Какие-либо предложения?Проверка наблюдателя при остановке mousemove

var split = $('.drag'); 
var parent = $('.Container'); 

var mouseDowns = Rx.Observable.fromEvent(split, "mousedown"); 
var parentMouseMoves = Rx.Observable.fromEvent(parent, "mousemove"); 
var parentMouseUps = Rx.Observable.fromEvent(parent, "mouseup"); 

var drags = mouseDowns.flatMap(function(e){ 
    return parentMouseMoves.takeUntil(parentMouseUps); 
}); 

drags.subscribe(
    function(e) { 
    var $containerWidth = $('.Container').width(); 
    var clientX = $containerWidth - e.clientX; 

    if (clientX >= 50 && e.clientX >= 50) { 
     $('.left').css('right', clientX); 
     $('.right').css('width', clientX); 
     } 
    }, 
    function(error) { 
     console.log(error); 
    }, 
    function() { 
     console.log('finished'); 
    }); 

jsbin.com url

ответ

1

Если вы хотите, чтобы обнаружить конец события перетаскивания, иначе падение, а затем что-то вроде этого следует сделать трюк:

var drop = mouseDowns.selectMany(
    Rx.Observable.concat([ 
    parentMouseMoves.take(1).ignoreElements(), 
    parentMouseUps.take(1) 
    ]) 
); 

drop.subscribe(function(e) { 
    console.log('finished'); 
}); 

Если внешний большинство функций предполагают, чтобы вернуться значение каждый раз, когда выполняется перетаскивание, вам нужно преобразовать завершение перетаскивания в событие «onNext» для внешнего наблюдаемого.

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