diff --git a/src/component/tooltip/TooltipHTMLContent.ts b/src/component/tooltip/TooltipHTMLContent.ts index f03bcd8f16..272322786c 100644 --- a/src/component/tooltip/TooltipHTMLContent.ts +++ b/src/component/tooltip/TooltipHTMLContent.ts @@ -103,15 +103,21 @@ function assembleArrow( return `
`; } -function assembleTransition(duration: number, onlyFade?: boolean): string { +function assembleTransition(duration: number, onlyFadeTransition: boolean, enableDisplayTransition: boolean): string { const transitionCurve = 'cubic-bezier(0.23,1,0.32,1)'; - let transitionOption = ` ${duration / 2}s ${transitionCurve}`; - let transitionText = `opacity${transitionOption},visibility${transitionOption}`; - if (!onlyFade) { + let transitionOption = ''; + let transitionText = ''; + if (enableDisplayTransition) { + transitionOption = ` ${duration / 2}s ${transitionCurve}`; + transitionText = `opacity${transitionOption},visibility${transitionOption}`; + } + if (!onlyFadeTransition) { transitionOption = ` ${duration}s ${transitionCurve}`; - transitionText += env.transformSupported - ? `,${CSS_TRANSFORM_VENDOR}${transitionOption}` - : `,left${transitionOption},top${transitionOption}`; + transitionText += (transitionText.length ? ',' : '') + ( + env.transformSupported + ? `${CSS_TRANSFORM_VENDOR}${transitionOption}` + : `,left${transitionOption},top${transitionOption}` + ); } return CSS_TRANSITION_VENDOR + ':' + transitionText; @@ -173,7 +179,12 @@ function assembleFont(textStyleModel: Model): string return cssText.join(';'); } -function assembleCssText(tooltipModel: Model, enableTransition?: boolean, onlyFade?: boolean) { +function assembleCssText( + tooltipModel: Model, + enableTransition: boolean, + onlyFadeTransition: boolean, + enableDisplayTransition: boolean +) { const cssText: string[] = []; const transitionDuration = tooltipModel.get('transitionDuration'); const backgroundColor = tooltipModel.get('backgroundColor'); @@ -186,8 +197,9 @@ function assembleCssText(tooltipModel: Model, enableTransition?: const boxShadow = `${shadowOffsetX}px ${shadowOffsetY}px ${shadowBlur}px ${shadowColor}`; cssText.push('box-shadow:' + boxShadow); - // Animation transition. Do not animate when transitionDuration is 0. - enableTransition && transitionDuration && cssText.push(assembleTransition(transitionDuration, onlyFade)); + // Animation transition. Do not animate when transitionDuration <= 0. + enableTransition && transitionDuration > 0 + && cssText.push(assembleTransition(transitionDuration, onlyFadeTransition, enableDisplayTransition)); if (backgroundColor) { cssText.push('background-color:' + backgroundColor); @@ -284,6 +296,8 @@ class TooltipHTMLContent { */ private _longHideTimeout: number; + private _enableDisplayTransition: boolean; + constructor( api: ExtensionAPI, opt: TooltipContentOption @@ -376,6 +390,9 @@ class TooltipHTMLContent { // update alwaysShowContent this._alwaysShowContent = alwaysShowContent; + this._enableDisplayTransition = tooltipModel.get('displayTransition') + && tooltipModel.get('transitionDuration') > 0; + // update className this.el.className = tooltipModel.get('className') || ''; @@ -395,7 +412,7 @@ class TooltipHTMLContent { } else { style.cssText = gCssText - + assembleCssText(tooltipModel, !this._firstShow, this._longHide) + + assembleCssText(tooltipModel, !this._firstShow, this._longHide, this._enableDisplayTransition) // initial transform + assembleTransform(styleCoord[0], styleCoord[1], true) + `border-color:${convertToColorString(nearPointColor)};` @@ -499,8 +516,13 @@ class TooltipHTMLContent { hide() { const style = this.el.style; - style.visibility = 'hidden'; - style.opacity = '0'; + if (this._enableDisplayTransition) { + style.visibility = 'hidden'; + style.opacity = '0'; + } + else { + style.display = 'none'; + } env.transform3dSupported && (style.willChange = ''); this._show = false; this._longHideTimeout = setTimeout(() => this._longHide = true, 500) as any; diff --git a/src/component/tooltip/TooltipModel.ts b/src/component/tooltip/TooltipModel.ts index 351cc0549b..c9598c0a03 100644 --- a/src/component/tooltip/TooltipModel.ts +++ b/src/component/tooltip/TooltipModel.ts @@ -51,8 +51,6 @@ export interface TooltipOption extends CommonTooltipOption { alwaysShowContent: false, - displayMode: 'single', // 'single' | 'multipleByCoordSys' - renderMode: 'auto', // 'auto' | 'html' | 'richText' // whether restraint content inside viewRect. // If renderMode: 'richText', default true. - // If renderMode: 'html', defaut false (for backward compat). + // If renderMode: 'html', defaults to `false` (for backward compat). confine: null, showDelay: 0, @@ -122,6 +118,8 @@ class TooltipModel extends ComponentModel { // Animation transition time, unit is second transitionDuration: 0.4, + displayTransition: true, + enterable: false, backgroundColor: '#fff', diff --git a/src/util/types.ts b/src/util/types.ts index 1d085c198f..77193e15a2 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -1303,6 +1303,15 @@ export interface CommonTooltipOption { */ enterable?: boolean + /** + * Whether enable display transition when show/hide tooltip. + * Defaults to `true` for backward compatibility. + * If set to `false`, the tooltip 'display' will be set to 'none' when hidden. + * @default true + * @since v6.0.0 + */ + displayTransition?: boolean + backgroundColor?: ColorString borderColor?: ColorString borderRadius?: number diff --git a/test/runTest/actions/__meta__.json b/test/runTest/actions/__meta__.json index c9357abedc..5e1809bfd4 100644 --- a/test/runTest/actions/__meta__.json +++ b/test/runTest/actions/__meta__.json @@ -201,6 +201,7 @@ "tooltip-axisPointer2": 4, "tooltip-cascade": 4, "tooltip-component": 6, + "tooltip-displayTransition": 1, "tooltip-domnode": 1, "tooltip-event": 1, "tooltip-link": 2, diff --git a/test/runTest/actions/tooltip-displayTransition.json b/test/runTest/actions/tooltip-displayTransition.json new file mode 100644 index 0000000000..af61143f49 --- /dev/null +++ b/test/runTest/actions/tooltip-displayTransition.json @@ -0,0 +1 @@ +[{"name":"Action 1","ops":[{"type":"mousemove","time":490,"x":69,"y":44},{"type":"mousemove","time":695,"x":60,"y":65},{"type":"mousemove","time":907,"x":58,"y":83},{"type":"mousemove","time":1112,"x":58,"y":117},{"type":"mousemove","time":1323,"x":59,"y":93},{"type":"mousedown","time":1364,"x":59,"y":93},{"type":"mouseup","time":1497,"x":59,"y":93},{"time":1498,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":2225,"x":61,"y":93},{"type":"mousemove","time":2428,"x":123,"y":93},{"type":"mousedown","time":2595,"x":123,"y":93},{"type":"mouseup","time":2759,"x":123,"y":93},{"time":2760,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":3657,"x":127,"y":93},{"type":"mousemove","time":3857,"x":179,"y":98},{"type":"mousemove","time":4061,"x":213,"y":101},{"type":"mousedown","time":4251,"x":238,"y":101},{"type":"mousemove","time":4278,"x":238,"y":101},{"type":"mouseup","time":4411,"x":238,"y":101},{"time":4412,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":4923,"x":238,"y":97},{"type":"mousemove","time":5123,"x":148,"y":64},{"type":"mousemove","time":5323,"x":86,"y":83},{"type":"mousemove","time":5528,"x":71,"y":91},{"type":"mousedown","time":5615,"x":70,"y":91},{"type":"mouseup","time":5801,"x":70,"y":91},{"time":5802,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":5816,"x":70,"y":91},{"type":"mousemove","time":6723,"x":79,"y":94},{"type":"mousemove","time":6923,"x":139,"y":94},{"type":"mousemove","time":7128,"x":140,"y":94},{"type":"mousedown","time":7146,"x":140,"y":94},{"type":"mouseup","time":7328,"x":140,"y":94},{"time":7329,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":8406,"x":141,"y":94},{"type":"mousemove","time":8606,"x":346,"y":88},{"type":"mousemove","time":8806,"x":436,"y":92},{"type":"mousedown","time":8978,"x":444,"y":94},{"type":"mousemove","time":9012,"x":444,"y":94},{"type":"mouseup","time":9131,"x":444,"y":94},{"time":9132,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":9673,"x":436,"y":90},{"type":"mousemove","time":9878,"x":220,"y":38},{"type":"mousemove","time":10089,"x":112,"y":78},{"type":"mousemove","time":10289,"x":86,"y":87},{"type":"mousedown","time":10451,"x":76,"y":91},{"type":"mousemove","time":10501,"x":76,"y":91},{"type":"mouseup","time":10612,"x":76,"y":91},{"time":10613,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":11156,"x":77,"y":91},{"type":"mousemove","time":11361,"x":154,"y":94},{"type":"mousemove","time":11578,"x":160,"y":94},{"type":"mousedown","time":11854,"x":160,"y":94},{"type":"mouseup","time":12031,"x":160,"y":94},{"time":12032,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":12639,"x":162,"y":94},{"type":"mousemove","time":12839,"x":269,"y":94},{"type":"mousemove","time":13039,"x":412,"y":93},{"type":"mousemove","time":13244,"x":430,"y":93},{"type":"mousedown","time":13269,"x":430,"y":93},{"type":"mouseup","time":13417,"x":430,"y":93},{"time":13418,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":13772,"x":425,"y":92},{"type":"mousemove","time":13972,"x":160,"y":67},{"type":"mousemove","time":14172,"x":66,"y":89},{"type":"mousedown","time":14335,"x":64,"y":92},{"type":"mousemove","time":14379,"x":64,"y":92},{"type":"mouseup","time":14483,"x":64,"y":92},{"time":14484,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":14839,"x":66,"y":92},{"type":"mousemove","time":15045,"x":148,"y":92},{"type":"mousemove","time":15278,"x":149,"y":93},{"type":"mousedown","time":15497,"x":149,"y":93},{"type":"mouseup","time":15651,"x":149,"y":93},{"time":15652,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":16155,"x":150,"y":93},{"type":"mousemove","time":16356,"x":226,"y":81},{"type":"mousemove","time":16560,"x":239,"y":70},{"type":"mousedown","time":16703,"x":239,"y":70},{"type":"mouseup","time":16829,"x":239,"y":70},{"time":16830,"delay":400,"type":"screenshot-auto"},{"type":"screenshot","time":18460}],"scrollY":0,"scrollX":0,"timestamp":1748545191575}] \ No newline at end of file diff --git a/test/tooltip-displayTransition.html b/test/tooltip-displayTransition.html new file mode 100644 index 0000000000..8002166f6b --- /dev/null +++ b/test/tooltip-displayTransition.html @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + +
+ + + +