目前,我有一个简单的圆形徽标,当某些ajax功能出现时,我还要确保该div旋转360度。

它确实可以按我的要求工作,但是它仅在触发功能后发生一次,然后我必须重新加载页面才能使其再次工作。

每当函数spin_logo()触发动作时,如何使旋转工作?

旋转功能

function spin_logo(){

    var n = 360;
    $('.logo').css({
        transform:'rotate('+n+'deg)',
        '-ms-transform':'rotate('+n+'deg)',
        '-moz-transform':'rotate('+n+'deg)',
        '-o-transform':'rotate('+n+'deg)',
        transition: '1s linear',
        '-ms-transition':'1s linear',
        '-moz-transition':'1s linear',
        '-o-transition':'1s linear'
    });
    n+=360;

}


旋转使用案例

spin_logo()仅在成功函数之后出现。

$(document).on('click touchstart', '.publish', function(event){
    event.preventDefault();
    var $this = $(this);

        $.ajax({
             type: "POST",
             url: base_url + "post/publish",
             dataType: "text",
             data: {
                title: $('.title').html(),
                sub: $('.sub-title').html(),
                txt: $('.editor').html(),
                cat_str: $('#cat-drop').val(),
                str: window.location.pathname.split('/').pop()
             },
             cache:false,
             success:
              function(data){
                spin_logo();
                $('.response-info').slideToggle(500);
                $('.response-info').html(data).fadeIn(500);
                setTimeout(function(){
                    $('.response-info').slideToggle(1000);
                }, 10000);
            }

         });

    return false;
});


提前致谢。

最佳答案

这里的问题是“旋转(360度)”与“旋转(720度)”相同。浏览器采用度数为360的度数,因此,在第一次转换后,transform属性完全不变,并且什么也没有发生。

完成动画后,必须删除变换。您可以使用transitionEnd事件来实现。您可以在这里看到它的工作:http://jsfiddle.net/8rXMw

  var $logo = $('.logo');
  $logo.on('transitionend', function() {
     $logo.removeClass('rotated');
  });

  $('#button').on('click', function() {
    $logo.addClass('rotated');
  });


该代码的作用是将旋转后的类添加到div中,其中包含变换和动画。过渡完成后,会触发transitionEnd并删除该类。这样,div将返回到rotate(0),但没有过渡。再次单击该按钮时,将重复相同的过程。

请注意,某些浏览器的前缀支持'transitionEnd'。

10-06 04:55