微信推文排版:SVG点击展开原理说明

场景:在微信推文中,用户点击图片

效果: 用户点击后,展示图片,有点像拉开一个长轴画卷的感觉

00:00

如何实现呢?几天抽空就研究了一下,同大家共享;

第一看一下这个原理图,下面有相关的描述信息

微信推文排版:SVG点击展开原理说明

第一步:建立三个 section 层级关系如原理说明图;

技术要点:

A: 在section 1 中包含两个 section 2 和 section 3(同用户交互使用)

B:section 1 的高度不要设置,由SVG图片1自动撑开,并设置超过高度隐藏这个很重大

第二步:将section 2的高度设置为0,这个是关键,表明在section 2中的SVG图片不显示出来;高度为0,并且外围的section 1设置了超过隐藏;这些图片没地方显示了,于是看起来就隐藏起来了。

技术要点

A:section 2 中的第一张图片(图片2)可以设置成图片(图片3)的高度;

图片2(height) = 图片3(height)

B: 图片2会一直被 图片3遮挡住,相当于图片2实则就是一个占位置而已;

第三步:section 3,建立一张SVG交互图片

采用SVG的animate 的 begin =“click” 触发 SVG动画,让section 3 内的SVG高度逐渐增加;(具体看下面代码和下图说明

示例代码:

<!--高度由第section撑开,超过高度的都隐藏起来-->
<section style="width:345px;display: block;margin: 0px auto;text-align:center;overflow:hidden">
    <!--top 没有设置高度,以图片高度自动撑开-->
    <section style="margin-bottom:-6px;">
        <svg class="p1" 
            version="1.1" 
            viewBox="0 0 1080 2575" x="0px" y="0px"
            xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" ></svg>
    </section>
    <!--隐藏的内容: 设置高度0,里面的图片直接隐藏起来-->
    <section style="height:0px;width:345px;display:block;margin-left:auto;margin-right:auto;">
        <!--p2的高度应该同btn高度将被btn覆盖实则没有用-->
        <section style="margin-bottom:-6px;">
            <svg class="p2" 
            version="1.1" 
            viewBox="0 0 1080 1568" x="0px" y="0px"
            xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" ></svg>
        </section>
        <!--显示出来的第一图片-->
        <section style="margin-bottom:-1px;">
            <svg class="p3" 
            version="1.1" 
            viewBox="0 0 1080 1689.12" x="0px" y="0px"
            xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" ></svg>
        </section>
        <!--显示出来的第二张图片-->
         <section style="margin-bottom:-1px;">
            <svg class="p4" 
            version="1.1" 
            viewBox="0 0 1080 771" x="0px" y="0px"
            xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" ></svg>
        </section>
    </section>
    <!--btn 默认高度534,点击后svg高度变大,从透明变成不透明 -->
    <section style="width:345px;display:block;margin-bottom:-40px;text-align: center;margin-left: auto;margin-right: auto;">
        <section class="btn">
            <svg height="533px" width="345px" opacity="0" preserveAspectRatio="xMidYMin meet" class="btnsvg">
    <animate attributeName="height" fill="freeze" restart="never" calcMode="spline" keySplines="0.42 0 0.58 1.0; 0.42 0 0.58 1.0" keyTimes="0;0.0025;1" values="533;6830;6830" dur="3000s" begin="click+0.8s"></animate>
    <animate attributeName="opacity" begin="click" restart="never" dur="1000s" keyTimes="0;0.00000000001;1" values="0;1;1" fill="freeze"></animate>
            </svg>
        </section>
    </section>
</section>

问题

问题1: 点击后图片3为何没有被图片挤压到最后面去呢?论顺序图片3这个SVG图片应该在图片2这个SVG后面的啊?是不是很奇怪呢?

解答:section2没有高度,层级上就在 section3的下面了,于是不会把section2的显示;整个section1的高度被撑开后,section2没有被section3遮挡部分就显示出来了;

问题2:从透明变成不透明为何不遮挡section2中的SVG能?

解答:透明度仅仅作用在SVG的有图片区域,section3高度变大,非图片区域还是透明;

© 版权声明

相关文章

1 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    西安战神娱乐 读者

    讲得很清晰,看起来没多少难度,看了几个大厂的案例源码后很容易复刻出来,关键还是还是要和创意,设计结合,交互才出彩

    无记录