javascript - 带有基于单击和拖动点填充的边界的圆形 Canvas ?

标签 javascript html canvas colors interactive

我对 javascript 非常陌生,很抱歉,如果这个想法没有使用正确的词汇,但是你们能帮助我的任何事情都会很棒!

有谁知道如何制作圆形 Canvas ,允许用户根据圆圈内的单击和拖动点来填充圆圈的一部分?

我想我可以制作一个圆形 Canvas 供他们着色,但我想这样做,这样他们就不必在圆圈上乱涂乱画来着色。

最佳答案

演示:http://jsfiddle.net/m1erickson/LVgwV/

您可以使用context.arc命令来绘制饼图楔形。

监听鼠标事件并在 mousedown 中设置楔形的起始 Angular :

    function handleMouseDown(e){
      e.preventDefault();
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);

      // Put your mousedown stuff here
      var dx=mouseX-cx;
      var dy=mouseY-cy;
      begin=Math.atan2(dy,dx);
      isDown=true;
    }

在 mousemove 中,您可以设置楔形的结束 Angular :

    function handleMouseMove(e){
      if(!isDown){return;}
      e.preventDefault();
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
      var dx=mouseX-cx;
      var dy=mouseY-cy;
      end=Math.atan2(dy,dx);
      draw();
    }

示例代码:

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>

<style>
    body{ background-color: ivory; }
    #canvas{border:1px solid red;}
</style>

<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    ctx.strokeStyle="lightgray";
    ctx.lineWidth=3;
    ctx.fillStyle="skyblue";

    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 begin,end;

    function draw(){
        ctx.clearRect(0,0,canvas.width,canvas.height);
        ctx.beginPath();
        ctx.moveTo(cx,cy);
        ctx.arc(cx,cy,75,begin,end);
        ctx.closePath();
        ctx.fill();
        ctx.stroke();
    }

    function handleMouseDown(e){
      e.preventDefault();
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);

      // Put your mousedown stuff here
      var dx=mouseX-cx;
      var dy=mouseY-cy;
      begin=Math.atan2(dy,dx);
      isDown=true;
    }

    function handleMouseUp(e){
      e.preventDefault();
      isDown=false;
    }

    function handleMouseOut(e){
      e.preventDefault();
      isDown=false;
    }

    function handleMouseMove(e){
      if(!isDown){return;}
      e.preventDefault();
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
      var dx=mouseX-cx;
      var dy=mouseY-cy;
      end=Math.atan2(dy,dx);
      draw();
    }

    $("#canvas").mousedown(function(e){handleMouseDown(e);});
    $("#canvas").mousemove(function(e){handleMouseMove(e);});
    $("#canvas").mouseup(function(e){handleMouseUp(e);});
    $("#canvas").mouseout(function(e){handleMouseOut(e);});



}); // end $(function(){});
</script>

</head>

<body>
    <h4>Drag on canvas to create pie-wedge.</h4>
    <canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

关于javascript - 带有基于单击和拖动点填充的边界的圆形 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921336/

相关文章:

javascript - JS 调整 div 大小

javascript - 将 li 元素中的文本居中并带有图片背景

javascript - 通过动画来更改 canvas js 变量

javascript - 当我重叠图像和 Canvas 时,我无法让它保持一致

javascript - 如何修复 Flot js 上的 xaxis 标签

javascript - Iphone 在点击时使 div 变暗

php - 混合 javascript、jQuery 和 PHP,换行符

javascript - react 的 map 上没有点击事件

javascript - 为什么我没有使用 ajax 从按钮获取动态值

html - CSS 背景属性