【问题标题】:Jquery add animation to add/removeClass and clone/remove elementsJquery 添加动画以添加/删除类和克隆/删除元素
【发布时间】:2015-03-19 13:43:28
【问题描述】:

我想为 add/removeClass 和 clone/remove 元素添加一个动画(可能相同)。对于 add/removeClass 函数,我尝试使用引导类“淡入”(没有成功)。对于克隆/删除元素,我尝试使用隐藏/显示(仅成功删除)

HTML

<!-- CLONE BTN -->
<div class="row cust-gutters">
    <div class="col-md-12">
        <span id="cloneRow" class="label label-primary pointer">
            Add <span class="glyphicon glyphicon-plus"></span>
        </span>
    </div>
</div>

<div class="clonable-row-label hide fade">
    <div class="row">
        <div class="col-md-4">
            <label class="control-label" for="phone">Phone</label>
        </div>
    </div>
</div>
<div class="clonable-row hide fade">
    <div class="row">
        <div class="col-md-4">
            <div class="input-group">
                <input type="text" class="form-control input-sm" name="phone[]" />
                <span class="input-group-addon">
                    <span class="glyphicon glyphicon-trash deleteRow" aria-hidden="true"></span>
                </span>
            </div>
        </div>
    </div>
</div>

JS

$("#cloneRow").on('click', function() {
    var num = $(".clonable-row").length;
    if($(".clonable-row:first").hasClass("hide")) {
        $(".clonable-row:first, .clonable-row-label").addClass("in");
        $(".clonable-row:first, .clonable-row-label").removeClass("hide");
    } else {
        if(num < 4) {
            //var row = $('.clonable-row:first').clone(true);
            //row.insertAfter('.clonable-row:last').show().fadeIn(600);
            $(".clonable-row:first").clone(true).insertAfter(".clonable-row:last");
        }
    }
});

$(".deleteRow").on('click', function() {
    var num = $(".clonable-row").length;
    if(num == 1) {
        $('.clonable-row-label').addClass("hide").removeClass("in");
        $(this).closest('.clonable-row').addClass("hide").removeClass("in");
    } else {
        $(this).closest('.clonable-row').hide(600, function() {
            $(this).closest('.clonable-row').remove();
        });
    }
});

我该怎么做? 谢谢你

JSFIDDLE

【问题讨论】:

    标签: jquery twitter-bootstrap animation


    【解决方案1】:

    jQuery UI 提供了.addClass()removeClass() 的动画版本。

    至于显示元素时的动画,你应该使用 fadeIn(),就像你一样。请注意,fadeIn() ALREADY shows() 这样的元素,所以像 $(element).show().fadeIn() 这样的操作是没有意义的,因为当 fadeIn() 开始时,元素将已经显示,并且 $(element ).fadeIn().show() 也是没有意义的,因为fadeIn() 在完成时已经完全显示了元素。

    以下 sn-p 的问题是概念性的:

    $(this).closest('.clonable-row').hide(600, function() {
        $(this).closest('.clonable-row').remove();
    });
    

    应该是这样的:

    $(this).closest('.clonable-row').hide(600, function() {
        // Note here that $(this) is already the element (jQuery-wrapped) you called .hide() on
        $(this).remove();
    });
    

    编辑

    对于您的具体情况,插入克隆的元素,您应该在将其插入 HTML 之前将其隐藏:

    $(".clonable-row:first").clone(true).hide().insertAfter(".clonable-row:last").fadeIn();
    

    【讨论】:

    • 现在克隆动画完美了!但是我仍然对使用 jquery ui jsfiddle.net/oagw16hc/13 Tnahks 的 add/removeclass 的动画有问题
    • 这里是:您的小提琴的第 18 行将 hide 类添加到一个 div 中,该 div 是您的 .clonable-row-label 的容器正在选择:$(this).closest('.clonable-row').addClass("hide"); 这里的问题是,当 .clonable-row-label 上的动画 .addClass() 不会完成时,外部 div 将立即隐藏。该行应该在对 .addClass() 的动画调用的回调(完成时)中。
    【解决方案2】:

    你应该使用:

    $(".clonable-row:first").clone(true).insertAfter(".clonable-row:last").hide().fadeIn(600);

    【讨论】:

    • 我在第二次迭代中做了一个测试(我在 else 中添加了我的测试),这里:jsfiddle.net/oagw16hc/11
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多