javascript - 如何使用 Html5 Canvas 找到三 Angular 形内的鼠标点

标签 javascript jquery canvas html5-canvas

Html5

<canvas id="myCanvas" width="578" height="200"></canvas>

JavaScript

var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');

context.beginPath();
context.moveTo(100, 50);
context.lineTo(50, 150);
context.lineTo(150, 150);
context.lineTo(100, 50);
context.stroke();

最佳答案

以下是如何测试三 Angular 形:

  • 您可以定义路径(就像定义三 Angular 形一样)

  • 监听mousemove事件并确定鼠标位置

  • 使用 context.isPointInPath(mouseX,mouseY) 测试鼠标是否位于定义的三 Angular 形内。

示例代码和演示:http://jsfiddle.net/m1erickson/XL93U/

<!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 context=canvas.getContext("2d");
    var $canvas=$("#canvas");
    var canvasOffset=$canvas.offset();
    var offsetX=canvasOffset.left;
    var offsetY=canvasOffset.top;

    context.beginPath();
    context.moveTo(100, 50);
    context.lineTo(50, 150);
    context.lineTo(150, 150);
    context.lineTo(100, 50);
    context.stroke();


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

      var inside=context.isPointInPath(mouseX,mouseY);
      var text=(inside)?"Inside":"Outside";
      $("#results").text(text);
    }

    $("#canvas").mousemove(function(e){handleMouseMove(e);});

}); // end $(function(){});
</script>
</head>
<body>
    <h4 id="results">Move mouse in and out of triangle</h4>
    <canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

关于javascript - 如何使用 Html5 Canvas 找到三 Angular 形内的鼠标点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22496159/

相关文章:

javascript - typescript 中的 Angular2 过滤器

javascript - SugarCRM 7 : Call BaseFilterLayout. applyFilter() 方法在事件上下文之外

javascript - 如何在某些点启用垂直和水平鼠标滚轮滚动

javascript - 决定要滚动的是 document.documentElement 还是 document.body

android - 2D 游戏的复杂 android 动画 : what approach?

javascript - window.opener 返回 null

javascript - 异步 Javascript 变量覆盖

asp.net - jquery ui 选项卡在回发时重定向到 ASPX 页面

javascript - jsPlumb:如何使流程图连接器避免相交元素?

java - 在小程序中绘制 Canvas