You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte中父元素执行退场缩放过渡时如何保持子元素原尺寸?

Svelte中父元素执行退场缩放过渡时如何保持子元素原尺寸?

这个问题我太懂啦!父元素做退场缩放时,子元素会自动继承这个变换效果,所以咱们只要给子元素加个反向缩放,就能抵消父元素的缩放,让子元素稳稳保持原尺寸~

具体可以这么改:

第一步:修改退场过渡函数,传递缩放比例给子元素

我们在父元素的过渡CSS里新增一个CSS变量,把当前的缩放比例t传递下去:

export function rightScaleOut(node, options) {
  let nodeTransform = node.style.transform;

  return {
    delay: options.delay,
    duration: options.duration,
    easing: options.easing,
    css: (t) =>
      `transform: ${nodeTransform} scaleX(${t}); transform-origin: top right; --scale-x: ${t};`,
  };
}

第二步:给子元素添加反向缩放

在你的<img>标签里,通过style属性添加反向缩放变换,精准抵消父元素的缩放:

{#if show}
<div
  out:rightScaleOut={{
    delay: 150,
    duration: 400,
    easing: sineInOut,
  }}
  data-title="picture portfolio"
  data-scroll-speed="1"
>
  <img
    on:click={transition}
    on:keydown={transition}
    src="pictures/portfolioPicture/landing.png"
    alt="photography portfolio landing"
    style="transform: scaleX(calc(1 / var(--scale-x))); transform-origin: top right;"
  />
</div>
{#/if}

原理超简单:父元素的scaleX(t)会从原尺寸(t=1)缩到完全消失(t=0),而子元素的scaleX(1/t)会反向放大,两者叠加后,子元素的实际缩放比例就是t * (1/t) = 1,完美维持原大小~

另外要注意子元素的transform-origin要和父元素保持一致(都是top right),这样缩放的原点相同,不会出现子元素错位的情况哦!

备注:内容来源于stack exchange,提问作者Eli-ott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:27:35