jQuery css回调函数

时间:2013-01-28 23:07:07

标签: javascript jquery css css-animations

我正在尝试使用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');仅在动画完成后才能被激活。

谁能告诉我怎么样?

由于

5 个答案:

答案 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');
});

DEMO