Skip to content

Commit e36abe9

Browse files
authored
Merge pull request #5827 from IgniteUI/slider-thumb-position-master
fix slider thumb position and focus
2 parents 7db309a + d4d0cb5 commit e36abe9

File tree

2 files changed

+31
-38
lines changed

2 files changed

+31
-38
lines changed

projects/igniteui-angular/src/lib/slider/slider.component.spec.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -551,16 +551,16 @@ describe('IgxSlider', () => {
551551
});
552552

553553
it('labels should show/hide on pointer up/down', async() => {
554-
const sliderEl = fixture.debugElement.query(By.css(SLIDER_CLASS)).nativeElement;
555-
sliderEl.dispatchEvent( new PointerEvent('pointerdown', { pointerId: 1 }));
554+
const sliderEl = fixture.debugElement.query(By.css(SLIDER_CLASS));
555+
sliderEl.nativeElement.dispatchEvent( new PointerEvent('pointerdown', { pointerId: 1 }));
556556
await wait(50);
557557
fixture.detectChanges();
558558

559559
expect(sliderEl).toBeDefined();
560-
let activeThumb = fixture.debugElement.query(By.css('.igx-slider__thumb-to--active'));
560+
let activeThumb = sliderEl.query(By.css('.igx-slider__thumb-to--active'));
561561
expect(activeThumb).not.toBeNull();
562562

563-
sliderEl.dispatchEvent( new PointerEvent('pointerup'));
563+
sliderEl.nativeElement.dispatchEvent( new PointerEvent('pointerup', { pointerId: 1 }));
564564
await wait(slider.thumbLabelVisibilityDuration + 10);
565565
fixture.detectChanges();
566566

@@ -569,26 +569,26 @@ describe('IgxSlider', () => {
569569
});
570570

571571
it('should be able to change thumbLabelVisibilityDuration', async() => {
572-
const sliderEl = fixture.debugElement.query(By.css(SLIDER_CLASS)).nativeElement;
572+
const sliderEl = fixture.debugElement.query(By.css(SLIDER_CLASS));
573573
slider.thumbLabelVisibilityDuration = 1000;
574-
sliderEl.dispatchEvent( new PointerEvent('pointerdown', { pointerId: 1 }));
574+
sliderEl.nativeElement.dispatchEvent( new PointerEvent('pointerdown', { pointerId: 1 }));
575575
await wait(50);
576576
fixture.detectChanges();
577577

578578
expect(sliderEl).toBeDefined();
579-
let activeThumb = fixture.debugElement.query(By.css('.igx-slider__thumb-to--active'));
579+
let activeThumb = sliderEl.query(By.css('.igx-slider__thumb-to--active'));
580580
expect(activeThumb).not.toBeNull();
581581

582-
sliderEl.dispatchEvent( new PointerEvent('pointerup'));
582+
sliderEl.nativeElement.dispatchEvent( new PointerEvent('pointerup', { pointerId: 1 }));
583583
await wait(750);
584584
fixture.detectChanges();
585585

586-
activeThumb = fixture.debugElement.query(By.css('.igx-slider__thumb-to--active'));
586+
activeThumb = sliderEl.query(By.css('.igx-slider__thumb-to--active'));
587587
expect(activeThumb).not.toBeNull();
588588

589589
await wait(300);
590590
fixture.detectChanges();
591-
activeThumb = fixture.debugElement.query(By.css('.igx-slider__thumb-to--active'));
591+
activeThumb = sliderEl.query(By.css('.igx-slider__thumb-to--active'));
592592
expect(activeThumb).toBeNull();
593593
});
594594

@@ -830,7 +830,7 @@ describe('IgxSlider', () => {
830830
let activeThumb = fixture.debugElement.query(By.css('.igx-slider__thumb-from--active'));
831831
expect(activeThumb).not.toBeNull();
832832

833-
sliderEl.dispatchEvent( new PointerEvent('pointerup'));
833+
sliderEl.dispatchEvent( new PointerEvent('pointerup', { pointerId: 1}));
834834
await wait(slider.thumbLabelVisibilityDuration + 10);
835835
fixture.detectChanges();
836836

@@ -849,7 +849,7 @@ describe('IgxSlider', () => {
849849
let activeThumb = fixture.debugElement.query(By.css('.igx-slider__thumb-from--active'));
850850
expect(activeThumb).not.toBeNull();
851851

852-
sliderEl.dispatchEvent( new PointerEvent('pointerup'));
852+
sliderEl.dispatchEvent( new PointerEvent('pointerup', { pointerId: 1}));
853853
await wait(750);
854854
fixture.detectChanges();
855855

projects/igniteui-angular/src/lib/slider/slider.component.ts

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import {
55
ViewChild,
66
TemplateRef,
77
ContentChild,
8-
AfterContentInit,
98
OnDestroy,
109
HostListener,
1110
ViewChildren,
1211
QueryList,
13-
ChangeDetectorRef
12+
ChangeDetectorRef,
13+
AfterContentChecked
1414
} from '@angular/core';
1515
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
1616
import { EditorProvider } from '../core/edit-provider';
@@ -63,7 +63,7 @@ export class IgxSliderComponent implements
6363
EditorProvider,
6464
OnInit,
6565
AfterViewInit,
66-
AfterContentInit,
66+
AfterContentChecked,
6767
OnDestroy {
6868

6969
// Limit handle travel zone
@@ -657,7 +657,7 @@ export class IgxSliderComponent implements
657657
* @hidden
658658
*/
659659
@HostListener('pointerdown', ['$event'])
660-
public onPointerDown($event) {
660+
public onPointerDown($event: PointerEvent) {
661661
this.findClosestThumb($event);
662662

663663
if (!this.thumbTo.isActive && this.thumbFrom === undefined) {
@@ -668,6 +668,7 @@ export class IgxSliderComponent implements
668668
activeThumb.nativeElement.setPointerCapture($event.pointerId);
669669
this.showSliderIndicators();
670670

671+
$event.preventDefault();
671672
}
672673

673674

@@ -680,6 +681,9 @@ export class IgxSliderComponent implements
680681
return;
681682
}
682683

684+
const activeThumb = this.thumbTo.isActive ? this.thumbTo : this.thumbTo;
685+
activeThumb.nativeElement.releasePointerCapture($event.pointerId);
686+
683687
this.hideSliderIndicators();
684688
}
685689

@@ -709,14 +713,6 @@ export class IgxSliderComponent implements
709713
this.hideSliderIndicators();
710714
}
711715

712-
/**
713-
* @hidden
714-
*/
715-
@HostListener('tap', ['$event'])
716-
public onTapListener($event) {
717-
this.onTap($event);
718-
}
719-
720716
/**
721717
*Returns whether the `IgxSliderComponent` type is RANGE.
722718
*```typescript
@@ -874,7 +870,7 @@ export class IgxSliderComponent implements
874870
/**
875871
* @hidden
876872
*/
877-
public ngAfterContentInit() {
873+
public ngAfterContentChecked() {
878874
// Calculates the distance between every step in pixels.
879875
this.stepDistance = this.calculateStepDistance();
880876
}
@@ -920,13 +916,6 @@ export class IgxSliderComponent implements
920916
return this.isRange ? this.thumbFrom.nativeElement : this.thumbTo.nativeElement;
921917
}
922918

923-
/**
924-
*
925-
* @hidden
926-
*/
927-
public onTap($event) {
928-
this.update($event.srcEvent.clientX);
929-
}
930919
/**
931920
*
932921
* @hidden
@@ -1006,9 +995,9 @@ export class IgxSliderComponent implements
1006995
return value;
1007996
}
1008997

1009-
private findClosestThumb(event) {
998+
private findClosestThumb(event: PointerEvent) {
1010999
if (this.isRange) {
1011-
this.closestHandle(event.clientX);
1000+
this.closestHandle(event);
10121001
} else {
10131002
this.thumbTo.nativeElement.focus();
10141003
}
@@ -1086,15 +1075,19 @@ export class IgxSliderComponent implements
10861075
this.updateTrack();
10871076
}
10881077

1089-
private closestHandle(mouseX) {
1078+
private closestHandle(event: PointerEvent) {
10901079
const fromOffset = this.thumbFrom.nativeElement.offsetLeft + this.thumbFrom.nativeElement.offsetWidth / 2;
10911080
const toOffset = this.thumbTo.nativeElement.offsetLeft + this.thumbTo.nativeElement.offsetWidth / 2;
1092-
const xPointer = mouseX - this._el.nativeElement.getBoundingClientRect().left;
1081+
const xPointer = event.clientX - this._el.nativeElement.getBoundingClientRect().left;
10931082
const match = this.closestTo(xPointer, [fromOffset, toOffset]);
10941083

1095-
if (match === fromOffset) {
1084+
if (fromOffset === toOffset && toOffset < xPointer) {
1085+
this.thumbTo.nativeElement.focus();
1086+
} else if (fromOffset === toOffset && toOffset > xPointer ) {
1087+
this.thumbFrom.nativeElement.focus();
1088+
} else if (match === fromOffset) {
10961089
this.thumbFrom.nativeElement.focus();
1097-
} else if (match === toOffset) {
1090+
} else {
10981091
this.thumbTo.nativeElement.focus();
10991092
}
11001093
}

0 commit comments

Comments
 (0)