让图片直线移动到鼠标点击位置,类似游戏里的人物走动!

 
  1. <body onclick="moveImg(event);">
  2. <div style="position:absolute;left:0px;top:0px;" id="img"><img src="img.gif"></div>
  3. </body>
  4. <script>
  5.     var img=document.getElementById("img");
  6.     var time=5;//时间,单位毫秒
  7.     var speed=2;//(speed/time)速度,单位象素,起点到终点的直线速度
  8.     var moveObj=null;
  9.     function moveImg(event){
  10.         var eventevent=event||window.event;
  11.         if(moveObj!=null){
  12.             window.clearInterval(moveObj);
  13.             moveObj=null;
  14.         }
  15.         var imgX=parseInt(img.style.left);
  16.         var imgY=parseInt(img.style.top);
  17.         var moveX=event.clientX;
  18.         var moveY=event.clientY;
  19.         var x=moveX-imgX;
  20.         var y=moveY-imgY;
  21.         //计算速度基数
  22.         var speedspeedNum=speed/Math.sqrt(x*x+y*y);
  23.         //计算X轴速度
  24.         var speedX=speedNum*x;
  25.         //计算Y轴速度
  26.         var speedY=speedNum*y;        
  27.         //alert(speedX+":"+speedY);
  28.         //移动图片
  29.         moveObj=window.setInterval(function(){moveImage(speedX,speedY,moveX,moveY);},time);
  30.     }
  31.     var mx=0;my=0;
  32.     function moveImage(x,y,endX,endY){
  33.         //由于网页上left属性改变量小于1的时候,按1改变,所以计算出当移动量大于1时才改变left属性
  34.         mxmx=mx+x;
  35.         var m=Math.floor(mx);
  36.         if(m<0){
  37.             m++;
  38.         }
  39.         if(m>=1 || m<=-1){
  40.             img.style.left=(parseInt(img.style.left)+m)+"px";
  41.             mxmx=mx-m;
  42.         }
  43.         //由于网页上top属性改变量小于1的时候,按1改变,所以计算出当移动量大于1时才改变top属性
  44.         mymy=my+y;
  45.         var n=Math.floor(my);
  46.         if(n<0){
  47.             n++;
  48.         }
  49.         if(n>=1 || n<=-1){
  50.             img.style.top=(parseInt(img.style.top)+n)+"px";
  51.             mymy=my-n;
  52.         }
  53.         //当移动到指定位置时停止移动
  54.         var xflag=false;
  55.         var yflag=false;
  56.         if(x>=0){
  57.             if(parseInt(img.style.left)>=endX){
  58.                 xflag=true;
  59.             }
  60.         }else{
  61.             if(parseInt(img.style.left)<=endX){
  62.                 xflag=true;
  63.             }
  64.         }
  65.         if(y>=0){
  66.             if(parseInt(img.style.top)>=endY){
  67.                 yflag=true;
  68.             }
  69.         }else{
  70.             if(parseInt(img.style.top)<=endY){
  71.                 yflag=true;
  72.             }
  73.         }
  74.         if(xflag && yflag){
  75.             window.clearInterval(moveObj);
  76.             moveObj=null;
  77.         }
  78.     }
  79. </script>


http://blog.csdn.net/lip009/archive/2007/11/15/1887357.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值