Skip to content

Commit d24f47a

Browse files
authored
markers plugin: check for event after every add/remove (#2599)
* #2560 check for event after every add/remove * Updated for lint issues * Fixed events after re-registration * Add changelog entry
1 parent 6994f77 commit d24f47a

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

CHANGES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
wavesurfer.js changelog
22
=======================
33

4+
6.4.0 (unreleased)
5+
------------------
6+
- Markers plugin: check for event after every add/remove (#2560)
7+
48
6.3.0 (03.10.2022)
59
------------------
610
- Fix `barMinHeight` option not setting the minimum bar height properly (#2522)

src/plugin/markers/index.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ export default class MarkersPlugin {
173173
this.markers.push(marker);
174174
this._updateMarkerPositions();
175175

176+
this._registerEvents();
177+
176178
return marker;
177179
}
178180

@@ -201,6 +203,8 @@ export default class MarkersPlugin {
201203

202204
this.wrapper.removeChild(marker.el);
203205
this.markers.splice(index, 1);
206+
207+
this._unregisterEvents();
204208
}
205209

206210
_createPointerSVG(color, position) {
@@ -390,6 +394,37 @@ export default class MarkersPlugin {
390394
this.wavesurfer.fireEvent("marker-drop", this.selectedMarker, event);
391395
}
392396

397+
_registerEvents() {
398+
if (!this.markers.find(marker => marker.draggable)) {
399+
return;
400+
}
401+
//we have some draggable markers, check for listeners
402+
if (!this.onMouseMove) {
403+
this.onMouseMove = (e) => this._onMouseMove(e);
404+
window.addEventListener('mousemove', this.onMouseMove);
405+
}
406+
407+
if (!this.onMouseUp) {
408+
this.onMouseUp = (e) => this._onMouseUp(e);
409+
window.addEventListener("mouseup", this.onMouseUp);
410+
}
411+
}
412+
413+
_unregisterEvents() {
414+
if (this.markers.find(marker => marker.draggable)) {
415+
return;
416+
}
417+
//we don't have any draggable markers, unregister listeners
418+
if (this.onMouseMove) {
419+
window.removeEventListener('mousemove', this.onMouseMove);
420+
this.onMouseMove = null;
421+
}
422+
if (this.onMouseUp) {
423+
window.removeEventListener("mouseup", this.onMouseUp);
424+
this.onMouseUp = null;
425+
}
426+
}
427+
393428
/**
394429
* Remove all markers
395430
*/

0 commit comments

Comments
 (0)