【问题标题】:Deleting div animation删除 div 动画
【发布时间】:2014-05-08 01:33:35
【问题描述】:

我想删除一个div,并让包装器内的所有其他div(之后)重新排列并很好地动画(滑动)到它们的新位置。目前它一闪而过,事情并不总是在正确的地方进行,而我的普遍失败。

JsFiddle:http://jsfiddle.net/CUzNx/30/

HTML

<div class="container">
    <div id="item1" class="item">Test1</div>
    <div id="item2" class="item">Test2</div>
    <div id="item3" class="item">Test3</div>
    <div id="item4" class="item">Test4</div>
    <div id="item5" class="item">Test5</div>
    <div id="item6" class="item">Test6</div>
</div>

Javascript

var items = document.getElementsByClassName('item');
for(var i = 0; i < items.length; i ++)
{
    items[i].onclick = function() {
        this.classList.toggle('hide');
    }
};

CSS

.container {
    width: 500px;
}
.item {
    float: left;
    width: 48%;
    min-height: 187px;
    border: 1px solid black;
    margin: 0 1% 1em 0;
    position: relative;
    background: white;
    transition: all .5s ease-in-out;
    -webkit-transition: all .5s ease-in-out;
    -moz-transition: all .5s ease-in-out;
    -ms-transition: all .5s ease-in-out;
    -o-transition: all .5s ease-in-out;
}
.hide {
    width: 0px;
    height: 100%;
    opacity:0;
    margin:0;
    padding:0;
    -webkit-backface-visibility: hidden;
    -webkit-transform-style: preserve-3d;
}

【问题讨论】:

  • 尝试将border: 0; 添加到.hide
  • @KittMedia - 它肯定更近了,但看起来仍然不正确。我希望每个项目都能滑入到位(或以某种方式设置动画)。见 - jsfiddle.net/CUzNx/44
  • 你考虑过masonry.desandro.com 吗?为什么要重新发明轮子?
  • masonry.desandro.com/methods.html#remove - 我认为正是你想要实现的目标
  • 砌体是纯 javascipt,如果你的意思是它不需要 JQuery。您可以在有或没有 JQuery 的情况下使用它。另外,我真的不认为链接到图书馆是一个答案,所以我不会将它添加为一个。

标签: javascript css animation html


【解决方案1】:

我很高兴使用

display:inline-block;

然后在JavaScript中为动画的结束添加一个超时时间,然后是一个

this.style.display = none

链接在这里:

http://jsfiddle.net/8BSkY/

var items = document.getElementsByClassName('item');
for(var i = 0; i < items.length; i ++)
{
    items[i].onclick = function() {
        var box = this
        this.classList.toggle('hide');
        setTimeout(function(){
            box.style.display = 'none';
        },500);
    }
};

然后:

.item {
    display: inline-block;
    width: 48%;
    min-height: 187px;
    border: 1px solid black;
    position: relative;
    background: white;
    box-sizing:border-box;
    margin:1%;
    transition: all .5s ease-in-out;
    -webkit-transition: all .5s ease-in-out;
    -moz-transition: all .5s ease-in-out;
    -ms-transition: all .5s ease-in-out;
    -o-transition: all .5s ease-in-out;
}

【讨论】:

    【解决方案2】:

    您应该隐藏整个 div 以使其完全不渲染。向 css 动画添加事件监听器并更改其样式(或根据需要设置另一个类名)

    var items = document.getElementsByClassName('item');
    for(var i = 0; i < items.length; i ++)
    {
        items[i].onclick = function(){
            this.addEventListener('webkitTransitionEnd', function( event ) { 
                this.style.display = 'none';
            }, false );
            this.classList.toggle('hide');
        }
    };
    

    附:但这只是 webkit 浏览器。

    • Webkit 浏览器(Chrome、Safari)使用 webkitTransitionEnd
    • Firefox 使用 transitionend
    • IE9+ 使用 msTransitionEnd
    • Opera 使用 oTransitionEnd

    【讨论】:

    • 嘿。这似乎与其他人的工作方式完全相同。事情很快就到位了。
    • 你用的是什么浏览器?
    【解决方案3】:

    试试这个:demo

    我希望它能满足您的要求。

     $(".item").click(function(){
    
            $(this).animate({
                width: '0px',
                height:'100%',
                opacity:'0',
                margin:'0',
                padding:'0',
                left: '0px'
    
            });
        });
    

    CSS

    .item {
        float: left;
        width: 48%;
        min-height: 187px;
        border: 1px solid black;
        margin: 0 1% 1em 0;
        position: relative;
        background: white;
    
    
        transition:all 3s;
        transition-timing-function:ease-in-out;
        /* Safari */
        -webkit-transition:all 3s;
        -webkit-transition-timing-function:ease-in-out;
    }
    

    【讨论】:

    • 嗨 Majoj。我可以让那个项目动画。问题是在将所有 div 删除到位后滑动所有 div。如果你看一下你的演示,在初始动画之后,其余的就会出现在原地。
    • 你不能只通过css或jquery来实现,你必须使用一些像isotope这样的插件
    猜你喜欢
    • 2019-03-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2012-09-17
    • 2013-04-08
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多