2017-09-08 42 views
1

我在通过jQuery发起转换时遇到了一些问题。
第一次转换完成后,我希望其他div淡入,但不透明度不会执行de过渡。它直接到opacity: 1;
我能解决与setTimeout,但我在想,如果有一个在我的代码有问题或东西转换结束后CSS转换没有触发

var endTransition = "transitionend"; 
 

 
$('#test').click(function() { 
 
    $(this).css('opacity', '0').one(endTransition, function() { 
 
    $('#test').css('display', 'none'); 
 
    $('#test2').css('display', 'inline-block').css('opacity', '1'); 
 
    }); 
 
}); 
 

 
$('#test2').click(function() { 
 
    $(this).css('opacity', '0').one(endTransition, function() { 
 
    $('#test2').css('display', 'none'); 
 
    $('#test').css('display', 'inline-block').css('opacity', '1'); 
 
    }); 
 
});
#test { 
 
    display: inline-block; 
 
    background: red; 
 
    opacity: 1; 
 
    width: 200px; 
 
    height: 200px; 
 
    transition: opacity .5s ease; 
 
} 
 

 
#test2 { 
 
    background: blue; 
 
    display: none; 
 
    opacity: 0; 
 
    width: 200px; 
 
    height: 200px; 
 
    transition: opacity .5s ease; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='test'></div> 
 
<div id='test2'></div>

+0

看来你的问题是你有'的.css( '显示', 'inline-block的')'你打电话之前'的CSS( '不透明度', '1')'。这就是你的元素因为css'display:inline-block'而立即显示的原因。 –

回答

0

试试这个:

var endTransition = "webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend"; 

$('#test').click(function() { 
    $(this).css('opacity',0).off().one(endTransition, function(e) { 
     // your callback 
    }); 
}); 
  • 使用更多浏览器特定的事件名称以实现跨浏览器兼容性。
  • 使用off()删除所有以前的事件绑定。
  • 编辑:看来你的问题是你有.css('display','inline-block')之前,你拨打.css('opacity','1')。这就是您的元素因为css display: inline-block而立即显示的原因。
2

一个相当简单和优雅的解决方案:

$('div').click(function() { 
 
    $(this).fadeOut(function() { 
 
    $('div').not(this).fadeIn().css("display","inline-block"); 
 
    }); 
 
});
#test { 
 
    display: inline-block; 
 
    background: red; 
 
    width: 200px; 
 
    height: 200px; 
 
} 
 

 
#test2 { 
 
    background: blue; 
 
    display: none; 
 
    width: 200px; 
 
    height: 200px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='test'></div> 
 
<div id='test2'></div>

+0

嗨。首先,感谢您的帮助。所以,我需要第二个div是'display:inline-block;',这对我来说是个大问题。有没有办法做到这一点? –

+0

顺便说一句,我试图让动画成为CSS转换。我正在构建一个web应用程序,所以我试图尽可能地创建流畅的动画,并且我注意到CSS转换比jQuery动画更流畅。 –

+0

制作div时显示“inline-block”是一个简单的修复 - 我将它添加到上面的代码片段中。至于CSS转换,'fadeIn()'和'fadeOut()'是最后使用'display:none'实现的CSS不透明转换,但是通过JavaScript通过jQuery控制。使用jQuery的ready函数可以让你的代码更简洁更整洁,这就是jQuery的全部功能。如果您不使用jQuery,则必须编写自己的函数来控制不透明度,问题是 - 它会比jQuery更快,更安全,更具跨浏览器兼容性吗?我说坚持尝试和测试的JS(在这种情况下,jQuery)。 – Aydin4ik