我们对公众号排版中的长图文动画结构已经很熟悉了,它是一种一级展开的层次结构,这次介绍下比一级展开复杂一丢丢的二级展开,先来看一下效果。

动画排版二级展开视频列表

二级展开除了第一级的结构有所不同外,第二级结构和普通的伸长动画并没有什么不同,我们先来对比下两种结构。

一级展开结构

伸长图文通常基于下面简化后代码结构,首先将伸长区域的高度设置为0将图文区域塌陷;塌陷后的交互区域叠加在图文区域之上,在该区域通过点击触发容器伸长动画,当然伸长图文部分也可以实现交互。

<div style="overflow:hidden;">
  <div style="height:0;">
    伸长图文
  </div>
  <svg style="height:400px;">
    <animate attributeName="height" begin="click" from="400" to="2000" />
  </svg>
</div>

二级展开结构

在二级展开结构中,我们需要在图文区域加入视频列表来实现二级展开。如果我们还继续使用一级展开这种结构,会产生一个滚动条的问题:即展开的二级内容不会计算在滚动区域,直接导致我们无法看到伸长的内容。

那么问题来了,怎样使二级内容被计算在滚动区域呢?

答案是用margin-top负值来实现,先来看下简化后的代码结构:

<div style="overflow:hidden;">
  <div>
    <div> //图文伸长区
      <svg style="height:480px;"></svg>
    </div>
    <section style="margin-top:-700px;"> //交互区
      <svg style="width:360px;height:480px;" viewBox="0 0 750 1000">
        <animate attributeName="height" begin="click" from="480" to="720" /> 
      </svg>
    </section>
  </div>
</div>

这里我们去掉了图文伸长区域height:0的设置,然后将交互区的margin-top属性设置为-700px,将其向上移动覆盖在首屏区域之上,margin-top负值是另一种实现内容塌陷的方式。

下图左右分别是设置margin-top负值前后的对比,交互区域向上移动覆盖在图文区域之上。

d1

视频项结构

最后的二级展开结构和普通的伸长图文类似,这里需要注意的是:要将容器的transform设置层scale(1)或者是rotateZ(0deg)等值来提高容器的相对层级,不然是不会被点击到的。原理是transform属性值不为none的时,会建立新的层叠上下文,该上下文会比默认的层级高,具体原理就不做展开了,有兴趣的同学可以在网上搜索下相关技术文章。

<section style="transform:scale(1);overflow:hidden;">
  <section style="height:0 !important;">
    <svg viewBox="0 0 750 72"></svg> //视频列表图片
    <section style="height:0;transform:scale(1);">
      //腾讯视频代码
    </section>
  </section>
  <svg viewBox="0 0 750 72" style="height:35px;">
    <animate attributeName="height" from="35" to="27" begin="click" />
  </svg>
</section>

写在最后

前段时间接一些了公众号动画排版方面的工作,利用空闲将学到的一点皮毛分享出来,希望能对你有所帮助,后面的文章会回归其他的前端技术。

最后说两件事:

1. 我建了个技术交流群,用来讨论技术和结交朋友,在公众号回复“入群”可获得最新入群二维码,欢迎加入。

2. 对于代码基础薄弱的同学,安利下我的零基础公众号动画排版教程。

点击阅读原文,可以获得本篇教程的源代码。