删除类时的转换显示:无

Posted

技术标签:

【中文标题】删除类时的转换显示:无【英文标题】:Transition when removing class with display: none 【发布时间】:2018-01-20 21:35:05 【问题描述】:

我有一个 div 列表,其中一些通过 class: "not-updated" 隐藏,而另一些则可见。

.not-update
            display: none

在某些时候,由于一些 AJAX 调用,一些隐藏的 div 可能会通过删除 class: "not-updated" 来显示。

但是,我希望它们出现过渡,类似于 .fadeTo("slow", 1) 的情况。

Here is a jsfiddle 这可能有助于更好地了解情况。在这个例子中,为了简单起见,它只会出现一个 div,但实际上它可以是多个,并且是随机的。

试验

如您所见,我尝试了this suggestion,但没有成功:

.box
    -webkit-transition: all 0.5s ease;
    -moz-transition: all 0.5s ease;
    -o-transition: all 0.5s ease;
    transition: all 0.5s ease;

This one也没有帮助:

$(this).removeClass('not-updated',1000);

知道如何实现吗?

【问题讨论】:

首先,要使 CSS 动画起作用,插入时必须隐藏元素,然后必须删除类。为removeClass 制作动画的其他示例需要 jQuery UI。 另请注意,转换不适用于 display 属性 【参考方案1】:

这可能对您有帮助 @keyframes https://jsfiddle.net/gm3Lb02y/1/

$('#updater').click(function() 
    $('#box7').removeClass('not-updated');
);
.box
    border: 1px solid black;
    width: 350px;
    height: 40px;
    -webkit-animation: fadeAnimation 3s;


.not-updated
    display: none;


@-webkit-keyframes fadeAnimation 
    0% 
        opacity: 0;
    
    25% 
        opacity: 0.25;
    
    50% 
        opacity: 0.5;
    
    100% 
        opacity: 1;
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="box1" class="box">Box1</div>
<div id="box2" class="box not-updated">Box2</div>
<div id="box3" class="box">Box3</div>
<div id="box4" class="box not-updated">Box4</div>
<div id="box5" class="box not-updated">Box5</div>
<div id="box6" class="box">Box6</div>
<div id="box7" class="box not-updated">Box7</div>
<div id="box8" class="box">Box8</div>

<br>
<button id="updater">
Click me
</button>

slideDownhttps://jsfiddle.net/gm3Lb02y/3/ 的另一种解决方案

$('#updater').click(function() 
    $('#box7').slideDown('3000').removeClass('not-updated');
);
.box
    border: 1px solid black;
    width: 350px;
    height: 40px;


.not-updated
    display: none;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="box1" class="box">Box1</div>
<div id="box2" class="box not-updated">Box2</div>
<div id="box3" class="box">Box3</div>
<div id="box4" class="box not-updated">Box4</div>
<div id="box5" class="box not-updated">Box5</div>
<div id="box6" class="box">Box6</div>
<div id="box7" class="box not-updated">Box7</div>
<div id="box8" class="box">Box8</div>

<br>
<button id="updater">
Click me
</button>

希望这对你有帮助。

【讨论】:

我发现您的第二种方法最好,因为它与 Cristiano 的回复中的效果相同,但修改较少。不幸的是,不知何故它不适用于我的真实代码。【参考方案2】:

.fadeTo("slow", 1) 是基于不透明度的。我建议你使用两个类:

.not-updated visibility: hidden; opacity: 0; height: 0px; border: 0px; .updated visibility: visible; opacity: 1; transition: opacity 2s ease-in-out; -moz-transition: opacity 2s ease-in-out; -webkit-transition: opacity 2s ease-in-out;

您可以从第一类切换到第二类,在transitionend 上您可以删除切换的类。

sn-p:

$('#updater').click(function() 
  $('.box.not-updated:first').toggleClass('not-updated updated').on('transitionend', function(e) 
      this.classList.remove('updated');
  );
);
.box
    border: 1px solid black;
    width: 350px;
    height: 40px;


.not-updated
    visibility: hidden;
    opacity: 0;
    height: 0px;
    border: 0px;

.updated
    visibility: visible;
    opacity: 1;
    transition: opacity 2s ease-in-out;
    -moz-transition: opacity 2s ease-in-out;
    -webkit-transition: opacity 2s ease-in-out;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div id="box1" class="box">Box1</div>
<div id="box2" class="box not-updated">Box2</div>
<div id="box3" class="box">Box3</div>
<div id="box4" class="box not-updated">Box4</div>
<div id="box5" class="box not-updated">Box5</div>
<div id="box6" class="box">Box6</div>
<div id="box7" class="box not-updated">Box7</div>
<div id="box8" class="box">Box8</div>

<br>
<button id="updater">
    Click me
</button>

【讨论】:

【参考方案3】:

虽然 "display: none" 不会从 DOM 中移除元素,但它确实会从页面布局中移除它,所以它不能被动画化。您可以先使用“显示:无”删除该类,然后制作动画。像这样的:

$('#updater').click(function() 
    $('#box7').removeClass('not-updated');

    setTimeout(function() 
    $('#box7').addClass('box-updated');
  , 0);
);

您的小提琴已更新:https://jsfiddle.net/f2561ncf/

【讨论】:

【参考方案4】:

问题是盒子方法。试试 slideDown() 让盒子看起来很慢。

举个例子,你有这个!

var time = 1000;
$("#updater").click(function()
    $("#box7").slideDown(time);
);

这将使它比 webkit 建议更容易编辑! 如果你的目标是纯 CSS 方法,还有W3Schools CSS Slow Hover

【讨论】:

以上是关于删除类时的转换显示:无的主要内容,如果未能解决你的问题,请参考以下文章

向上转换到基类时如何使用继承的类成员的值

在子元素中添加/删除类时的 CSS3 过渡动画

JAVA:子类继承父类时的构造方法

使用 Java 将 unix 纪元转换为人类可读时的日期不正确

为啥使用 javascript / jQuery 添加类时 css 转换不起作用?

记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题