我相信你正在寻找这样的东西:
draw(0);
$('#range').on('change', function(){
    range = parseInt($(this).val());
    draw(range)
})
function draw(val){
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d'),
    x = 100,
    y = 50,
    d;
    context.clearRect(0, 0, canvas.width, canvas.height);
    d = Math.sqrt(Math.pow(val,2) + Math.pow(50,2));
    context.beginPath();
    context.lineWidth = 1;
    context.arc(x,y+val,d,0,2*Math.PI);
    // line color
    context.strokeStyle = 'black';
    context.stroke();
    // Cut off the top of the circle.
    context.clearRect(0, 0, canvas.width, y);
    // This stuff's just to show some dots
    context.fillStyle = 'red';
    context.fillRect(x-1,y-1,2,2); // Middle
    context.fillRect(x-52,y-2,4,4);//Target point 1
    context.fillRect(x+48,y-2,4,4);// Target point 2
    context.fillRect(x-2,y+d+val-2,4,4); // Point on circle
    context.fillStyle = 'black';
}
工作样本
这样做有几个缺点,它越靠近圆越“慢”,因为圆在隐藏部分呈指数级增长(滑块控制它的大小),并且它不适用于对角线就像现在一样。
除此之外,它按预期工作。