淡出动画后删除div - javascript
问题描述:
我想从动画中删除一个动画完成后的动画,但目前看起来像在动画第一次迭代之后发生删除动作。淡出动画后删除div - javascript
function $(el) { return document.getElementById(el); }
var divFirst = $('first');
if(divFirst)
divFirst.addEventListener("click", addSecond);
function removeSecond()
{
fadeOut();
var child = $('second');
console.log("remove called");
child.remove();
}
function addSecond()
{
console.log("addSecond called");
var aContainer = document.createElement('div');
aContainer.setAttribute('id', 'second');
aContainer.innerHTML = "Second";
aContainer.addEventListener("click", removeSecond);
document.body.appendChild(aContainer);
fadeIn();
}
function fadeIn()
{
var secondDiv = $('second');
if(secondDiv)
{
secondDiv.style.opacity ? secondDiv.style.opacity :
secondDiv.style.opacity = "0.0";
if(parseFloat(secondDiv.style.opacity) <= 1)
{
secondDiv.style.opacity = parseFloat(secondDiv.style.opacity) + 0.05;
setTimeout(fadeIn, 50);
}
}
}
function fadeOut()
{
var secondDiv = $('second');
if(secondDiv)
{
console.log(secondDiv.style.opacity);
if(parseFloat(secondDiv.style.opacity) >0)
{
secondDiv.style.opacity = parseFloat(secondDiv.style.opacity) - 0.05;
setTimeout(fadeOut, 50);
}
}
}
这里的jsfiddle:http://jsfiddle.net/ny85ckk2/ 如果我删除child.remove()调用,动画持续到年底。 有什么想法?
非常感谢
答
你fadeOut
是异步操作。当你调用它时,开始淡入淡出,但随后淡出继续并以异步方式完成,因为您使用的是setTimeout
。所以你的代码在callilng fadeOut
之后运行。
要完成时删除元素,删除该代码并在完成时,而不是删除的元素在fadeOut
:
function fadeOut()
{
var secondDiv = $('second');
if(secondDiv)
{
console.log(secondDiv.style.opacity);
if(parseFloat(secondDiv.style.opacity) >0)
{
secondDiv.style.opacity = parseFloat(secondDiv.style.opacity) - 0.05;
setTimeout(fadeOut, 50);
}
else // Added
{ // Added
secondDiv.remove(); // Added
} // Added
}
}
或者,如果你想要更多的灵活性,完成和删除元素的时候有fadeOut
调用回调回调;我们通过从分离出褪色的实际工作出发它:
function fadeOut(callback)
{
var secondDiv = $('second');
if (secondDiv)
{
doFade();
}
function doFade() {
if(parseFloat(secondDiv.style.opacity) >0)
{
secondDiv.style.opacity = parseFloat(secondDiv.style.opacity) - 0.05;
setTimeout(doFade, 50);
}
else if (callback)
{
callback(secondDiv);
}
}
}
用法:
function removeSecond()
{
fadeOut(function(div) {
div.remove();
});
}
我常清洁解决方案的粉丝,所以第二个选项对我来说是最好的选择,但它仍然不起作用 http://jsfiddle.net/ny85ckk2/1/ 我明白这个主意,但回调仍然没有被调用:/ – CKY 2014-11-22 12:34:25
@CKY:我错了sed那个'fadeOut'自称(我不知道*我怎么错过了,但是...)。所以问题在于最终到达'0'的调用没有'callback'参数。我已经修复它。 – 2014-11-22 13:48:01
谢谢,现在更清晰:) – CKY 2014-11-22 15:22:59