Mapbox GL Popup .setDOMContent 示例
Mapbox GL Popup .setDOMContent example
我正在尝试创建一个自定义按钮以显示在生成动态 link(URL)的弹出窗口中。由于时间原因,我似乎无法通过 .setHTML 执行此操作,无法在 运行 时间将按钮绑定到函数。所以我想我会尝试新的 .setDOMContent
关于此功能如何工作的在线信息为零。我想知道是否有人有这样的例子,其中一个按钮被添加到弹出窗口,可以 运行 一个功能并发送数据。
这是我尝试设置的非常糟糕的尝试。
此函数创建弹出窗口
function GameObjectPopup(myObject) {
var features = map.queryRenderedFeatures(myObject.point, {
layers: ['seed']
});
if (!features.length) {
return;
}
var feature = features[0];
// Populate the popup and set its coordinates
// based on the feature found.
var popup = new mapboxgl.Popup()
.setLngLat(feature.geometry.coordinates)
.setHTML(ClickedGameObject(feature))
.setDOMContent(ClickedGameObject2(feature))
.addTo(map);
};
此函数通过 .setHTML
添加 html
function ClickedGameObject(feature){
console.log("clicked on button");
var html = '';
html += "<div id='mapboxgl-popup'>";
html += "<h2>" + feature.properties.title + "</h2>";
html += "<p>" + feature.properties.description + "</p>";
html += "<button class='content' id='btn-collectobj' value='Collect'>";
html += "</div>";
return html;
}
这个函数想要通过 .setDOMContent
添加 DOM 内容
function ClickedGameObject2(feature){
document.getElementById('btn-collectobj').addEventListener('click', function()
{
console.log("clicked a button");
AddGameObjectToInventory(feature.geometry.coordinates);
});
}
我正在尝试将变量从 features.geometry.coordinates 传送到函数 AddGameObjectToInventory()
单击对象时出现的错误(因此正在生成弹出窗口)
Uncaught TypeError: Cannot read property 'addEventListener' of null
Popup#setHTML
接受一个代表一些 HTML 内容的字符串:
var str = "<h1>Hello, World!</h1>"
popup.setHTML(str);
而 Popup#setDOMContent
需要实际的 HTML 个节点。即:
var h1 = document.createElement('h1');
h1.innerHTML="Hello, World";
popup.setDOMContent(h1);
这两个代码片段都会产生相同的 Popup HTML 内容。您不希望在单个弹出窗口中同时使用这两种方法,因为它们是完成同一件事的两种不同方法。
您共享的代码中的问题是您尝试使用 setDOMContent
向您的按钮添加事件侦听器,但您不需要访问 Popup
对象在将弹出 DOM 内容添加到地图后添加事件侦听器。这是我认为你正在尝试做的工作版本:https://jsfiddle.net/h4j554sk/
我正在尝试创建一个自定义按钮以显示在生成动态 link(URL)的弹出窗口中。由于时间原因,我似乎无法通过 .setHTML 执行此操作,无法在 运行 时间将按钮绑定到函数。所以我想我会尝试新的 .setDOMContent 关于此功能如何工作的在线信息为零。我想知道是否有人有这样的例子,其中一个按钮被添加到弹出窗口,可以 运行 一个功能并发送数据。
这是我尝试设置的非常糟糕的尝试。
此函数创建弹出窗口
function GameObjectPopup(myObject) {
var features = map.queryRenderedFeatures(myObject.point, {
layers: ['seed']
});
if (!features.length) {
return;
}
var feature = features[0];
// Populate the popup and set its coordinates
// based on the feature found.
var popup = new mapboxgl.Popup()
.setLngLat(feature.geometry.coordinates)
.setHTML(ClickedGameObject(feature))
.setDOMContent(ClickedGameObject2(feature))
.addTo(map);
};
此函数通过 .setHTML
添加 htmlfunction ClickedGameObject(feature){
console.log("clicked on button");
var html = '';
html += "<div id='mapboxgl-popup'>";
html += "<h2>" + feature.properties.title + "</h2>";
html += "<p>" + feature.properties.description + "</p>";
html += "<button class='content' id='btn-collectobj' value='Collect'>";
html += "</div>";
return html;
}
这个函数想要通过 .setDOMContent
添加 DOM 内容function ClickedGameObject2(feature){
document.getElementById('btn-collectobj').addEventListener('click', function()
{
console.log("clicked a button");
AddGameObjectToInventory(feature.geometry.coordinates);
});
}
我正在尝试将变量从 features.geometry.coordinates 传送到函数 AddGameObjectToInventory()
单击对象时出现的错误(因此正在生成弹出窗口)
Uncaught TypeError: Cannot read property 'addEventListener' of null
Popup#setHTML
接受一个代表一些 HTML 内容的字符串:
var str = "<h1>Hello, World!</h1>"
popup.setHTML(str);
而 Popup#setDOMContent
需要实际的 HTML 个节点。即:
var h1 = document.createElement('h1');
h1.innerHTML="Hello, World";
popup.setDOMContent(h1);
这两个代码片段都会产生相同的 Popup HTML 内容。您不希望在单个弹出窗口中同时使用这两种方法,因为它们是完成同一件事的两种不同方法。
您共享的代码中的问题是您尝试使用 setDOMContent
向您的按钮添加事件侦听器,但您不需要访问 Popup
对象在将弹出 DOM 内容添加到地图后添加事件侦听器。这是我认为你正在尝试做的工作版本:https://jsfiddle.net/h4j554sk/