如何让图片随机移动并转向页面周围的变化方向? (使用jQuery和css)

时间:2012-11-14 08:37:33

标签: javascript jquery css animation

我做了一张蝴蝶图片随机移动一页,模拟一只真正的蝴蝶。

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

function makeNewPosition(){
    // Get viewport dimensions (remove the dimension of the div)
    var h = $(window).height() - 50;
    var w = $(window).width() - 50;
    var nh = Math.floor(Math.random() * h);
    var nw = Math.floor(Math.random() * w);
    return [nh,nw];
}

function animateIMG(){
    var newq = makeNewPosition();
    var oldq = $('img').offset();
    var speed = calcSpeed([oldq.top, oldq.left], newq);
    $('img').animate({ top: newq[0], left: newq[1] }, speed, function(){
      animateIMG();        
    });
};

function calcSpeed(prev, next) {
    var x = Math.abs(prev[1] - next[1]);
    var y = Math.abs(prev[0] - next[0]);
    var greatest = x > y ? x : y;
    var speedModifier = 0.1;// control the speed here 
    var speed = Math.ceil(greatest/speedModifier);
    return speed;
}

但我不知道如何改变方向(旋转角度)到它移动的位置。可能我应该计算新旧点之间的角度。然后使用this plugin旋转角度?

有人可以帮忙修改代码吗?

谢谢! enter image description here

1 个答案:

答案 0 :(得分:2)

要计算度数的新角度,您可以使用以下功能:

function getNewAngle(prev, next){
   var x = prev[1] - next[1];
   var y = prev[0] - next[0];
   var ang = Math.atan(Math.abs(y)/Math.abs(x))/(Math.PI/180)
   if(x>0&&y>0)
   return ang;
   else if(x<0&&y>0)
   return ang+90;
   else if(x>0&&y<0)
   return ang-90;
   else
   return ang+180
}

之后你可以使用

-webkit-transform: rotate(angle);
-moz-transform: rotate(angle);

适用于所有浏览器的FF和Chrome或JS