CSS网格-用于添加/删除卡的转换

CSS网格-用于添加/删除卡的转换,css,animation,transition,css-grid,Css,Animation,Transition,Css Grid,我创建了一个脚本,可以在css网格中动态添加和删除卡片。请看一看: 使用JS实现卡片的添加和删除: // Add new card function addCard(card) { card.id = _cards.length + 1; _cards.push(card); _$main.html(''); for (let i = 0; i < _cards.length; i++) { drawCard(_cards[i]);

我创建了一个脚本,可以在css网格中动态添加和删除卡片。请看一看:

使用JS实现卡片的添加和删除:

// Add new card
function addCard(card) {
    card.id = _cards.length + 1;
    _cards.push(card);
    _$main.html('');
    for (let i = 0; i < _cards.length; i++) {
        drawCard(_cards[i]);
    }
}

// Remove card
function removeCard(id) {
    let cardRemoved = false;
    $('#' + _idPrefix + id).remove();
    for (let i = 0; i < _cards.length; i++) {
        if (_cards[i].id === id) {
            _cards.splice(i, 1);
            cardRemoved = true;
            break;
        }
    }
    if (cardRemoved) {
        // New IDs and redrawing
        _$main.html('');
        for (let i = 0; i < _cards.length; i++) {
            _cards[i].id = i + 1;
            drawCard(_cards[i]);
        }
    }
}

// Draw card
function drawCard(card) {
    let buildStr = '';
    buildStr += '<div class="grid-container ' + card.size + '" id="' + _idPrefix + card.id + '">';
    buildStr += '<div class="grid-item ' + card.color + '">';
    buildStr += '<div class="card-text">' + card.title + '</div></div></div>';
    _$main.html(_$main.html() + buildStr);
}
//添加新卡
功能添加卡(card){
card.id=_cards.length+1;
_卡片。推(卡片);
_$main.html(“”);
对于(设i=0;i<\u cards.length;i++){
提款卡(_cards[i]);
}
}
//取出卡片
函数removeCard(id){
让cardRemoved=false;
$('#'+_idPrefix+id).remove();
对于(设i=0;i<\u cards.length;i++){
如果(_cards[i].id==id){
_卡.拼接(i,1);
cardRemoved=true;
打破
}
}
如果(已拆下){
//新ID和重绘
_$main.html(“”);
对于(设i=0;i<\u cards.length;i++){
_卡片[i].id=i+1;
提款卡(_cards[i]);
}
}
}
//抽牌
功能抽卡(卡){
让buildStr='';
buildStr+='';
buildStr+='';
buildStr+=''+card.title+'';
_$main.html($main.html()+buildStr);
}
这些卡存储在一个全局数组\u卡中。移除一张卡后,我需要更新他们的ID,这与他们的位置(1-8)相似。请注意,添加卡通常没有限制(只有8张是可见的)

由于美学原因,我希望在移除或添加卡到网格时使用过渡/动画。现在我还没有找到解决办法

添加新卡:新卡应从右向左移动,直到到达其在网格中的位置。
卸下卡:将卡淡出。网格应该“填充”自己,所以被移除的卡后面的卡也应该从右向左移动到它们的新位置

如果一张卡片切换了行tho会发生什么?也许卡片可以移动到视口(左)之外,并从视口的右边框重新出现,向左移动到它的新位置。你不能像这样拆分元素,但这里有一个想法。在删除div之前,先将其设置为不可见,使用transform:translateX将div向左移动,在所有内容就位后,删除不可见div。为了切换行,我能想到的最好方法是克隆div切换行。您无法设置CSS网格位置的动画,因此,您需要建立网格中每个图元的全局位置,然后在删除图元后将所有图元调整为新的位置值。这需要很多计算!非常感谢。也许我想用lib来解决这个问题。正如