首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >D3事件不工作

D3事件不工作
EN

Stack Overflow用户
提问于 2015-10-17 20:33:06
回答 1查看 590关注 0票数 2

巫师,

我在剪报上遇到了一些麻烦。由于某些原因,这不是触发,我认为这是因为事实上,元素是剪辑的形象的兄弟。

我的目标是提醒悬停元素的用户in (示例中的1、2或3- "dots“表中的第4个元素)。

我把它装进了小提琴里:

https://jsfiddle.net/vk1jc8ah/4/

有人能让它发挥作用吗?或者建议另一种方法来实现同样的目标?

HTML:

代码语言:javascript
运行
复制
<div class="projectbounds" style="width:400px; height:300px; background-color:#000000;"></div>

JS:

代码语言:javascript
运行
复制
var size = 30,
    w = 400,
    h = 300,
    dots = [];

dots.push([101, 200, 0, 1, 1]);
dots.push([170, 120, 0, 2, 1]);
dots.push([210, 150, 0, 3, 1]);

var svg = d3.select(".projectbounds")
    .append("svg:svg")
    .attr("id", "robsvg")
    .attr("width", w)
    .attr("height", h)
    .style("cursor", "pointer");

var defs = svg.append("svg:defs");

var imgbg = svg.append('svg:image')
    .attr('xlink:href', 'http://www.empireonline.com/images/features/100greatestcharacters/photos/7.jpg')
    .attr('x', 0)
    .attr('y', 0)
    .attr('width', w)
    .attr('height', h)
    .attr('clip-path', 'url(#robclip)');

var robs = defs.append("svg:clipPath").attr("id", "robclip");

function redraw() {
    for (var d in dots) {
        robs.append("circle")
            .attr("class", function () {
                return "userid" + dots[d][4] + " bgtier" + dots[d][3];
            })
            .attr("cx", function () {
                return dots[d][0];
            })
            .attr("cy", function () {
                return dots[d][1];
            })
            .attr("r", size + 1)
            .attr("onmouseover", function() { ////// not triggering...
                return "alertid()"; ////// not triggering...
            });
    }
}

function alertid(){ 
    alert("hi");
}

redraw();

我把它装进了小提琴里:

https://jsfiddle.net/vk1jc8ah/4/

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-17 21:37:07

斜坡并不是真正的“绘制”元素,如直角、圆圈等.因此,您可以为mouseover事件创建相同的圆圈,而不是将事件侦听器放置在clipath中的圆形元素上,并使这些圆圈透明。

为此,我创建了一个单独的函数:

代码语言:javascript
运行
复制
function drawEventCircles() {
    for (var d in dots) {
        svg.append("circle")
            .attr("cx", function () {
                return dots[d][0];
            })
            .attr("cy", function () {
                return dots[d][1];
            })
            .attr("r", size + 1)
            .attr("fill", "transparent")
            .on("mouseover", function() {            
              alertid();
            }
        );
    }
}

然后在调用drawEventCircles()之后调用它()即可;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33191321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档