javascript - 计算在 HTML5 canvas 径向进度条中点击的百分比

标签 javascript jquery html canvas

我创建了一个这样的循环进度条

enter image description here

我可以通过使用 java 脚本发送它来加载一定百分比,但我不知道如何计算用户点击圆圈的黑色/绿色部分时点击的百分比。

如何计算百分比?

请解释你的答案。

最佳答案

这是将点击 Angular 转换为百分比的一种方法:

  • 使用 Math.atan2 计算鼠标相对于中心点的 Angular 。

  • 将该 Angular 归一化到 0-PI*2 弧度内:(angle+PI*2)%(PI*2)

  • 计算该 Angular 占整圆的百分比:normalizedAngle/(PI*2)

  • 这是你的百分比!

图示:注意0%在圆的3点钟位置

enter image description here enter image description here

示例代码和演示:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var cw = canvas.width;
var ch = canvas.height;
var $canvas = $("#canvas");
var canvasOffset = $canvas.offset();
var offsetX = canvasOffset.left;
var offsetY = canvasOffset.top;
var scrollX = $canvas.scrollLeft();
var scrollY = $canvas.scrollTop();

var isDown = false;
var startX;
var startY;

var cx = 150;
var cy = 150;
var radius = 75;
var PI = Math.PI;
var PI2 = PI * 2;

ctx.lineWidth = 15;
ctx.font = '24px verdana';

draw(50, 50);

function draw(x, y) {

  var dx = x - cx;
  var dy = y - cy;
  var endAngle = (Math.atan2(dy, dx) + PI2) % PI2;
  var pct = parseInt(endAngle / PI2 * 100);

  ctx.clearRect(0, 0, cw, ch);

  ctx.beginPath();
  ctx.arc(cx, cy, radius, 0, PI2);
  ctx.closePath();
  ctx.strokeStyle = 'black';
  ctx.stroke();

  ctx.beginPath();
  ctx.arc(cx, cy, radius, 0, endAngle);
  ctx.strokeStyle = 'forestgreen';
  ctx.stroke();

  ctx.fillText(pct + '%', cx - 15, cy + 8);

}



function handleMouseDown(e) {
  e.preventDefault();
  e.stopPropagation();

  mX = parseInt(e.clientX - offsetX);
  mY = parseInt(e.clientY - offsetY);

  draw(mX, mY);

}

$("#canvas").mousedown(function(e) {
  handleMouseDown(e);
});
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Click on the canvas to set a percentage.</h4>
<canvas id="canvas" width=300 height=300></canvas>

关于javascript - 计算在 HTML5 canvas 径向进度条中点击的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151695/

相关文章:

javascript - jQuery .click() .show() 函数问题

javascript - 模拟 Webkit 的元素检查器

jquery - .click 只能与 .css 一起使用一次

javascript - anchor 击并保持页面位置?

javascript - 在 setInterval 函数内部使用时,Jquery 延迟不一致

javascript - 在 Javascript 中引用 Go 数组

javascript - 如何在 javascript 中识别 Safari 版本?

html - Z 索引/显示问题

html - 侧边栏不工作

javascript - 如何在 Canvas 上的所有其他内容后面绘制图像?