zoukankan      html  css  js  c++  java
  • css3折叠效果

           在开发过程中,经常会遇到一些交互效果,今天所联系的便是一个类似折纸的折叠效果,查看效果. 

          说到折纸,我们先看下图

    image

           这是我第一时间想到的大体思路,如果能让这6个面连续的变化角度到0不就可以了吗,运用css3 transition或animation毫无压力~~

          要实现上图的这种效果,设置不同rotateX值及父元素的perspective即可,可是在实际写出来之后却发现这样并不可行,不论我们设置transform-origin或者其他的值,都不能使几个面相互一直相互连接。

          再来看下图,我们折纸过程实际是这样子的,如果我们分解开来,可以分解成以下步骤,第一1,2,3在同一个平面,第二步:1为1个平面,2,3为1个平面,第三步:1,2,3分别成3个平面。我们可以这样认为,即2,3是以一定角度从1平面折叠,3是以一定角度从2平面折叠,所以我们修改下我们的html结构

    image

     1 <div class='outer'>
     2    <div class='red fold'>
     3       段落1
     4       <div class='yellow fold'>
     5           段落2
     6           <div class='blue fold'>
     7              段落3  
     8              <div class='green fold'>
     9                 4
    10              </div>
    11           </div>
    12       </div>
    13    </div>
    14 </div>

    css代码:

    .outer{400px;margin:0px auto;-webkit-perspective:500px;-webkit-perspective-origin:50% 100%
    }
    .outer .fold{height:100px;text-align:center;line-height:100px;font-family:'Microsoft YaHei';font-size: 24px;color:#fff;-webkit-transform-style:preserve-3d;
    -webkit-transform-origin:0 0}
    .red{background-color:red;-webkit-transform:rotateX(50deg)}
    .yellow{background-color:yellow;-webkit-transform:rotateX(-120deg)}
    .blue{background-color:blue;-webkit-transform:rotateX(136deg)}
    .green{background-color:green;-webkit-transform:rotateX(-120deg)}

          我们得到的效果如下:

    image

    下面我们加上收缩动画,效果看这里

    代码如下:

    css:

     1 .outer{400px;margin:100px auto;
     2        -webkit-perspective:800px;
     3        -webkit-perspective-origin:50% 100%
     4 }
     5 .outer .fold{height:100px;
     6              text-align:center;
     7              line-height:100px;
     8              font-family:'Microsoft YaHei';
     9              font-size: 24px;
    10              color:#fff;
    11              -webkit-transform-style:preserve-3d;
    12              -webkit-transform-origin:0 0;
    13              -webkit-transition:transform linear 800ms;
    14 }
    15 .red{background-color:red;
    16      -webkit-transform:rotateX(90deg)
    17 }
    18 .yellow{background-color:yellow;
    19         -webkit-transform:rotateX(-180deg)
    20 }
    21 .blue{background-color:blue;
    22       -webkit-transform:rotateX(180deg);
    23 }
    24 .green{background-color:green;
    25        -webkit-transform:rotateX(-180deg);
    26 }
    27 .outer.activity .fold{-webkit-transform:rotateX(0deg);
    28 }

    html:

    <div class='outer'>
       <div class='red fold'>
          段落1
          <div class='yellow fold'>
              段落2
              <div class='blue fold'>
                 段落3  
                 <div class='green fold'>
                    4
                 </div>
              </div>
          </div>
       </div>
    </div>

    js:

    var btn=document.getElementById('btn'),
        contain=document.querySelector('.outer')
        ;
    btn.onclick=function(){
        contain.classList.toggle('activity')
    }

          当然,我们可以为不同的元素添加不同的transition-delay,来使几个面有先后的展开。

  • 相关阅读:
    1094. Car Pooling
    121. Best Time to Buy and Sell Stock
    58. Length of Last Word
    510. Inorder Successor in BST II
    198. House Robber
    57. Insert Interval
    15. 3Sum java solutions
    79. Word Search java solutions
    80. Remove Duplicates from Sorted Array II java solutions
    34. Search for a Range java solutions
  • 原文地址:https://www.cnblogs.com/mopagunda/p/5424902.html
Copyright © 2011-2022 走看看