【问题标题】:How to stop transforms in a CSS transition如何在 CSS 过渡中停止变换
【发布时间】:2018-09-23 21:03:21
【问题描述】:

我已经设置了类似的 CSS 过渡

 transition: all 2s 

然后我应用 CSS 来更改转换,如:

 transform: rotate(20deg); 

过渡开始。

我想中途停止它并让它留在那里,这样我就可以在其上应用一些其他依赖于应用程序的 JS... 暂停后的内容与问题无关测试,我用:

 setTimeout(function() {
   ...
 }, 1000);

停止过渡的一种粗略方法是将 CSS 显示设置为“无”。 将转换设置为“无”或空字符串不起作用。转换结束以进行转换。将 CSS 重置为当前 CSS 的另一个技巧适用于其他属性,但不适用于转换。将转换属性设置为 none 或空字符串也不会停止转换的转换。

肯定有办法。

有什么建议吗?最好在 JQuery 中 我不想使用动画。

【问题讨论】:

  • 停下来回来?还是停下来?
  • 如果禁用过渡会怎样?
  • @ArthurGuiot 如果您的意思是将过渡 CSS 属性设置为“无”或空字符串,我尝试过...查看问题。
  • @Tenabu Afif 实际上,您可以通过简单地将这些属性恢复为当前属性,在所有其他 CSS 转换中停止它。我在一些帖子/博客上学到的技巧,如 $(selector).css('opacity', $(selector).css('opacity;)) 这将停止不透明度转换并且也适用于其他 CSS 属性,但它不会出于某种原因进行转换。
  • @Sam 在下面检查我的答案,我用这个技巧更新它,它工作正常

标签: javascript jquery css css-transitions css-transforms


【解决方案1】:

为什么不使用可以轻松管理状态的动画:

$('button').eq(0).click(function() {
  $('.box').css('animation-play-state', 'paused');
});
$('button').eq(1).click(function() {
  $('.box').css('animation', 'none');
});
.box {
  margin: 50px;
  width: 100px;
  height: 100px;
  background: red;
  display:inline-block;
  vertical-align:top;
  animation: anime 10s forwards;
}

@keyframes anime {
  to {
    transform: rotate(180deg);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
</div>
<button>Stop</button>
<button>Reset</button>

更新

您可以尝试以下过渡方式:

$('button').eq(0).click(function() {
  $('.box').addClass('rotate');
});
$('button').eq(1).click(function() {
  var e = $('.box').css('transform'); // get the current state
  $('.box').css('transform', e); //apply inline style to override the one defined in the class
});
.box {
  margin: 50px;
  width: 100px;
  height: 100px;
  background: red;
  display:inline-block;
  vertical-align:top;
  transition: all 10s;
}

.rotate {
  transform: rotate(180deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
</div>
<button>start</button>
<button>stop</button>

【讨论】:

  • 如果 display 设置为 none,动画不会停止。这是原因之一……另外,过渡对 JS 更友好?
  • @Sam 是的,他们不会停止...他们会停止使用您可以看到的另一个属性
  • 对哦!我会检查我做错了什么或有什么不同。如果可行,我会接受你的回答。我唯一不同的是直接在元素上添加转换属性作为 CSS 而不是类。让我看看有没有问题...
  • 我添加为 $(selector).css('transform','...');是这个问题吗?它适用于不透明度、宽度等。
猜你喜欢
  • 2020-01-31
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2015-11-23
  • 2017-08-23
  • 2018-09-09
相关资源
最近更新 更多