java - 如何在java脚本或css中完成动画后使元素可拖动?

Posted

技术标签:

【中文标题】java - 如何在java脚本或css中完成动画后使元素可拖动?【英文标题】:how to make element dragable after completion of it's animation in java script or css? 【发布时间】:2021-10-26 11:33:03 【问题描述】:

我使用此代码为元素设置了动画

#h1

position: absolute;
animation: diagonal_h1 2s;
animation-play-state: paused;
animation-fill-mode forwards;


@keyframes diagonal_h1

    0%        transform: translatex(0px) translatey(0px) 
    100%      transform: translatex(-50px) translatey(-100px) 

我正在使用按钮播放动画。 但是当我尝试通过(interactive.js 库)使其可拖动时

const position =  x: 0, y: 0 

interact('#h1').draggable(
  listeners: 
    start (event) 
      console.log(event.type, event.target)
    ,
    move (event) 
      position.x += event.dx
      position.y += event.dy

      event.target.style.transform =
        `translate($position.xpx, $position.ypx)`
    ,
  
)

元素没有通过拖动移动。所以我删除了animation-fill-mode forwards;

通过这样做,元素是可拖动的,但问题是元素不会停留在其最终状态

请帮忙。

【问题讨论】:

【参考方案1】:

当元素仍然具有该动画集时,它将保持其填充模式前向转换状态。

要解决这个问题,您可以在用户拖动时想要转换元素之前删除动画。

这是一个简单的 sn-p - 不使用库 - 它有一个元素动画,然后在几秒钟后翻译其位置而不删除动画和第二个元素动画,并且其位置在几秒钟后翻译相同秒,但动画被移除。

你会看到第一个元素改变了颜色但没有移动,第二个元素在几秒钟后移动。

const first = document.querySelector('.first');
const second = document.querySelector('.second');
setTimeout(function() 
  first.style.transform = 'translate(50px, 0)';
  first.style.color = 'red';
, 5000);
setTimeout(function() 
  second.style.animation = 'none';
  second.style.transform = 'translate(50px, 0)';
  second.style.color = 'blue';
, 5000);
.move 
  animation: move 1s linear 1;
  animation-fill-mode: forwards;


@keyframes move 
  100% 
    transform: translate(50px, 50px);
  
<div class="move first">FIRST ELEMENT</div>
<div class="move second">SECOND ELEMENT</div>

【讨论】:

以上是关于java - 如何在java脚本或css中完成动画后使元素可拖动?的主要内容,如果未能解决你的问题,请参考以下文章

css动画完成后运行js脚本

如何在不使用 void 的情况下重新启动 CSS 动画?

animate.css : 悬停脚本动画

如何像苹果过去在他们的 livepage 上那样只使用 HTML 和 CSS(或者我猜是 java)创建滚动文本的动画?

优化动画 - css 或 canvas

CSS3 skew倾斜rotate旋转动画