【问题标题】:How to show the height transition on dynamic images - react css如何在动态图像上显示高度过渡 - 反应 css
【发布时间】:2019-03-19 22:56:02
【问题描述】:

我正在将多个图像显示为幻灯片。图像高度是动态的,而不是静态的。我只想在移动到下一张图片时在高度过渡上显示动画。

这是我的父 div 容器。

<div style={ {height: '100%',margin: '0px',width: '100%',transition:'height 2s',}}>
    <ImageSlide
      url={this.images[currentImageIndex]}
    />
</div>

这是我的图片幻灯片组件。

<div style={{ position: 'relative' }}>
        <img style={width: '100%',display: 'inline-block',transition: 'height 2s',} alt=" " src={url} />
</div>

如何在移动到下一张图片时渲染高度过渡动画?

【问题讨论】:

  • 只有在高度属性实际发生变化时,过渡才有意义。默认情况下,图像高度为auto。所以没有变化被动画化。如果您设置显式 css height 值,则将显示过渡。您可以在图像元素上使用 onload 回调并计算实际高度并在 ImageSlide 组件中使用 setState 进行渲染。您只需要在更改 height 属性的 dom 元素中使用 transition
  • 你的意思是图片标签的高度?
  • 我的意思是图像样式标签的高度css属性(例如style="{height: 500px;}")。 transition 适用于 css 属性,不适用于 dom 元素属性
  • 是的,但我不知道图像的高度。它具有动态高度。我该怎么办?
  • 在图像上使用onload 回调。加载后,您可以访问表示图像完整大小的naturalHeightnaturalWidth,以及表示元素渲染大小的widthheight。然后您可以计算新高度并更改组件状态以更新样式。

标签: css reactjs css-transitions css-animations


【解决方案1】:

解决方案 #1 - 最大高度

在使用auto 或“%”等非像素大小和过渡时,您可以依赖max-height 属性来获得过渡。

缺点:

  • 我们仍然必须硬编码元素的最大高度,即使我们不必对高度本身进行硬编码
  • 除非内容高度与最大高度完全相同,否则过渡长度实际上不会是您指定的长度

解决方案 #2 - ScaleY

另一种解决方案是依赖变换ScaleY。我们为元素的 transform 属性设置一个过渡,然后在 transform: scaleY(1) 和 transform: scaleY(0) 之间切换。这些分别意味着“以与它开始时相同的比例(在 y 轴上)渲染此元素”和“以 0 的比例(在 y 轴上)渲染此元素”。这两种状态之间的转换将巧妙地将元素“挤压”到其自然的、基于内容的大小。作为奖励,即使是里面的字母和/或图像也会在视觉上“挤压”自己,而不是滑到元素的边界后面。不足之处?由于没有触发回流,因此该元素周围的元素将完全不受影响。它们既不会移动也不会调整大小来填充空白区域。

参考和示例:https://css-tricks.com/using-css-transitions-auto-dimensions/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 2017-01-18
  • 1970-01-01
相关资源
最近更新 更多