- 43
- 0
问题:
我遇到了一个非常奇怪的问题,在electron下我想用animate.css做一个顶部通知弹出的动画效果,用的是fadeInDown,在用addClass添加动画之后,我发现只要先添加的动画还没有执行完,此时给另一个新的通知div添加动画的css class,这两个div的动画都会播放一次,而且之前那个div的animationend不会触发。
代码:
var infobar_id = 0;
//显示Infobar
function displayInfobar(type, text, timeout = 3000) {
var html = "";
switch (type) {
case 'success':
html += '<div class="infobar infobar-success" id="infobar_' + infobar_id + '"><i class="fa fa-check"></i><span>';
html += text;
html += '</span></div>';
infobar_container.innerHTML += html;
break;
case 'warning':
html += '<div class="infobar infobar-warning" id="infobar_' + infobar_id + '"><i class="fa fa-warning"></i><span>';
html += text;
html += '</span></div>';
infobar_container.innerHTML += html;
break;
case 'error':
html += '<div class="infobar infobar-error" id="infobar_' + infobar_id + '"><i class="fa fa-warning"></i><span>';
html += text;
html += '</span></div>';
infobar_container.innerHTML += html;
break;
case 'info':
default:
html += '<div class="infobar infobar-info" id="infobar_' + infobar_id + '"><i class="fa fa-info-circle"></i><span>';
html += text;
html += '</span></div>';
infobar_container.innerHTML += html;
break;
}
//animate
//timeout > 0则自动关闭,否则需要用户手动关闭
if (timeout > 0) {
//用t中转
var t = infobar_id;
$('#infobar_' + t).animateCss('fadeInDown', function () {
setTimeout(function () {
$('#infobar_' + t).animateCss('fadeOutUp', function(){
$('#infobar_'+t).remove();
});
}, timeout);
});
} else {
$('#infobar_' + infobar_id).animateCss('fadeInDown');
}
infobar_id++;
}
如果同时存在多个infobar,最后container里是这样的:
<div class="container-infobar">
<div class="infobar infobar-success animated fadeInDown" id="infobar_0"><i class="fa fa-check"></i><span>删除成功</span></div>
<div class="infobar infobar-success animated fadeOutUp" id="infobar_1"><i class="fa fa-check"></i><span>删除成功</span></div>
</div>
始终会有一部分infobar不能自动关闭,animationend也不能正常触发。
$.fn.extend({
animateCss: function (animationName, callback) {
var animationEnd = (function (el) {
var animations = {
animation: 'animationend',
OAnimation: 'oAnimationEnd',
MozAnimation: 'mozAnimationEnd',
WebkitAnimation: 'webkitAnimationEnd',
};
for (var t in animations) {
if (el.style[t] !== undefined) {
return animations[t];
}
}
})(document.createElement('div'));
console.log(this);
this.addClass('animated ' + animationName).one(animationEnd, function () {
$(this).removeClass('animated ' + animationName);
console.log(this);
if (typeof callback === 'function') callback();
});
return this;
},
});
animateCss方法是这么写的。
难道一个页面上同样的CSS动画只能播放一个?我是否有必要改成JS动画来实现相应的效果
- 共 0 条
- 全部回答
-
梦想在前方 普通会员 1楼
在jQuery中,我们可以使用addClass和removeClass方法给元素添加和移除类。如果一个元素已经被addClass了某个类,那么我们再给它这个类时,它就不会再添加新的类。相反,如果我们给一个元素移除了某个类,那么我们再给它这个类时,它就会添加新的类。
如果你想要给一个div添加一个CSS动画,你可以使用addClass方法给它添加动画类,然后在动画结束后使用removeClass方法移除动画类。但是,动画的结束条件可能并不是你想要的,比如动画的结束条件是animationend触发。在这种情况下,你需要在动画的end条件之前调用动画的结束方法,然后在动画结束后再移除动画类。
以下是一个简单的示例:
```javascript // 获取div元素 var div = document.getElementById('myDiv');
// 给div添加动画类 divaddClass('myAnimation');
// 在动画结束之前调用动画的结束方法 div animationEnd();
// 在动画结束后移除动画类 div.removeClass('myAnimation'); ```
在这个示例中,我们首先获取了div元素,然后使用addClass方法给它添加了一个名为'myAnimation'的动画类。然后,我们在动画的end条件之前调用了动画的结束方法。最后,我们在动画结束后移除了动画类。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
