html5 鼠标跟随运动

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="utils.js"></script>
    <script type="text/javascript" src="ball.js"></script>
    <style type="text/css">
        body{background-color: silver;}
        #canvas{background-color: white;}
    </style>
</head>
<body>
    <canvas id="canvas" width="400" height="400"></canvas>
    <script type="text/javascript">
        window.onload=function(){
            var canvas=document.getElementById("canvas"),
                context=canvas.getContext("2d"),
                mouse=utils.captureMouse(canvas),
                arrow=new Ball(),
                speed=3;
            (function drawScreen(){
                window.requestAnimationFrame(drawScreen,canvas);
                context.clearRect(0,0,canvas.width,canvas.height);
                var dx=mouse.x-arrow.x,
                    dy=mouse.y-arrow.y,
                    angle=Math.atan2(dy,dx),
                    vx=Math.cos(angle)*speed,
                    vy=Math.sin(angle)*speed;
                arrow.rotation=angle;
                arrow.x+=vx;
                arrow.y+=vy;
                arrow.draw(context);
            }())
        }
    </script>
</body>
</html>
function Arrow(){
    this.x=0;
    this.y=0;
    this.color='#ffff00';
    this.rotation=0;
}
Arrow.prototype.draw=function(context){
    context.save();
    context.translate(this.x,this.y);
    context.rotate(this.rotation);
    context.lineWidth=2;
    context.fillStyle=this.color;
    context.beginPath();
    context.moveTo(-50,-25);
    context.lineTo(0,-25);
    context.lineTo(0,-50);
    context.lineTo(50,0);
    context.lineTo(0,50);
    context.lineTo(0,25);
    context.lineTo(-50,25);
    context.lineTo(-50,-25);
    context.closePath();
    context.fill();
    context.stroke();
    context.restore();
}
function Ball(radius,color){
    if (radius===undefined) {
        radius=40;
    }
    if (color===undefined) {
        color="#ff0000";
    }
    this.x=0;
    this.y=0;
    this.radius=radius;
    this.rotation=0;
    this.scaleX=1;
    this.scaleY=1;
    this.color=utils.parseColor(color);
    this.lineWidth=1;
}
Ball.prototype.draw=function(context){
    context.save();
    context.translate(this.x,this.y);
    context.rotate(this.rotation);
    context.scale(this.scaleX,this.scaleY);
    context.lineWidth=this.lineWidth;
    context.fillStyle=this.color;
    context.beginPath();
    context.arc(0,0,this.radius,0,(Math.PI*2),true);
    context.closePath();
    context.fill();
    if(this.lineWidth>0){
        context.stroke();
    }
    context.restore();
}
if (!window.requestAnimationFrame) {
  window.requestAnimationFrame = (window.webkitRequestAnimationFrame ||
                                  window.mozRequestAnimationFrame ||
                                  window.msRequestAnimationFrame ||
                                  window.oRequestAnimationFrame ||
                                  function (callback) {
                                    return window.setTimeout(callback, 17 /*~ 1000/60*/);
                                  });
}


if (!window.cancelAnimationFrame) {
  window.cancelAnimationFrame = (window.cancelRequestAnimationFrame ||
                                 window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame ||
                                 window.mozCancelAnimationFrame || window.mozCancelRequestAnimationFrame ||
                                 window.msCancelAnimationFrame || window.msCancelRequestAnimationFrame ||
                                 window.oCancelAnimationFrame || window.oCancelRequestAnimationFrame ||
                                 window.clearTimeout);
}


window.utils = {};


window.utils.captureMouse = function (element) {
  var mouse = {x: 0, y: 0, event: null},
      body_scrollLeft = document.body.scrollLeft,
      element_scrollLeft = document.documentElement.scrollLeft,
      body_scrollTop = document.body.scrollTop,
      element_scrollTop = document.documentElement.scrollTop,
      offsetLeft = element.offsetLeft,
      offsetTop = element.offsetTop;
  
  element.addEventListener('mousemove', function (event) {
    var x, y;
    
    if (event.pageX || event.pageY) {
      x = event.pageX;
      y = event.pageY;
    } else {
      x = event.clientX + body_scrollLeft + element_scrollLeft;
      y = event.clientY + body_scrollTop + element_scrollTop;
    }
    x -= offsetLeft;
    y -= offsetTop;
    
    mouse.x = x;
    mouse.y = y;
    mouse.event = event;
  }, false);
  
  return mouse;
};

 

转载于:https://www.cnblogs.com/wangwenfei/p/html5_follow_mouse.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值