1
- import { Directive , HostListener , OnInit , ElementRef , Renderer , Output , EventEmitter , Input , OnDestroy } from '@angular/core' ;
1
+ import {
2
+ Directive ,
3
+ HostListener ,
4
+ OnInit ,
5
+ ElementRef ,
6
+ Renderer ,
7
+ Output ,
8
+ EventEmitter ,
9
+ Input ,
10
+ OnDestroy
11
+ } from '@angular/core' ;
2
12
import { Subject } from 'rxjs/Subject' ;
3
13
import { Observable } from 'rxjs/Observable' ;
4
14
import 'rxjs/add/observable/merge' ;
@@ -57,6 +67,8 @@ export class Draggable implements OnInit, OnDestroy {
57
67
*/
58
68
mouseUp : Subject < any > = new Subject ( ) ;
59
69
70
+ private mouseMoveEventListenerUnsubscribe : Function ;
71
+
60
72
/**
61
73
* @hidden
62
74
*/
@@ -158,6 +170,9 @@ export class Draggable implements OnInit, OnDestroy {
158
170
}
159
171
160
172
ngOnDestroy ( ) : void {
173
+ if ( this . mouseMoveEventListenerUnsubscribe ) {
174
+ this . mouseMoveEventListenerUnsubscribe ( ) ;
175
+ }
161
176
this . mouseDown . complete ( ) ;
162
177
this . mouseMove . complete ( ) ;
163
178
this . mouseUp . complete ( ) ;
@@ -168,22 +183,23 @@ export class Draggable implements OnInit, OnDestroy {
168
183
*/
169
184
@HostListener ( 'mousedown' , [ '$event' ] )
170
185
onMouseDown ( event : MouseEvent ) : void {
186
+ if ( ! this . mouseMoveEventListenerUnsubscribe ) {
187
+ this . mouseMoveEventListenerUnsubscribe = this . renderer . listenGlobal ( 'document' , 'mousemove' , ( event : MouseEvent ) => {
188
+ this . mouseMove . next ( event ) ;
189
+ } ) ;
190
+ }
171
191
this . mouseDown . next ( event ) ;
172
192
}
173
193
174
- /**
175
- * @hidden
176
- */
177
- @HostListener ( 'document:mousemove' , [ '$event' ] )
178
- onMouseMove ( event : MouseEvent ) : void {
179
- this . mouseMove . next ( event ) ;
180
- }
181
-
182
194
/**
183
195
* @hidden
184
196
*/
185
197
@HostListener ( 'document:mouseup' , [ '$event' ] )
186
198
onMouseUp ( event : MouseEvent ) : void {
199
+ if ( this . mouseMoveEventListenerUnsubscribe ) {
200
+ this . mouseMoveEventListenerUnsubscribe ( ) ;
201
+ this . mouseMoveEventListenerUnsubscribe = null ;
202
+ }
187
203
this . mouseUp . next ( event ) ;
188
204
}
189
205
0 commit comments