zoukankan      html  css  js  c++  java
  • css3 弹性效果上下翻转demo

    最近扒了一个有弹性效果上下翻转demo

    上图:

    上代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        @-webkit-keyframes show
        {
            0%   {
                    transform:rotateX(180deg);
                    opacity:0;
                 }
            50%   {
                    transform:rotateX(-25deg);
                    opacity:1;
                 }
            60%   {
                    transform:rotateX(18deg);
                    opacity:1;
                 }
            70%   {
                    transform:rotateX(-13deg);
                    opacity:1;
                 }
            80%   {
                    transform:rotateX(8deg);
                    opacity:1;
                 }
            90%   {
                    transform:rotateX(-6deg);
                    opacity:1;
                 }
            100% {
                    transform:rotateX(0deg);
                    opacity:1;
                 }
        }
        @-webkit-keyframes hide
        {
            0%   {
                    transform:rotateX(0deg);
                    opacity:1;
                 }
            
            100% {
                    transform:rotateX(-180deg);
                    opacity:0;
                 }
        }
        *{ margin:0; padding:0;}
        li{ list-style: none;}
        .box{ position:relative;  width:300px; height:200px; margin:100px auto; }
        .box-ul,.box li{width:300px; height:200px;}
        .box-ul{transform-style:preserve-3d;perspective:800px;}
        .box li{ position:absolute;  background-size:cover; background-position:-50% -50%;transform:rotateX(180deg);transform-origin:bottom ; opacity:0;}
        .box li.show{-webkit-transform:rotateX(0deg);-webkit-animation: show .6s; opacity:1;}
        .box li.hide{-webkit-transform:rotateX(180deg); -webkit-animation: hide .6s;opacity:0;}
        .box a{ position:absolute; top:50%;transform: translateY(-50%) ; width:50px; height:50px; line-height: 50px; font-size: 14px; text-decoration: none; color:#fff; text-align:center; border-radius:50%; background-color:red;}
        .box a:nth-of-type(1){left:-80px;}
        .box a:nth-of-type(2){right:-80px;}
    
        
        </style>
        <script>
        window.onload = function(){
    
            var aA = document.getElementsByTagName('a'),
                aLi = document.getElementsByTagName('li');
            var len = aLi.length-1,
                n = 0;
    
            aA[0].onclick = function(){
                aLi[n].className = "hide";
                n--;
                n = n < 0 ? len : n;
                aLi[n].className = "show";
            }
            aA[1].onclick = function(){
                aLi[n].className = "hide";
                n++;
                n = n > len ? 0 : n;
                aLi[n].className = "show";
            }
    
        }
        </script>
    </head>
    <body>
        <div class="box">
            <ul class="box-ul">
                <li class="show" style=" background-image:url(1.jpg)"></li>
                <li style=" background-image:url(2.jpg)"></li>
                <li style=" background-image:url(3.jpg)"></li>
                <li style=" background-image:url(4.jpg)"></li>
                <li style=" background-image:url(5.jpg)"></li>
            </ul>
            <a href="javascript:;">上一张</a>
            <a href="javascript:;">下一张</a>
        </div>
    </body>
    </html>

    演示:demo

    扒代码心得:

    初次看到这个效果感觉主要是JS做的

    因为翻转上来有弹性运动,直接想的是JS弹性运动 不知道CSS3也可是设置  当时仅仅知道 transition 过去 也知道 animation 仅仅理解成 从 A点到B点 

    用 ul 用css3 转成 3D (transform-style:preserve-3d)同时加上景深 perspective:800px; (张鑫旭大神对景深的解释:http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/  )我个人简单粗暴的理解就是:给了一个三维的视角 ,

    rotateX,rotateY,rotateZ 就能 X轴、Y轴、Z轴 设置3D了,换句话说不加其实还是2D平面。

    li 初始X轴旋转 transform:rotateX(180deg) 在设置旋转的基点 根据li的底边旋转 (transform-origin:bottom);
    然后 分别 有两个 class 分别 show(翻转上来)、hide(翻转下去);同时也写两个 animation 对应 keyframes show,keyframes hide
    .show:虽然有keyframes show 运动 但是最后还要设置它的运动的最终点 transform:rotateX(0deg);
    .hide:同理
    keyframes show 是从 180deg 到 0deg 然后 弹性运动 其实就是 在 50% 的时候 运动 -25deg 10%的频率 来回的设置 deg 达到 弹性的运动,最开始一直这只不好,仔细看别人的代码发现是有规律逐次减少deg,
    keyframes hide 仅仅是从 transform:rotateX(0deg); 到 transform:rotateX(-180deg); 同时还有透明度;

    剩下的就是 JS 切换给class


     

  • 相关阅读:
    mybatis批量插入、批量更新和批量删除
    MySQL本地密码过期处理及永不过期设置
    Intellij IDEA安装与使用,完整详细。
    深入浅出mybatis之useGeneratedKeys参数用法
    springmvc_learn
    Mac下,MySQL数据库中文乱码的解决方法
    springmvc整合mybatis实现商品列表查询
    sql server 数据库导出表里所有数据成insert 语句
    推荐几个bootstrap 后端UI框架
    50个极好的bootstrap框架
  • 原文地址:https://www.cnblogs.com/auok/p/4390262.html
Copyright © 2011-2022 走看看