jQuery和CSS3摺疊卡片式下拉選單框特效

listjjjclove發表於2024-12-02

這是一款使用JQUERY和CSS3製作的效果非常炫酷的摺疊卡片式下拉選單框特效。該下拉選單框特效將每一個列表項都製作為卡片的樣式,開啟和關閉它有開啟和關閉百葉窗的感覺,效果非常不錯。

預覽 下載

使用方法

HTML結構

該下拉選單框特效的列表項使用一個無序列表來製作,用於切換開啟和關閉狀態的元素是一個超連結元素。

<div class="container">
  <div class="card-drop">
    <a class='toggle' href="#">
      <i class='fa fa-suitcase'></i> 
      <span class='label-active'>Everyting</span>
    </a>
    <ul>
      <li class='active'>
        <a data-label="Everyting" href="#"><i class='fa fa-suitcase'></i> Everyting</a>
      </li>
      ......
    </ul>
  </div>
</div>
              
CSS樣式

a.toggle元素用於切換下拉選單的開啟和關閉狀態。為了製作點選時卡片上翻的效果,它被設定了transform-style: preserve-3d;屬性。同時修改了轉換的原點transform-origin: 50% 0%;

.card-drop > a.toggle {
  position: relative;
  z-index: 100;
  -moz-backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  -moz-transform-style: preserve-3d;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -moz-transform-origin: 50% 0%;
  -ms-transform-origin: 50% 0%;
  -webkit-transform-origin: 50% 0%;
  transform-origin: 50% 0%;
  -moz-transition: linear 0.1s;
  -o-transition: linear 0.1s;
  -webkit-transition: linear 0.1s;
  transition: linear 0.1s;
}              
              

但它處於啟用狀態的時候,它會沿X軸進行旋轉,並使用:before:after偽元素來製作角部三角形效果。

.card-drop > a.toggle:active {
  -moz-transform: rotateX(60deg);
  -webkit-transform: rotateX(60deg);
  transform: rotateX(60deg);
}
.card-drop > a.toggle:active:after {
  -moz-transform: rotateX(180deg);
  -webkit-transform: rotateX(180deg);
  transform: rotateX(180deg);
}
.card-drop > a.toggle:before, .card-drop > a.toggle:after {
  content: "";
  position: absolute;
}
.card-drop > a.toggle:before {
  right: 25px;
  top: 50%;
  margin-top: -2.5px;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-top: 6px solid rgba(0, 0, 0, 0.8);
}
.card-drop > a.toggle.active:before {
  transform: rotate(180deg);
}                
              

列表項在切換時只是簡單的使用jQuery來修改它們的topwidthmargin-left屬性,使其顯示和隱藏。並使用ease-out作為CSS動畫過渡效果。

.card-drop ul {
  position: absolute;
  height: 100%;
  top: 0;
  display: block;
  width: 100%;
}
.card-drop ul li {
  margin: 0 auto;
  -moz-transition: all, ease-out 0.3s;
  -o-transition: all, ease-out 0.3s;
  -webkit-transition: all, ease-out 0.3s;
  transition: all, ease-out 0.3s;
  position: absolute;
  top: 0;
  z-index: 0;
  width: 100%;
}
.card-drop ul li a {
  border-top: none;
}
.card-drop ul li a:hover {
  background-color: #4aa3df;
  color: #f3f9fd;
}
.card-drop ul li.active a {
  color: #fff;
  background-color: #258cd1;
  cursor: default;
}
.card-drop ul li.closed a:hover {
  cursor: default;
  background-color: #3498db;
}                
              
JavaScript

在jQuery程式碼中,setClosed()函式用於關閉所有的列表項,預設它們是處於關閉狀態的。

function setClosed() {
    li.each(function (index) {
        $(this).css('top', index * 4).css('width', width - index * 0.5 + '%').css('margin-left', index * 0.25 + '%');
    });
    li.addClass('closed');
    toggler.removeClass('active');
}
setClosed();                
              

然後監聽.toggle元素的mousedown事件,該事件中切換列表的開啟和關閉狀態。

toggler.on('mousedown', function () {
    var $this = $(this);
    if ($this.is('.active')) {
        setClosed();
    } else {
        $this.addClass('active');
        li.removeClass('closed');
        li.each(function (index) {
            $(this).css('top', 60 * (index + 1)).css('width', '100%').css('margin-left', '0px');
        });
    }
});                
              

最後在每一個列表項被點選的時候,將該列表項的內容移動到第一項中,被關閉整個下來列表。

links.on('click', function (e) {
    var $this = $(this), label = $this.data('label');
    icon = $this.children('i').attr('class');
    li.removeClass('active');
    if ($this.parent('li').is('active')) {
        $this.parent('li').removeClass('active');
    } else {
        $this.parent('li').addClass('active');
    }
    toggler.children('span').text(label);
    toggler.children('i').removeClass().addClass(icon);
    setClosed();
    e.preventDefault;
}); 

相關文章