2016-11-08 4 views
1

このコードでは、青い線を左右にドラッグして2つのコンテンツを分割することができます。 問題は、私がマウスを押さえてすぐに両脇に移動してマウスを放すと、それはまだ有効です。Observable fromEvenet mouseupが正しくない

だから、take untilは私が推測することはできませんか、それとも他の問題がありますか?

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); 
    } 
}); 

jsbin.com

答えて

2

だから、問題は、あなたは、あなたの.Containerである親にのmouseupイベントをリッスンしているされていますが、すぐに左にするか、コンテナの外に出ることを右のようにどちらかにマウスを移動するとし、あなたがマウスをリリースすると、mouseupイベントはそこに登録され、.Containerには登録されません。

これを修正する方法の1つは、ページ全体のマウスアップを聞くことができます。

//.... 
var parentMouseMoves = Rx.Observable.fromEvent(parent, "mousemove"); 
var parentMouseUps = Rx.Observable.fromEvent($('html'), "mouseup"); 
//.... 

私が期待どおりに動作しているビットは、ここにJsbin

+0

TNX、それをチェックし、あなたのコードを修正しました。ストリームが終了すると、それは再びマウスを聞いていない。マウスを上げた後、次のマウスをすべて聞くにはどうしたらいいですか? –

+0

そして、あなたはjsbinへの変更を保存していません。それは私のものと同じです。 –

+0

@ElīnaLegzdiņaありがとう。 jsbinが更新されました。私はあなたの質問を理解しませんでした。どのストリーム? 'スプリット'のmousedownイベント?私に問題を示すことができますか? – abhishekkannojia

関連する問題