Mer*_*ing 12 javascript drag-and-drop openlayers
我正在编写一个使用OpenLayers的应用程序,使用户能够将文件拖放到一组预定义的功能,这些功能将通过AJAX发送到服务器.文件本身是来自地球物理设备的原始数据,将由服务器呈现为栅格图层.
我为地图拖放工作:
var mapelem = $id("map");
mapelem.addEventListener("dragover", FileDragHover, false);
mapelem.addEventListener("dragleave", FileDragHover, false);
mapelem.addEventListener("drop", FileSelectHandler, false);
Run Code Online (Sandbox Code Playgroud)
我强调悬停使用此代码:
var sf = new OpenLayers.Control.SelectFeature(boxes, {
hover: true,
multiple: false,
highlightOnly: true
});
map.addControl(sf);
sf.activate();
Run Code Online (Sandbox Code Playgroud)
其余代码主要是Boxes Example - Vector.
问题是当将文件拖到地图画布上时,OpenLayers悬停选择不再有效,我希望它给用户提供反馈,以确保他们将文件丢弃到他们期望的位置.
我可以在画布上获取光标的位置:
map.events.register("mousemove", map, function(e) {
lonlat = map.getLonLatFromPixel(e.xy);
});
Run Code Online (Sandbox Code Playgroud)
所以我可以在该函数中进行一个功能点测试,但能够使用现有的功能会很好.
有什么方法可以将拖动消息传播到我的OpenLayers层吗?
来自 MDN 拖放文档 [1]:\xc2\xab 注意,仅触发拖动事件;mousemove拖动操作期间不会触发诸如此类的鼠标事件。\xc2\xbb
因此您将无法将拖动处理程序注册到地图 div。也许您可以尝试在每个功能上注册一个拖动处理程序。这里有一些经过一半测试的代码(仅使用 SVG 渲染器):
\n\nboxes.features.forEach(function(f){\n elem = $(f.geometry.id);\n elem.addEventListener("dragover", FileDragHover, false);\n elem.addEventListener("dragleave", FileDragHover, false);\n elem.addEventListener("drop", FileSelectHandler, false);\n})\nRun Code Online (Sandbox Code Playgroud)\n\n希望能有所帮助。
\n\n1 - https://developer.mozilla.org/En/DragDrop/Drag_and_Drop
\n| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |