首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JS中触发CSS动画?

问如何在JS中触发CSS动画?
EN

Stack Overflow用户
提问于 2020-04-12 18:51:13
回答 2查看 112关注 0票数 0

我有一个气球,当它悬停时,会展开n消失(一个类似弹出的动画)。这是我用CSS做的,但是当光标移动时,气球就会返回。我希望气球永远消失,直到我刷新页面,所以我猜它需要onclick,但该选择器在CSS中不可用。

下面是我在CSS中拥有的内容

代码语言:javascript
复制
@keyframes pop
{
    from{
        opacity:1;
        transform: translateZ(0) scale(1,1);
    }

    to{
        opacity:0;
        transform: translateZ(0) scale(1.5,1.5);
    }
}

.balloon:hover
{
    animation: pop 0.5s cubic-bezier(0.16, 0.87, 0.48, 0.99) forwards;
}

我看到了另一个问题,最接近的问题是:active,但它需要按住鼠标。如果我希望它是onclick,我需要使用Javascript。但我不知道我需要写什么才能触发动画。

还有没有可能,当我弹出1个气球时,所有其他的气球也会自动弹出,中间会有1秒的延迟?(有5个气球)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-12 18:53:23

您可以使用classList在JS中添加和删除动画的类。

添加:

代码语言:javascript
复制
object.classList.add('balloon');

删除:

代码语言:javascript
复制
object.classList.remove('balloon');

工作示例:

​

代码语言:javascript
复制
const add = () => {
  document.getElementById('balloon').classList.add('animation')
}

const remove = () => {
  document.getElementById('balloon').classList.remove('animation')
}
代码语言:javascript
复制
@keyframes pop {
  from {
    opacity: 1;
    transform: translateZ(0) scale(1, 1);
  }
  to {
    opacity: 0;
    transform: translateZ(0) scale(1.5, 1.5);
  }
}

.animation {
  animation: pop 0.5s cubic-bezier(0.16, 0.87, 0.48, 0.99) forwards;
}

.balloon {
  height: 125px;
  width: 110px;
  background-color: #FF6B6B;
  border-radius: 50%;
}

.controls{
  position: absolute;
  bottom: 10px;
  right: 10px;
}
代码语言:javascript
复制
<div id="balloon" class="balloon" onmouseover="add()"></div>
<div class="controls">
  <button onClick="add()">Hide</button>
  <button onClick="remove()">Show</button>
</div>

​

票数 1
EN

Stack Overflow用户

发布于 2020-04-12 20:09:27

这是一个解决方案,它使气球一个接一个地隐藏,其间有.5s间隔

​

代码语言:javascript
复制
var balloons = document.getElementsByClassName('balloon');
[...balloons].forEach( (e, i)=>{
  e.onmouseover = function() {
    this.classList.add('hidden');
    setTimeout(hideAll, 500, balloons);
    }
});
function hideAll(arg){
    [...arg].forEach( (e, i)=>{
      if ( ! e.classList.contains('hidden') ) {
        e.style.animationDelay = i+'s';
        e.classList.add('hidden');
      }
    });
}
代码语言:javascript
复制
@keyframes pop
{
    from{
        opacity:1;
        transform: translateZ(0) scale(1,1);
    }

    to{
        opacity:0;
        transform: translateZ(0) scale(1.5,1.5);
    }
}

.balloon.hidden
{
    animation: pop .5s cubic-bezier(0.16, 0.87, 0.48, 0.99) forwards;
}
代码语言:javascript
复制
<div class="balloon">Balloon</div>
<div class="balloon">Balloon</div>
<div class="balloon">Balloon</div>
<div class="balloon">Balloon</div>
<div class="balloon">Balloon</div>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61170262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档