创建自己的鼠标事件需要一些工作,理想情况下,您应该创建或使用某种迷你库。我计划在不久的将来创建类似于这样的东西。无论如何,我在jsFiddle上创建了一个拖放演示,展示了如何拖动图像 - 您可以在这里查看它。 您可以像这样创建可拖动的图像:var myImage = new DragImage(sourcePath, x, y); 如果您对此有任何问题,请告诉我。希望能帮到您。 编辑 在拖动多个图片时存在一个错误。这里是新版本。 另外一个您可能想要了解的是easeljs,它类似于AS3的风格……鼠标事件、拖放等等。
HTML Canvas 与 SVG 或 HTML 不同,使用非保留(或即时)图形 API。这意味着,当你在画布上绘制一些东西(如图像)时,不会留下有关该物体的任何知识。剩下的只有画布上的像素,混合了所有先前的像素。你无法真正地拖动像素的子集;首先,它们所在的像素已经消失了。你需要做的是: 跟踪 mousedown 事件并查看其是否位于拖动的“正确”位置。(你将需要跟踪哪些图像 / 对象在哪里,并执行鼠标命中检测。) 当用户拖动鼠标时,从头开始重新绘制整个画布,每次根据当前鼠标位置和初始 mousedown 位置之间的偏移量,在新位置上绘制图像。 一些我可能建议的替代方法: SVG Pure HTML 多层画布,将一个透明画布拖动到另一个画布上面。 HTML Canvas 非常适合许多事情。用户与似乎是不同的“元素”进行交互(但实际上并不是)不是其中之一。更新:以下是一些展示画布拖动的示例: http://developer.yahoo.com/yui/examples/dragdrop/dd-region.html http://www.redsquirrel.com/dave/work/interactivecanvas/ http://langexplr.blogspot.com/2008/11/using-canvas-html-element.html 但是,它们都没有为你创建跟踪形状的单独库。
Canvas 和 jCanvas 你绝对需要查看 jCanvas。它是一个超级干净的 Canvas 包装器,可以在不增加代码复杂性的情况下打开许多门。它使得像这样的事情变得非常容易。 例如,这里有一个小型沙盒,非常接近你所需求的功能,带有拖拽和重绘功能: 在两个元素之间绘制箭头 我曾尝试使用DIV和jQuery完成所有事情,但它在交互性和质量方面总是不足。希望这能帮助像我一样的其他人。JP
当你创建新的对象,无论是窗口、卡片、形状还是可拖动的图像时,你可以将它们存储在“当前未被选中的对象”数组中。当你单击它们或选择它们或开始拖动它们时,你可以将它们从“未选中的对象”数组中删除。这样,你就可以通过检查它是否被选中来控制在特定的mousedown事件或mousemove事件中可以移动什么。如果它被选中,它将不在“未选中”数组中,你可以在拖动形状时将鼠标指针移到其他形状上而不会将它们拖动。创建你想要拖动的对象数组也有助于层次结构。画布最后绘制属于前景对象的像素。因此,如果对象在一个数组中,你只需要在迭代数组并绘制存储在数组元素中的对象时,切换它们的实例,例如从objectArray[20] 到 objectArray[4],你可以更改其他对象是否显示在其他对象的顶部或后面。