Skip to content

Commit d62b19e

Browse files
crisbetoandrewseguin
authored andcommitted
fix(slider): inconsistent cursor behavior if user's pointer moves around while dragging
Currently we only change the cursor in the slider if the user's pointer is over the thumb or thumb label. This doesn't work very well while dragging, because the elements aren't very large and the pointer could move off of it temporarily while dragging. These changes make it so the cursor for the entire slider is changed while dragging. Furthermore, on Safari the cursor goes into text selection mode while dragging. These changes address this issue as well. Fixes #14613. (cherry picked from commit 7039b25)
1 parent c62330b commit d62b19e

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

src/material/slider/slider.scss

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ $mat-slider-focus-ring-size: 30px !default;
3535
padding: $mat-slider-padding;
3636
outline: none;
3737
vertical-align: middle;
38+
39+
&:not(.mat-slider-disabled):active,
40+
&.mat-slider-sliding:not(.mat-slider-disabled) {
41+
@include cursor-grabbing;
42+
}
3843
}
3944

4045
.mat-slider-wrapper {
@@ -102,14 +107,9 @@ $mat-slider-focus-ring-size: 30px !default;
102107
}
103108

104109
%_mat-slider-cursor {
105-
.mat-slider:not(.mat-slider-disabled) & {
110+
.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) & {
106111
@include cursor-grab;
107112
}
108-
109-
.mat-slider:not(.mat-slider-disabled) &:active,
110-
.mat-slider-sliding:not(.mat-slider-disabled) & {
111-
@include cursor-grabbing;
112-
}
113113
}
114114

115115
.mat-slider-thumb {

src/material/slider/slider.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,13 @@ describe('MatSlider', () => {
215215
expect(sliderInstance.value).toBe(100);
216216
});
217217

218+
it('should prevent the default action of the `selectstart` event', () => {
219+
const event = dispatchFakeEvent(sliderNativeElement, 'selectstart');
220+
fixture.detectChanges();
221+
222+
expect(event.defaultPrevented).toBe(true);
223+
});
224+
218225
});
219226

220227
describe('disabled slider', () => {

src/material/slider/slider.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ const _MatSliderMixinBase:
120120
'(slide)': '_onSlide($event)',
121121
'(slideend)': '_onSlideEnd()',
122122
'(slidestart)': '_onSlideStart($event)',
123+
// On Safari starting to slide temporarily triggers text selection mode which
124+
// show the wrong cursor. We prevent it by stopping the `selectstart` event.
125+
'(selectstart)': '$event.preventDefault()',
123126
'class': 'mat-slider',
124127
'role': 'slider',
125128
'[tabIndex]': 'tabIndex',

0 commit comments

Comments
 (0)