将某些内容从地图外部拖放到要素(开放图层)上
Drag & drop something from outside the map onto a feature (openlayers)?
>我正在开发一个带有开放图层的网站,用户应该能够将建筑物的名称从建筑物列表(地图外部)拖到地图上的要素上。
由于我发现没有办法用开放层来做到这一点,我想通过使用 interact.js 框架来做到这一点。我的计划是通过鼠标悬停来选择功能,因此当用户放下某些内容并释放鼠标按钮时,该功能已被选中。
是否可以将某些内容从地图外部拖动到具有开放图层的要素上?
如果没有,你有没有更好的建议如何像上面描述的那样做?
一个想法是为每个建筑物创建一个覆盖层(另请参阅此示例),其中包含一个充当交互.js"dropzone"的div。
var dropZone = new ol.Overlay({
position: [0, 0],
positioning: 'center-center',
element: document.getElementById('inner-dropzone'),
stopEvent: false
});
map.addOverlay(dropZone);
我通过 interact.js 复制拖放示例快速进行了一个简单的概念验证:http://jsfiddle.net/96gao5nu/2/
我会使用 ol.control.MousePosition 来获取鼠标位置,一旦有东西被放到地图上。然后使用鼠标位置获取要与之交互的功能。
我通过使用HTML5拖放功能找到了解决方案,以便将HTML元素从地图外部拖动到矢量图层上的多边形。它看起来有点脏,但它工作得很好。
以下是带有可放置元素列表和映射的 HTML 代码:
<ul class="list-group">
<li draggable="true" ondragstart="dragStart(event)" style="cursor: move">Area 1</li>
<li draggable="true" ondragstart="dragStart(event)" style="cursor: move">Area 2</li>
<li draggable="true" ondragstart="dragStart(event)" style="cursor: move">Area 3</li>
<li draggable="true" ondragstart="dragStart(event)" style="cursor: move">Area 4</li>
<li draggable="true" ondragstart="dragStart(event)" style="cursor: move">Area 5</li>
</ul>
<div id="map" class="map" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
为了检测元素被丢弃的特征,我使用了选择交互,在鼠标悬停时选择一个特征。下面是处理 drop 事件并查找目标功能的 JavaScript 代码:
var lastDropLocation = {};
function allowDrop(ev) {
ev.preventDefault();
}
function drop(ev) {
ev.preventDefault();
lastDropLocation["x"] = ev.pageX;
lastDropLocation["y"] = ev.pageY;
}
selectInteraction.on('select', function (e) {
if (e.selected.length == 1) {
var browserEvent = e.mapBrowserEvent.browserEvent;
// Check if the drop location is the same as the location where the feature was selected
if (lastDropLocation.x == browserEvent.clientX && lastDropLocation.y == browserEvent.clientY) {
// Area was dragged to a polygon ...
var feature = e.selected[0];
// Further code here...
}
}
});
相关文章:
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 更改高贴图的缩放级别
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- HTML/CSS-用于拖放的全页面覆盖
- 更改图层中单个矢量特征的图标
- Rubaxa可与聚合物进行排序/拖放不起作用,具体取决于显示器:
- 如何在“控制缩放”下的“打开图层”上添加一些图像
- 打开图层 - 缩放时标记消失
- 如何设置加载 JSON 图层的最小缩放比例
- 可以将形状组拖到图层之外,并在 kineticjs 中暂存
- 如何使用HTML2canvas截取拖放元素的屏幕截图
- 拖放SVG层或组
- js库,用于支持拖放的有向无循环图
- 谷歌地图-显示基于缩放级别的融合表图层
- 如何使用传单在地图图层中设置不同的缩放级别
- 如何用KineticJS在两个阶段上拖动图层
- 动态JS拖动一个图层会导致另一个图层上的形状对拖动停止响应
- 使用相对定位的图元进行拖放角度文件上载
- 将某些内容从地图外部拖放到要素(开放图层)上
- 开放图层 3:缩放地图到数组中的坐标