Skip to content

Commit

Permalink
feat(Balloon): add mouseEnterDelay and mouseLeaveDelay, with higher p…
Browse files Browse the repository at this point in the history
…riority than delay
  • Loading branch information
eamonzym committed Jun 24, 2024
1 parent 09303ce commit 550297f
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 2 deletions.
25 changes: 25 additions & 0 deletions components/balloon/__tests__/balloon-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,31 @@ describe('Balloon', () => {
assert(document.querySelector('.next-balloon-left-top') !== null);
});
});
describe('balloon delay', () => {
it('add mouseEnterDelay and mouseLeaveDelay, with higher priority than delay.', async () => {
const wrapper = mount(
<Balloon trigger={<div>trigger1111111</div>} mouseEnterDelay={4000} mouseLeaveDelay={4000} triggerType="hover">
trigger
</Balloon>
);

wrapper.find('div').simulate('mouseenter');
await delay(2000);
assert(document.querySelector('.next-balloon') === null);

await delay(2200);
assert(document.querySelector('.next-balloon') !== null);

wrapper.find('div').simulate('mouseleave');

await delay(2000);
assert(document.querySelector('.next-balloon') !== null);

await delay(2500);
assert(document.querySelector('.next-balloon') === null);

});
})
});

describe('Balloon onClose ComponentWillReceiveProps closeIcon', () => {
Expand Down
22 changes: 22 additions & 0 deletions components/balloon/__tests__/tooltip-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ const trigger = (
xiachi
</span>
);
const delay = time => new Promise(resolve => setTimeout(resolve, time));

describe('Tooltip', () => {
let defaultWrapper = {};

Expand Down Expand Up @@ -99,4 +101,24 @@ describe('Tooltip', () => {
done();
}, 300);
});

it('add mouseEnterDelay and mouseLeaveDelay, with higher priority than delay.', async () => {
const wrapper = mount(<Tooltip trigger={<div>trigger1111111</div>} delay={500} mouseEnterDelay={1000} mouseLeaveDelay={1000}>test</Tooltip>);

wrapper.find('div').simulate('mouseenter');

await delay(500);
assert(document.querySelector('.next-balloon-tooltip') === null);

await delay(550);
assert(document.querySelector('.next-balloon-tooltip') !== null);

wrapper.find('div').simulate('mouseleave');

await delay(500);
assert(document.querySelector('.next-balloon-tooltip') !== null);

await delay(1000);
assert(document.querySelector('.next-balloon-tooltip') === null);
});
});
12 changes: 12 additions & 0 deletions components/balloon/balloon.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,14 @@ class Balloon extends React.Component {
* 弹层在触发以后的延时显示, 单位毫秒 ms
*/
delay: PropTypes.number,
/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number,
/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number,
/**
* 浮层关闭后触发的事件, 如果有动画,则在动画结束后触发
*/
Expand Down Expand Up @@ -327,6 +335,8 @@ class Balloon extends React.Component {
closable,
shouldUpdatePosition,
delay,
mouseEnterDelay,
mouseLeaveDelay,
needAdjust,
autoAdjust,
safeId,
Expand Down Expand Up @@ -401,6 +411,8 @@ class Balloon extends React.Component {

const otherProps = {
delay: delay,
mouseEnterDelay: mouseEnterDelay,
mouseLeaveDelay: mouseLeaveDelay,
shouldUpdatePosition: shouldUpdatePosition,
needAdjust: needAdjust,
align: alignMap[align].align,
Expand Down
20 changes: 20 additions & 0 deletions components/balloon/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ export interface TooltipProps extends React.HTMLAttributes<HTMLElement>, CommonP
*/
delay?: number;

/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number;

/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number;

/**
* 是否pure render
*/
Expand Down Expand Up @@ -175,6 +185,16 @@ export interface BalloonProps extends HTMLAttributesWeak, CommonProps {
*/
delay?: number;

/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number;

/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number;

/**
* 浮层关闭后触发的事件, 如果有动画,则在动画结束后触发
*/
Expand Down
12 changes: 12 additions & 0 deletions components/balloon/tooltip.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,14 @@ export default class Tooltip extends React.Component {
* 如果需要让 Tooltip 内容可被点击,可以设置这个参数,例如 100
*/
delay: PropTypes.number,
/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number,
/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number,
/**
* 开启 v2 版本
*/
Expand Down Expand Up @@ -165,6 +173,8 @@ export default class Tooltip extends React.Component {
autoAdjust,
rtl,
delay,
mouseEnterDelay,
mouseLeaveDelay,
v2,
arrowPointToCenter,
...others
Expand Down Expand Up @@ -219,6 +229,8 @@ export default class Tooltip extends React.Component {

const otherProps = {
delay: delay,
mouseEnterDelay: mouseEnterDelay,
mouseLeaveDelay: mouseLeaveDelay,
shouldUpdatePosition: true,
needAdjust: false,
align: alignMap[align].align,
Expand Down
10 changes: 10 additions & 0 deletions components/overlay/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,16 @@ export interface PopupProps extends React.HTMLAttributes<HTMLElement>, CommonPro
*/
delay?: number;

/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number;

/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number;

/**
* trigger 是否可以关闭弹层
*/
Expand Down
12 changes: 10 additions & 2 deletions components/overlay/popup.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ class Popup extends Component {
* 弹层显示或隐藏的延时时间(以毫秒为单位),在 triggerType 被设置为 hover 时生效
*/
delay: PropTypes.number,
/**
* 鼠标放置后的延时显示, 单位毫秒 ms
*/
mouseEnterDelay: PropTypes.number,
/**
* 鼠标离开后的延时显示, 单位毫秒 ms
*/
mouseLeaveDelay: PropTypes.number,
/**
* trigger 是否可以关闭弹层
*/
Expand Down Expand Up @@ -184,7 +192,7 @@ class Popup extends Component {
if (!this.state.visible) {
this._showTimer = setTimeout(() => {
this.handleVisibleChange(true, 'fromTrigger', e);
}, this.props.delay);
}, (this.props.mouseEnterDelay === null || this.props.mouseEnterDelay === undefined) ? this.props.delay : this.props.mouseEnterDelay);
}
}

Expand All @@ -196,7 +204,7 @@ class Popup extends Component {
if (this.state.visible) {
this._hideTimer = setTimeout(() => {
this.handleVisibleChange(false, type || 'fromTrigger', e);
}, this.props.delay);
}, (this.props.mouseLeaveDelay === null || this.props.mouseLeaveDelay === undefined) ? this.props.delay : this.props.mouseLeaveDelay);
}
}

Expand Down

0 comments on commit 550297f

Please sign in to comment.