0

我已经为此工作了几个小时,并且不确定还能做什么。我有 5 张图像要在屏幕上旋转。如果您向下单击文本,图像将移动到正确的位置。但是,如果我再次单击它,图像会朝随机方向发射。我的问题是,我的代码有什么问题。或者更好的是,我做错了吗?有没有更简单的方法可以做到这一点,我看不到。我创建了一个工作 jsfiddle 示例http://jsfiddle.net/2uPJP/13/

相关js代码...

function convert () {

  var $hide1 = $(".hide1");

  var $hide2 = $(".hide2");

  var $hide3 = $(".hide3");

  var $hide4 = $(".hide4");

  var $hide5 = $(".hide5");

  $hide1.removeClass().addClass("hide2");

  $hide2.removeClass().addClass("hide3");

  $hide3.removeClass().addClass("hide4");

  $hide4.removeClass().addClass("hide5");

  $hide5.removeClass().addClass("hide1");

}

$(document).ready(function() {

  $('.hide1').animate({
    top: '+=100',
    right: '+=100'  
  }, 1500);  

  $('.hide5').animate({
    bottom: '+=100',
    right: '+=100'   
  }, 1500);  


$('.down').click(function() {

  $('.hide1').animate({
    left: '+=100'  
  }, 1500);  

  $('.hide2').animate({
    top: '+=100'  
  }, 1500);  

  $('.hide3').animate({
    top: '+=100'  
  }, 1500);  

  $('.hide4').animate({
    right: '+=100'  
  }, 1500);  

  $('.hide5').animate({
    bottom: '+=200'  
  }, 1500);  

  setTimeout(convert, 1501);

});
});
4

2 回答 2

1

请看这个http://jsfiddle.net/2uPJP/16/,注意动画队列。在 1500 内单击两次时,您将动画附加到错误的项目动画队列

function convert() {
            var $hide1 = $(".hide1");

            var $hide2 = $(".hide2");

            var $hide3 = $(".hide3");

            var $hide4 = $(".hide4");

            var $hide5 = $(".hide5");

            $hide1.removeClass("hide1").addClass("hide2");

            $hide2.removeClass("hide2").addClass("hide3");

            $hide3.removeClass("hide3").addClass("hide4");

            $hide4.removeClass("hide4").addClass("hide5");

            $hide5.removeClass("hide5").addClass("hide1");

        }
        $(document).ready(function () {

            $('.hide1').animate({
                top: '+=100',
                left: '-=100'
            }, 1500);

            $('.hide5').animate({
                top: '-=100',
                left: '-=100'
            }, 1500);


            $('.down').click(function () {
                convert()
                $('.hide2').animate({
                    left: '+=100'
                }, 1500);

                $('.hide3').animate({
                    top: '+=100'
                }, 1500);

                $('.hide4').animate({
                    top: '+=100'
                }, 1500);

                $('.hide5').animate({
                    left: '-=100'
                }, 1500);

                $('.hide1').animate({
                    top: '-=200'
                }, 1500);
            });

        });
于 2012-11-22T02:35:42.273 回答
1

top我将通过基于相同参考(例如和)设置所有位置来以完全不同的方式处理此问题right。然后,我将旋转包含动画位置的数组,以及速度和延迟等选项,并使用单个动画函数来移动每个图像。

var positions = [ /*[ top,right]*/
     [100, 100], [100, 0], [200, 0], [300, 0], [300, 100]
 ];

var animOpts=[/* delay, speed*/
    [300,1500],[0,1500],[0,1500],[300,1500],[0,2000]
  ]


var $fish;

$(document).ready(function() {

    $fish = $('.span2 img');
    /* move 1st and 5th on page load */
    fishAnim(0);
    fishAnim(4);

    $('.down').click(function() {
        rotateAllfish();
    });

});

function shuffleArray( arr){ 
    /* move element in first position to end of array */
    arr.push( arr.shift());
}

function rotateAllfish() {    
    shuffleArray( positions );

    $fish.each(function(fishIndex) {
        fishAnim(fishIndex, true)
    });

     shuffleArray(animOpts);

}

function fishAnim(fishIndex, addDelay) {
    var delay= addDelay ? animOpts[fishIndex][0] : 0;
    $fish.eq(fishIndex).delay( delay ).animate({
        top: positions[fishIndex][0],
        right: positions[fishIndex][1]
    }, animOpts[fishIndex][1]);
}

演示:http: //jsfiddle.net/2uPJP/19/

演示仅是手动模式

于 2012-11-22T03:14:06.293 回答