mirror of
https://gitee.com/ant-design/ant-design.git
synced 2024-12-02 03:59:01 +08:00
fix: Slider Tooltip not follow handler (#20699)
* fix: Slider Tooltip not follow handler * force align only when tooltip visible
This commit is contained in:
parent
78f5607034
commit
c5a40fc683
41
components/slider/SliderTooltip.tsx
Normal file
41
components/slider/SliderTooltip.tsx
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import Tooltip, { TooltipProps } from '../tooltip';
|
||||||
|
|
||||||
|
export default function SliderTooltip(props: TooltipProps) {
|
||||||
|
const { visible } = props;
|
||||||
|
const tooltipRef = React.useRef<Tooltip>(null);
|
||||||
|
|
||||||
|
const rafRef = React.useRef<number | null>(null);
|
||||||
|
|
||||||
|
function cancelKeepAlign() {
|
||||||
|
window.cancelAnimationFrame(rafRef.current!);
|
||||||
|
rafRef.current = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function keepAlign() {
|
||||||
|
if (rafRef.current !== null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rafRef.current = window.requestAnimationFrame(() => {
|
||||||
|
if (tooltipRef.current && (tooltipRef.current as any).tooltip) {
|
||||||
|
(tooltipRef.current as any).tooltip.forcePopupAlign();
|
||||||
|
}
|
||||||
|
|
||||||
|
rafRef.current = null;
|
||||||
|
keepAlign();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
if (visible) {
|
||||||
|
keepAlign();
|
||||||
|
} else {
|
||||||
|
cancelKeepAlign();
|
||||||
|
}
|
||||||
|
|
||||||
|
return cancelKeepAlign;
|
||||||
|
}, [visible]);
|
||||||
|
|
||||||
|
return <Tooltip ref={tooltipRef} {...props} />;
|
||||||
|
}
|
@ -3,7 +3,8 @@ import RcSlider from 'rc-slider/lib/Slider';
|
|||||||
import RcRange from 'rc-slider/lib/Range';
|
import RcRange from 'rc-slider/lib/Range';
|
||||||
import RcHandle from 'rc-slider/lib/Handle';
|
import RcHandle from 'rc-slider/lib/Handle';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import Tooltip, { TooltipPlacement } from '../tooltip';
|
import { TooltipPlacement } from '../tooltip';
|
||||||
|
import SliderTooltip from './SliderTooltip';
|
||||||
import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
|
import { ConfigConsumer, ConfigConsumerProps } from '../config-provider';
|
||||||
|
|
||||||
export interface SliderMarks {
|
export interface SliderMarks {
|
||||||
@ -95,7 +96,7 @@ export default class Slider extends React.Component<SliderProps, SliderState> {
|
|||||||
const isTipFormatter = tipFormatter ? visibles[index] || dragging : false;
|
const isTipFormatter = tipFormatter ? visibles[index] || dragging : false;
|
||||||
const visible = tooltipVisible || (tooltipVisible === undefined && isTipFormatter);
|
const visible = tooltipVisible || (tooltipVisible === undefined && isTipFormatter);
|
||||||
return (
|
return (
|
||||||
<Tooltip
|
<SliderTooltip
|
||||||
prefixCls={tooltipPrefixCls}
|
prefixCls={tooltipPrefixCls}
|
||||||
title={tipFormatter ? tipFormatter(value) : ''}
|
title={tipFormatter ? tipFormatter(value) : ''}
|
||||||
visible={visible}
|
visible={visible}
|
||||||
@ -111,7 +112,7 @@ export default class Slider extends React.Component<SliderProps, SliderState> {
|
|||||||
onMouseEnter={() => this.toggleTooltipVisible(index, true)}
|
onMouseEnter={() => this.toggleTooltipVisible(index, true)}
|
||||||
onMouseLeave={() => this.toggleTooltipVisible(index, false)}
|
onMouseLeave={() => this.toggleTooltipVisible(index, false)}
|
||||||
/>
|
/>
|
||||||
</Tooltip>
|
</SliderTooltip>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@
|
|||||||
"rc-tooltip": "~4.0.0-alpha.3",
|
"rc-tooltip": "~4.0.0-alpha.3",
|
||||||
"rc-tree": "~3.0.0-alpha.37",
|
"rc-tree": "~3.0.0-alpha.37",
|
||||||
"rc-tree-select": "~3.0.0-alpha.5",
|
"rc-tree-select": "~3.0.0-alpha.5",
|
||||||
"rc-trigger": "~4.0.0-alpha.7",
|
"rc-trigger": "~4.0.0-rc.0",
|
||||||
"rc-upload": "~3.0.0-alpha.0",
|
"rc-upload": "~3.0.0-alpha.0",
|
||||||
"rc-util": "^4.17.0",
|
"rc-util": "^4.17.0",
|
||||||
"rc-virtual-list": "^0.0.0-alpha.25",
|
"rc-virtual-list": "^0.0.0-alpha.25",
|
||||||
|
Loading…
Reference in New Issue
Block a user