这是一款非常时尚的Material Design风格组合按钮变形动画特效。这个特效中有左右两个按钮,点击其中一个按钮后,两个按钮会向中间移动,被点击的按钮覆盖没有被点击的按钮,并以平滑的方式扩展为一个矩形的对话框。

使用方法

HTML结构

这个特效的HTML结构非常简单。使用一个容器div.buttons-ctn来包裹两个按钮。div.button__content分别是两个按钮的对应内容,在相应按钮被点击的时候才会出现。

<div class="buttons-ctn">
  <a href="#" class="button button--left"><span>Left</span></a>
  <a href="#" class="button button--right"><span>Right</span></a>
</div>
<div class="button__content button__content--left">
  <h2>You chose left!</h2>
  <a href="#">Signup for nothing here</a>
</div>
<div class="button__content button__content--right">
  <h2>You chose right!</h2>
  <a href="#">Signup for nothing here</a>
</div>            
              
CSS样式

在该按钮特效中,按钮都设置为左浮动,这样使它们并排排列在一起。

.button {
  will-change: transform;
  position: relative;
  float: left;
  display: inline-block;
  padding: 20px;
  width: 140px;
  text-align: center;
  line-height: normal;
  -webkit-transition: all 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275);
          transition: all 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}             
              

按钮对应的窗口内容被居中定位,默认是隐藏的。这些窗口变为可见状态时通过使用jQuery代码来为它添加.button__content--active class实现的。

.button__content {
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
      -ms-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  padding: 60px 20px;
  text-align: center;
  width: 600px;
  visibility: hidden;
  opacity: 0;
  z-index: 10;
  color: white;
}
.button__content--active {
  opacity: 1;
  visibility: visible;
}                
              

在CSS代码中需要注意的是z-index值的设置。弹出的窗口的z-index必须必按钮的要高,这样它们才不会被按钮遮挡住。

JAVASCRIPT

当某个按钮被点击之后,jQuery代码中首先找出是哪个按钮被点击了。然后根据减少offset().left值以及.innerWidth() / 2一半的屏幕刻度值来将两个按钮向中间移动。没有被选择的按钮被设置了一个transition-delay值,使它延迟一些时间在移动。

当过渡动画结束的时候,开始将按钮的尺寸缩放到内容窗口的大小尺寸。这是通过内容窗口的.innerWidth()除以按钮的.innerWidth()来实现。这个值是用于transform: scale(x)的值。在高度上也使用相同的手法来进行处理。

具体的实现代码请参考下载文件。