diff --git a/src/Handles/index.tsx b/src/Handles/index.tsx index 6174f6fea..405bd0213 100644 --- a/src/Handles/index.tsx +++ b/src/Handles/index.tsx @@ -26,7 +26,7 @@ export interface HandlesProps { } export interface HandlesRef { - focus: (index: number) => void; + focus: (index: number, options?: FocusOptions) => void; hideHelp: VoidFunction; } @@ -66,8 +66,12 @@ const Handles = React.forwardRef((props, ref) => { // =========================== Render =========================== React.useImperativeHandle(ref, () => ({ - focus: (index: number) => { - handlesRef.current[index]?.focus(); + focus: (index: number, options?: FocusOptions) => { + if (options) { + handlesRef.current[index]?.focus(options); + } else { + handlesRef.current[index]?.focus(); + } }, hideHelp: () => { flushSync(() => { diff --git a/src/Slider.tsx b/src/Slider.tsx index 463aed629..0fe7be1f0 100644 --- a/src/Slider.tsx +++ b/src/Slider.tsx @@ -415,7 +415,7 @@ const Slider = React.forwardRef>((prop if (e) { (document.activeElement as HTMLElement)?.blur?.(); - handlesRef.current!.focus(focusIndex); + handlesRef.current!.focus(focusIndex, { preventScroll: true }); onStartDrag(e, focusIndex, cloneNextValues); } else { // https://github.com/ant-design/ant-design/issues/49997 diff --git a/tests/Slider.test.js b/tests/Slider.test.js index a145d0300..4ab4d31c6 100644 --- a/tests/Slider.test.js +++ b/tests/Slider.test.js @@ -33,6 +33,17 @@ describe('Slider', () => { }); }); + it('does not scroll the page when focusing a handle from a track press', () => { + const { container } = render(); + const slider = container.querySelector('.rc-slider'); + const handle = container.querySelector('.rc-slider-handle'); + const focus = jest.spyOn(handle, 'focus'); + + fireEvent.mouseDown(slider, { clientX: 50, clientY: 0 }); + + expect(focus).toHaveBeenCalledWith({ preventScroll: true }); + }); + it('should render Slider correctly where value > startPoint', () => { const { container } = render(); expect(container.getElementsByClassName('rc-slider-handle')[0]).toHaveStyle({ left: '50%' });