简体   繁体   中英

How to get a picture randomly move and turn towards the changing direction around a page? (using jQuery & css)

I made a butterfly picture randomly move around a page, simulate a real butterfly.

$(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;
}

but I don't know how to change direction(rotation angle) to where it move towards.maybe I should calculate the angle between the old and new point. then use this plugin to rotate angle?

Could anyone help to modify the code?

Thanks!在此处输入图片说明

To calculate new angle in degree you can use following function:

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
}

after that you can use

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

for FF and Chrome or JS for all browsers

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM