canvas繪製滑鼠懸浮可以變大的立體小球

admin發表於2017-02-24

分享一段程式碼例項,它利用canvas繪製了立體小球效果。

當滑鼠懸浮的時候,小球救護變大,程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
* {
  margin: 0;
  padding: 0;
}
body, html {
  width: 100%;
  height: 100%;
  overflow: hidden;
}
</style>
<script type="text/javascript">
var CW = document.documentElement.clientWidth;
var CH = document.documentElement.clientHeight;
window.onload = function() {
  var oC = document.getElementById('cvs');
  oC.width = CW;
  oC.height = CH;
  var ctx = oC.getContext('2d');
 
  function Circle(cx, cy, radius) {
    this.cx = cx;
    this.cy = cy;
    this.radius = radius;
  };
 
  Function.prototype.bindMethod = function(k, v) {
    return this.prototype[k] = v, this;
  };
 
  Circle.bindMethod('draw', function(ctx) {
    //設定畫圖透明度0.7
    ctx.globalAlpha = 0.7;
 
    //開啟路徑
    ctx.beginPath();
 
    //畫0到2*PI的圓弧,也就是一個圓
    ctx.arc(this.cx, this.cy, this.radius, 0, 2 * Math.PI);
 
    //設定陰影
    ctx.shadowOffsetX = 1;
    ctx.shadowOffsetY = 5;
    ctx.shadowBlur = 10;
    ctx.shadowColor = 'rgba(0,0,0,0.5)';
 
    //填充漸變設定
    var rgd = ctx.createRadialGradient(85, 85, 5, 100, 100, 70);
    rgd.addColorStop(0, 'rgb(125,255,229)');
    rgd.addColorStop(1, 'rgb(78,180,215)');
    ctx.fillStyle = rgd;
 
    //這裡陰影和漸變就先用靜態值,之後是準備變成物件屬性控制。
 
    //填充
    ctx.fill();
 
    //關閉路徑
    ctx.closePath();
  });
 
  //畫一個圓
  var circle1 = new Circle(100, 100, 50);
  circle1.draw(ctx);
 
 
  //滑鼠移動事件
  oC.onmousemove = function(ev) {
    // 如果點和圓心距離小於或等於半徑則認為發生碰撞
    if (Math.sqrt(Math.pow(ev.pageX - 100, 2) + Math.pow(ev.pageY - 100, 2)) <= 50) {
      clearInterval(timer);
      var timer = setInterval(function() {
        ctx.clearRect(0, 0, oC.width, oC.height); //清除整個畫布上所有的圖形
        if (circle1.radius >= 60) {
          clearInterval(timer);
        } else {
          circle1.radius += 1;
        };
        circle1.draw(ctx);
      }, 16);
 
    } else {
      clearInterval(timer);
      var timer = setInterval(function() {
        ctx.clearRect(0, 0, oC.width, oC.height);
        if (circle1.radius <= 50) {
          clearInterval(timer);
        } else {
          circle1.radius -= 1;
        };
        circle1.draw(ctx);
      }, 16);
    }
  };
};
</script>
</head>
<body>
<canvas id="cvs"></canvas>
</body>
</html>

相關文章