【问题标题】:Removing a class after appending附加后删除类
【发布时间】:2018-09-05 06:39:45
【问题描述】:

我试图在附加到 DOM 时滑入一个元素。像这样:

$("<div class='column column-hiding'>Content</div>")
    .appendTo(container)
    .removeClass("column-hiding");

也试过了:

$("<div class='column'>Content</div>")
    .appendTo(container)
    .addClass("column-showing");

样式定义如下:

.column {
     transform: translateX(0%);
     transition: all 0.3s ease-out;
 }

 .column-hiding {
     transform: translateX(-100%);
     transition: all 0.3s ease-out;
 }

.column {
     transform: translateX(-100%);
     transition: all 0.3s ease-out;
 }

 .column-showing {
     transform: translateX(0%);
     transition: all 0.3s ease-out;
 }

这样它会立即显示该列。此方法在延迟 setTimeout 延迟后有效,但是否有任何其他选项可用于确定应添加/删除类的时间?我还尝试在样式中添加transition-delay,但它仍然会立即显示。

提前感谢您的回答。

注意:我使用的是 jQuery 3。

** 编辑 **

这是一个sn-p:

// this animates instantly

$("<div class='column column-hiding'>Content</div>")
  .appendTo($("#container"))
  .removeClass("column-hiding");

// this is working

var column = $("<div class='column col2 column-hiding'>Content</div>")
  .appendTo($("#container"));
setTimeout(function(){
  column.removeClass("column-hiding");
}, 500);
#container {
  width: 100px;
  height: 300px;
  background: silver;
  overflow: hidden;
}

.column {
  transform: translateX(0%);
  transition: all 0.3s ease-out;
  background: blue;
  width: 100px;
  height: 100px;
}

.column-hiding {
  transform: translateX(-100%);
  transition: all 0.3s ease-out;
}

.col2 {
background: red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

【问题讨论】:

  • 你能在你的问题中创建 sn-p 以更好地理解你的代码是如何工作的吗?
  • 好的,我会创建一个..
  • @MaratBadykov 添加了一个。
  • 您好,您可以在附加元素后尝试使用 mutationObserver 作为回调函数...见stackoverflow.com/questions/3219758/detect-changes-in-the-dom/…
  • 是的,这是一个答案,但它会导致任何性能问题吗?我也在读那个答案。

标签: jquery css transition show-hide


【解决方案1】:

您可以使用“回调”函数来实现此目的,但不能在 'appendTo' 方法中使用回调...有一个名为 $.when() 的 jquery 方法来执行回调函数...并在此处找到您的代码的工作示例https://jsfiddle.net/xpvt214o/738145/

var column = $("<div class='column col2 column-hiding'>Content</div>");

$.when(column.appendTo($("#container"))).then(function(){
    column.removeClass("column-hiding");
});

使用delay()queue(), dequeue() 方法获取此输出...https://jsfiddle.net/xpvt214o/738391/

$("<div class='column column-hiding'>Content</div>")
 .appendTo($("#container"))
 .delay(1000)
 .queue(function(){
   $(this).removeClass("column-hiding").dequeue();
});

【讨论】:

  • 是的,$.when 就是我要找的东西!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多