我正在尝试使用jQuery扩展我的搜索栏。 我也想隐藏导航链接。
我有一些像这样的jQuery代码。这个代码在焦点时工作正常。
$(".searchBox input").focus(function(){
$("#navlinks").css('display','none');
$(this).css({'width':'200px','-moz-transition':'width 0.5s ease-out','-webkit-transition':'width 0.5s ease-out','transition':'width 0.5s ease-out'});
});
$(".searchBox input").focus(function(){
$(this).css({'width':'100px','-moz-transition':'width 0.5s ease-out','-webkit-transition':'width 0.5s ease-out','transition':'width 0.5s ease-out'});
$("#navlinks").css('display','block');
});
第二个功能也可以正常except it display the content before animation complete.
所以我希望$("#navlinks").css('display','block');
仅在动画完成后才能被激活。
谁能告诉我怎么样?
由于
答案 0 :(得分:13)
.css()没有回调函数,但.animate()却有。只需将时间设置为0并使用动画。
$(".searchBox input").on('focus',function(){
$(this).animate({width:100,mozTransition:'width 500ms ease-out',webkitTransition:'width 500ms ease-out',transition:'width 500ms ease-out'},0,function(){
$("#navlinks")
.delay(500)
.css({display:'block'});
});
});
编辑:包含延迟,这是必需的。 (谢谢eicto)
答案 1 :(得分:5)
既然你知道动画需要多长时间,为什么CSS更改后不使用setTimeout()? 据我所知,你的动画需要大约0.5秒。您可以在动画结束时无缝地执行“回调”,指定相同的时间量(以毫秒为单位)。
$(".searchBox input").focus(function(){
$(this).css({'width':'100px','-moz-transition':'width 0.5s ease-out','-webkit-transition':'width 0.5s ease-out','transition':'width 0.5s ease-out'});
setTimeout( function() {
$("#navlinks").css('display','block');
}, 500);
});
答案 2 :(得分:3)
我建议使用.animate()
之类的
$(".searchBox input").focus(function(){
$(this).animate({
'width': '100px'
}, 500, function() {
$("#navlinks").css('display', 'block');
});
});
这适用于所有浏览器,并且navlinks命令将在动画完成后开始保证。注意:500
是动画完成所需的毫秒数,因此您可以相应地进行调整。
以下是.animate()
文档:
http://api.jquery.com/animate/
答案 3 :(得分:1)
我来到这里,但是我使用了另一种解决方案:
$('.something').one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",
function(event) {
// Do something when the transition ends
});
如您所见,过渡结束后,此操作正在执行。
这在这里描述: http://blog.teamtreehouse.com/using-jquery-to-detect-when-css3-animations-and-transitions-end
问候,
拉斯
答案 4 :(得分:-1)
Here
transitionend
事件,让我们试试:
CSS:
#test {
width: 100px;
border: 1px solid black;
-webkit-transition: all 1s;
-moz-transition all 1s;
transition all 1s;
}
#test.wide {
width: 200px;
}
JS:
var test = $('#test');
test.bind('transitionend webkitTransitionEnd oTransitionEnd', function () {
$('body').append('<div>END!</div>');
})
$('button').click(function () {
test.toggleClass('wide');
});