我可以在画布上画一些线。我想让每一条线都可以拖拽。
然而,它是通过存储数组中不同行的位置来实现的,我怎么才能让它们每个都像一个示例一样可以拖放呢?还是我弄错了?
您可以在此处查看代码var storedLines = []
http://jsfiddle.net/m1erickson/NnZ7a/
多谢了!
我可以在画布上画一些线。我想让每一条线都可以拖拽。
然而,它是通过存储数组中不同行的位置来实现的,我怎么才能让它们每个都像一个示例一样可以拖放呢?还是我弄错了?
您可以在此处查看代码var storedLines = []
http://jsfiddle.net/m1erickson/NnZ7a/
多谢了!
1条答案
按热度按时间vmjh9lq91#
帆布可拖拽。
若要创建可拖动的线条,请保留端点数组和线条数组作为端点的索引。
然后,当用户在端点或直线附近单击并拖动时,您只需根据鼠标移动的量更新端点。
一个点、一条线和一些列表
首先创建一个简单的点结构
然后一个列表,将持有点,添加点,以及任何其他您可能需要的。
然后根据列表结构创建点列表
线是一组点索引
寻找最近的
要从鼠标坐标中选择一个点,需要找到离鼠标最近的点。
对于直线也是一样的,但不是那么简单,你需要一个函数来求出一个点到一条线段的距离。
使用这些函数,我们应该扩展列表对象,以便使用扩展名重新创建它们。
剩下的部分是实现鼠标界面和渲染功能。你添加可拖动的点和连接它们的线。如果你在一条线或点附近单击,你就可以拖动它们。这个片段显示了剩下的部分。
用户反馈非常重要
显示正确的用户反馈也很重要。你需要设置光标、工具提示(通过canvas.style.cursor和canvas.title)并高亮显示将受影响的对象,这样用户就知道当他们点击和拖动时会发生什么动作。
此外,您应该将鼠标事件设置为文档而不是画布,因为这将捕获鼠标拖动,从而允许用户在画布之外拖动,同时您仍然可以获得mouseup和move事件。
创建并拖动点和线。