【发布时间】:2017-06-28 17:05:21
【问题描述】:
我在 d3 制作的 SVG 对象上有一个多边形。单击时,会打开一个带有两个按钮的“引导弹出框”。我希望能够单击链接并转换多边形(最终目标是在多边形顶部画一个圆)。目前,主要问题是我无法选择多边形并更改其属性。 这是我的代码:
// create an svg element and append it
canvas = d3.select("#map")
.append("svg")
.attr("width", 500)
.attr("height", 500)
.attr("id", "firstFloor");
// draw polygon
var coverageAreaIDA1 = 'roomA1';
var content = '<button id="view" class="btn btn-sm btn-primary view-cam-btn">View Camera</button> <button id="set" class="btn btn-sm btn-primary set-dest-btn">Set Destination</button> <input type="hidden" name="coverage-area-id" value="'+coverageAreaIDA1+'">';
var polygonA1 = [[65, 215], [65, 250], [140, 250], [140, 215]];
var roomA1 = canvas.append("polygon")
.attr("points", polygonA1)
.attr("class", "coverage-area")
.attr("id", coverageAreaIDA1)
.attr("data-toggle", "popover")
.attr('data-placement', 'top')
.attr("data-content", content)
.attr("tabindex", "0")
.attr("data-trigger", "focus");
我尝试了很多方法,到目前为止,我最接近的是选择弹出框上的按钮及其值(与多边形 id 相同),将其放入 var 中,然后使用 d3 选择多边形,如下面的代码。
function badGuy() {
$(document).on('click', '.view-cam-btn', function(){
var coverageAreaID = $(this).nextAll('input').eq(0).val();
var selection = canvas.select("#" + coverageAreaID).styles("fill", "purple");
console.log('Selected polygon has ID '+selection.attrs('id'));
});
}
我知道 'selection' 不是空或 null,因为当我测试它的真实性时它返回 true,但上面的 console.log 返回 "Selected polygon has ID [object Object]" 并且确实不改变多边形的样式。
PS:如果您想知道为什么我使用 attrs 而不是 attr 和 style 而不是 style,通过查看 StackOverflow 上的许多问题/答案,我想我应该添加这个库
<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>
并使用属性和样式。在此之前,console.log 没有返回任何内容。
【问题讨论】:
-
我想我可以帮助你,但如果你能提供你的 HTML 和完整的 JS 代码,我将不胜感激。
-
这里是完整的代码:codepen.io/navidfalla/pen/xrpzXE 这是几百行代码,所以我尽量让它简单。但是你可以在右边看到我所说的多边形,如果你点击它们会有一个弹出框,我需要选择弹出框内的按钮。
标签: javascript jquery d3.js svg