2017-07-13 74 views
-3

因此,对于下面的代码,我有一个循环通知,动画,左侧打开并显示信息和配置文件图像。我希望能够通过让圈子前进来覆盖信息和淡出(我已经输入了这些信息),从而将动画反转回来。但是,我不知道如何实现这一点。我尝试了几种方法来切换动画,但似乎并不奏效。有什么建议么?如何在CSS中做逆向动画?

您可以点击“关闭我”按钮来关闭通知,“开放我”也可以打开它。

$(document).ready(function() { 
 
    $(".open").click(function(e) { 
 
    $(".pgn-wrapper").fadeIn(250); 
 
    }); 
 

 
    $(".close").click(function(e) { 
 
    $(".pgn-wrapper").fadeOut(500); 
 
    }); 
 
});
/* Circle Animation 
 
------------------------------------ 
 
*/ 
 
.pgn-circle .alert { 
 
    border-radius: 300px; 
 
    animation: fadeInCircle 0.3s ease forwards, 
 
    resizeCircle 0.3s 0.4s cubic-bezier(0.25, 0.25, 0.4, 1.6) forwards; 
 
    -webkit-animation: fadeInCircle 0.3s ease forwards, 
 
    resizeCircle 0.3s 0.4s cubic-bezier(0.25, 0.25, 0.4, 1.6) forwards; 
 
    height: 50px; 
 
    overflow: hidden; 
 
    padding: 6px 55px 6px 6px; 
 
    -webkit-transform: translateZ(0); 
 
    position: relative; 
 
} 
 

 
.pgn-wrapper[data-position$='-right'] .pgn-circle .alert { 
 
    float: right; 
 
} 
 

 
.pgn-wrapper[data-position$='-left'] .pgn-circle .alert { 
 
    float: left; 
 
} 
 

 
.pgn-circle .alert > div > div.pgn-thumbnail > div { 
 
    border-radius: 50%; 
 
    overflow: hidden; 
 
    width: 48px; 
 
    height: 48px; 
 
} 
 

 
.pgn-circle .alert > div > div.pgn-thumbnail > div > img { 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 

 
.pgn-circle .alert > div > div.pgn-message > div { 
 
    opacity: 0; 
 
    height: 47px; 
 
    padding-left: 9px; 
 
    animation: fadeIn .3s .5s ease forwards; 
 
    -webkit-animation: fadeIn .3s .5s ease forwards; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
    white-space: nowrap; 
 
    word-break: break-all; 
 
    word-wrap: break-word; 
 
} 
 

 
.pgn-circle .alert > div > div.pgn-message > div p:only-child { 
 
    padding: 12px 0; 
 
} 
 

 
.pgn-circle .alert .close { 
 
    margin-top: -12px; 
 
    position: absolute; 
 
    right: 18px; 
 
    top: 50%; 
 
    opacity: 0; 
 
    animation: fadeIn .3s .5s ease forwards; 
 
    -webkit-animation: fadeIn .3s .5s ease forwards; 
 
} 
 

 
.pgn-circle .alert p { 
 
    margin-bottom: 0; 
 
} 
 

 
.pgn-circle .alert > div { 
 
    display: table; 
 
    height: 100%; 
 
} 
 

 
.pgn-circle .alert > div > div { 
 
    display: table-cell; 
 
    vertical-align: middle; 
 
} 
 

 
@keyframes fadeInCircle { 
 
    0% { 
 
    opacity: 0; 
 
    width: 60px; 
 
    } 
 

 
    100% { 
 
    opacity: 1; 
 
    width: 60px; 
 
    } 
 
} 
 

 
@-webkit-keyframes fadeInCircle { 
 
    0% { 
 
    opacity: 0; 
 
    width: 60px; 
 
    } 
 

 
    100% { 
 
    opacity: 1; 
 
    width: 60px; 
 
    } 
 
} 
 

 
@keyframes resizeCircle { 
 
    0% { 
 
    width: 60px; 
 
    } 
 

 
    100% { 
 
    width: 300px; 
 
    } 
 
} 
 

 
@-webkit-keyframes resizeCircle { 
 
    0% { 
 
    width: 60px; 
 
    } 
 

 
    100% { 
 
    width: 300px; 
 
    } 
 
} 
 

 
@-webkit-keyframes fadeIn { 
 
    0% { 
 
    opacity: 0; 
 
    } 
 

 
    100% { 
 
    opacity: 1; 
 
    } 
 
} 
 
.close:target { 
 
    animation: resizeCircle2 1s all; 
 
    animation-direction: alternate; 
 
} 
 
@keyframes resizeCircle2 { 
 
    0% { 
 
    width: 300px; 
 
    } 
 

 
    100% { 
 
    width: 60px; 
 
    } 
 
} 
 

 

 

 
/* Headings 
 
------------------------------------ 
 
*/ 
 
p { 
 
    display: block; 
 
    font-size: 14px; 
 
    font-weight: normal; 
 
    letter-spacing: 0.01em; 
 
    line-height: 22px; 
 
    margin: 0px 0px 10px 0px; 
 
    font-style: normal; 
 
    white-space: normal; 
 
} 
 

 
.bold { 
 
    font-weight: bold !important; 
 
} 
 
/* Alert 
 
------------------------------------ 
 
*/ 
 
.alert { 
 
    background-image: none; 
 
    box-shadow: none; 
 
    text-shadow: none; 
 
    padding: 9px 19px 9px 15px; 
 
    border-radius: 3px; 
 
    font-size: 13px; 
 
    border-width: 0; 
 
    -webkit-transition: all 0.2s linear 0s; 
 
    transition: all 0.2s linear 0s; 
 
} 
 

 
.alert-danger, .alert-error { 
 
    background-color: #c42827; 
 
    color: white; 
 
    border-color: #933432; 
 
} 
 

 
.alert-danger .close, .alert-error .close { 
 
    background-position: -95px -10px !important; 
 
} 
 
/*------------------------------------------------------------------ 
 
Notifications 
 
-------------------------------------------------- 
 
*/ 
 

 
.pgn-wrapper[data-position='top'] { 
 
    top: 0; 
 
    left: 0; 
 
    right: 0; 
 
} 
 

 
.pgn { 
 
    position: relative; 
 
    margin: 10px; 
 
} 
 

 
.pgn .alert { 
 
    margin: 0; 
 
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> 
 

 
<div class="pgn-wrapper" data-position="top-right"> 
 
    <div class="pgn push-on-sidebar-open pgn-circle"> 
 
    <div class="alert alert-danger"> 
 
     <div> 
 
     <div class="pgn-thumbnail"> 
 
      <div> 
 
      <img width="40" height="40" style="display: inline-block;" src="https://x1.xingassets.com/assets/frontend_minified/img/users/nobody_m.original.jpg"> 
 
      </div> 
 
     </div> 
 
     <div class="pgn-message"> 
 
      <div> 
 
      <p class="bold" style="color:white">John Doe</p> 
 
      <p>Logging out in <b>60</b> second(s).</p> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 
<a class="open" href="#">OPEN ME</a> 
 
<a class="close" href="#">CLOSE ME</a> 
 

 
<script src='http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js'></script> 
 
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

回答

1

好吧,你有一吨的代码,我没有通过所有的解析它,但我可以说,当你有一个这样的动画:

@keyframes resizeCircle { 
    0% { 
     width: 60px; 
    } 

    100% { 
     width: 300px; 
    } 
} 

您正在指示宽度的开始和结束位置,以便反转,您要确保此动画绑定到临时状态,例如使用类似下面的选择器进行悬停:

element:hover { 
    animation:resizeCircle 1s all; 
} 

然后,动画将只适用于元素被徘徊时,并且它不是元素将动画回到其原始状态。

或者,你可以设置一个单独的动画,它指定反向属性值:

@keyframes resizeCircle2 { 
    0% { 
     width: 300px; 
    } 

    100% { 
     width: 60px; 
    } 
} 

和应用,为“触发”选择,如:

element:target { 
    animation:resizeCircle2 1s all; 
} 

,而(在这种情况下)当元素是点击的目标时应用逆向动画。

0

下面是一个例子:

<div class="expandable"></div> 

div.expandable { 
    background-color: green; 
    width: 30px; 
    height: 25px; 
    -webkit-transition: width 0.4s ease-in-out; 
    transition: width 0.4s ease-in-out; 
} 

div.expandable:hover { 
    width: 300px; 
} 

可以给这里运行:https://plnkr.co/edit/wa5Ny6vmluJv6xeDs7qt?p=preview