From a06c69ba2ceca855ef751a88fe7a3cdf19b536b5 Mon Sep 17 00:00:00 2001 From: xxkl1 Date: Tue, 4 Jul 2023 23:21:02 +0800 Subject: [PATCH] fix: transition slide not smooth with min height and min width --- packages/svelte/src/runtime/transition/index.js | 2 ++ .../runtime/samples/class-shortcut-with-transition/_config.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/svelte/src/runtime/transition/index.js b/packages/svelte/src/runtime/transition/index.js index 5bdc148ee4..7e1606a65d 100644 --- a/packages/svelte/src/runtime/transition/index.js +++ b/packages/svelte/src/runtime/transition/index.js @@ -84,6 +84,7 @@ export function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis const style = getComputedStyle(node); const opacity = +style.opacity; const primary_property = axis === 'y' ? 'height' : 'width'; + const min_primary_property = `min-${primary_property}`; const primary_property_value = parseFloat(style[primary_property]); const secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right']; const capitalized_secondary_properties = secondary_properties.map( @@ -107,6 +108,7 @@ export function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis 'overflow: hidden;' + `opacity: ${Math.min(t * 20, 1) * opacity};` + `${primary_property}: ${t * primary_property_value}px;` + + `${min_primary_property}: 0;` + `padding-${secondary_properties[0]}: ${t * padding_start_value}px;` + `padding-${secondary_properties[1]}: ${t * padding_end_value}px;` + `margin-${secondary_properties[0]}: ${t * margin_start_value}px;` + diff --git a/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js b/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js index 7c35a801f6..1882b5bd1a 100644 --- a/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js +++ b/packages/svelte/test/runtime/samples/class-shortcut-with-transition/_config.js @@ -16,7 +16,7 @@ export default { raf.tick(150); assert.htmlEqual( target.innerHTML, - '

foo

bar

' + '

foo

bar

' ); component.open = true;