diff --git a/src/main/angular/src/app/shared/slider/slider.component.html b/src/main/angular/src/app/shared/slider/slider.component.html index ccb426e..597adab 100644 --- a/src/main/angular/src/app/shared/slider/slider.component.html +++ b/src/main/angular/src/app/shared/slider/slider.component.html @@ -1,4 +1,4 @@ -
-
-
+
+
+
diff --git a/src/main/angular/src/app/shared/slider/slider.component.ts b/src/main/angular/src/app/shared/slider/slider.component.ts index 5728fed..7217fbc 100644 --- a/src/main/angular/src/app/shared/slider/slider.component.ts +++ b/src/main/angular/src/app/shared/slider/slider.component.ts @@ -1,4 +1,4 @@ -import {Component, ElementRef, EventEmitter, Input, Output, ViewChild} from '@angular/core'; +import {Component, EventEmitter, Input, Output} from '@angular/core'; const RATE_LIMIT_MS = 300; @@ -28,29 +28,34 @@ export class SliderComponent { @Output() onChange = new EventEmitter(); - @ViewChild('outer') - outer!: ElementRef; - - @ViewChild('slider') - slider!: ElementRef; - private last: number | null = null; - protected change($event: MouseEvent) { + private drag: boolean = false; + + protected mouseDown(slider: HTMLElement, outer: HTMLElement, $event: MouseEvent) { if ($event.buttons !== 1) { return; } - this.apply($event, false); + this.drag = true; + this.apply(slider, outer, $event, false); } - protected end($event: MouseEvent) { - this.apply($event, true); + protected mouseMove(slider: HTMLElement, outer: HTMLElement, $event: MouseEvent) { + this.apply(slider, outer, $event, false); + } + + protected mouseUp(slider: HTMLElement, outer: HTMLElement, $event: MouseEvent) { + this.apply(slider, outer, $event, true); + this.drag = false; this.percentMouse = null; } - private apply($event: MouseEvent, force: boolean) { - const sliderHalf = this.slider.nativeElement.offsetWidth / 2; - const offsetWidth = this.outer.nativeElement.offsetWidth; + private apply(slider: HTMLElement, outer: HTMLElement, $event: MouseEvent, force: boolean) { + if (!this.drag) { + return; + } + const sliderHalf = slider.offsetWidth / 2; + const offsetWidth = outer.offsetWidth; const currentX = $event.clientX; this.percentMouse = Math.max(0, Math.min(100, Math.round(100 * (currentX - sliderHalf) / offsetWidth))); const now = new Date().getTime(); @@ -65,11 +70,11 @@ export class SliderComponent { return `linear-gradient(to right, ${this.color0}, ${this.color1})`; } - left(percent: number): string { - if (!this.slider) { + left(slider: HTMLElement, percent: number): string { + if (!slider) { return "0%"; } - return `calc(${percent}% - ${this.slider.nativeElement.offsetWidth / 2}px)`; + return `calc(${percent}% - ${slider.offsetWidth / 2}px)`; } }