Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e672662

Browse files
authored
feat(collapse): 新增折叠面板展开和收缩时的过渡动画 (#2722)
1 parent e3f683c commit e672662

File tree

2 files changed

+40
-28
lines changed

2 files changed

+40
-28
lines changed

src/css/layui.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,8 @@ a cite{font-style: normal;}
577577
.layui-colla-item:first-child{border-top: none;}
578578
.layui-colla-title{position: relative; height: 42px; line-height: 42px; padding: 0 15px 0 35px; color: #333; background-color: #fafafa; cursor: pointer; font-size: 14px; overflow: hidden;}
579579
.layui-colla-content{display: none; padding: 10px 15px; line-height: 1.6; color: #5F5F5F;}
580-
.layui-colla-icon{position: absolute; left: 15px; top: 0; font-size: 14px;}
580+
.layui-colla-icon{position: absolute; left: 15px; top: 50%; margin-top: -7px; font-size: 14px; line-height: normal; transition: all .2s;}
581+
.layui-collapse-item-expand > .layui-colla-title .layui-colla-icon{transform: rotate(90deg);}
581582

582583
/* 卡片面板 */
583584
.layui-card{margin-bottom: 15px; border-radius: 2px; background-color: #fff; box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);}

src/modules/element.js

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ layui.define('jquery', function(exports) {
1414
var THIS = 'layui-this';
1515
var SHOW = 'layui-show';
1616
var TITLE = '.layui-tab-title';
17+
var CONST = {
18+
CLASS_COLLAPSE_EXTEND: 'layui-collapse-item-expand'
19+
};
1720

1821
var Element = function(){
1922
this.config = {};
@@ -404,28 +407,36 @@ layui.define('jquery', function(exports) {
404407
}
405408

406409
// 折叠面板
407-
,collapse: function(){
410+
,collapse: function() {
408411
var othis = $(this);
409-
var icon = othis.find('.layui-colla-icon');
410-
var elemCont = othis.siblings('.layui-colla-content');
411-
var parents = othis.parents('.layui-collapse').eq(0);
412-
var filter = parents.attr('lay-filter');
413-
var isNone = elemCont.css('display') === 'none';
412+
var wrapper = othis.closest('.layui-collapse');
413+
var filter = wrapper.attr('lay-filter');
414+
415+
var ANIM_MS = 200; // 动画过渡毫秒数
416+
var CLASS_ITEM = '.layui-colla-item';
417+
var CLASS_CONTENT = '.layui-colla-content';
418+
419+
var thisItemElem = othis.parent(CLASS_ITEM);
420+
var thisContentElem = othis.siblings(CLASS_CONTENT);
421+
var isNone = thisContentElem.css('display') === 'none';
414422

415423
// 是否手风琴
416-
if(typeof parents.attr('lay-accordion') === 'string'){
417-
var show = parents.children('.layui-colla-item').children('.'+SHOW);
418-
show.siblings('.layui-colla-title').children('.layui-colla-icon').html('');
419-
show.removeClass(SHOW);
424+
if (typeof wrapper.attr('lay-accordion') === 'string') {
425+
var itemElems = wrapper.children(CLASS_ITEM);
426+
itemElems.removeClass(CONST.CLASS_COLLAPSE_EXTEND);
427+
itemElems.children(CLASS_CONTENT).slideUp(ANIM_MS, function() {
428+
$(this).removeClass(SHOW);
429+
});
420430
}
421431

422-
elemCont[isNone ? 'addClass' : 'removeClass'](SHOW);
423-
icon.html(isNone ? '' : '');
432+
// 展开或收缩
433+
thisItemElem[isNone ? 'addClass' : 'removeClass'](CONST.CLASS_COLLAPSE_EXTEND);
434+
thisContentElem[isNone ? 'slideDown' : 'slideUp'](ANIM_MS);
424435

425436
layui.event.call(this, MOD_NAME, 'collapse('+ filter +')', {
426-
title: othis
427-
,content: elemCont
428-
,show: isNone
437+
title: othis,
438+
content: thisContentElem,
439+
show: isNone
429440
});
430441
}
431442
};
@@ -617,27 +628,27 @@ layui.define('jquery', function(exports) {
617628
});
618629
}
619630

620-
//折叠面板
621-
,collapse: function(elem){
631+
// 折叠面板
632+
,collapse: function(elem) {
622633
var ELEM = 'layui-collapse';
623634
var targetElem = elem || $('.' + ELEM + elemFilter);
624635

625-
targetElem.each(function(){
626-
var elemItem = $(this).find('.layui-colla-item')
627-
elemItem.each(function(){
636+
targetElem.each(function() {
637+
var elemItem = $(this).find('.layui-colla-item');
638+
elemItem.each(function() {
628639
var othis = $(this)
629-
,elemTitle = othis.find('.layui-colla-title')
630-
,elemCont = othis.find('.layui-colla-content')
631-
,isNone = elemCont.css('display') === 'none';
640+
var elemTitle = othis.find('.layui-colla-title');
641+
var elemCont = othis.find('.layui-colla-content');
642+
var isNone = elemCont.css('display') === 'none';
632643

633-
//初始状态
644+
// 初始状态
634645
elemTitle.find('.layui-colla-icon').remove();
635-
elemTitle.append('<i class="layui-icon layui-colla-icon">'+ (isNone ? '&#xe602;' : '&#xe61a;') +'</i>');
646+
elemTitle.append('<i class="layui-icon layui-icon-right layui-colla-icon"></i>');
647+
othis[isNone ? 'removeClass' : 'addClass'](CONST.CLASS_COLLAPSE_EXTEND);
636648

637-
//点击标题
649+
// 点击标题
638650
elemTitle.off('click', call.collapse).on('click', call.collapse);
639651
});
640-
641652
});
642653
}
643654
};

0 commit comments

Comments
 (0)