我试图动态地在d3js中创建一些圆圈,但由于某种原因,它失败了。当我将矩形悬停时,我的要求是在矩形上显示两个小圆圈。鼠标上的事件圈应该隐藏起来。我尝试通过创建一个rect对象并将其传递给一个函数,然后在函数中获取矩形的组,并尝试将circles附加到其中。
有人能告诉我错误在哪里吗?
function drawCircle(rect, side){
var g = (rect.parentNode);
// var g = d3.select(aaa.parentNode);
// console.log(g.attr('id'));
g.append('rect')
.attr('x', 10)
.attr('y', 10)
.attr('width', 500)
.attr('height', 500)
.style('fill', 'red')
;
var x = 0, y = 0, r =0;
var rectHeight = parseFloat(rect.attr('height'));
var rectWidth = parseFloat(rect.attr('width'));
var rectX = parseFloat(rect.attr('x'));
var rectY = parseFloat(rect.attr('y'));
y = rectY + rectHeight/2;
r = rectHeight/8;
if(side == 'left'){
x = rectX;
}else{
x = rectX + rectWidth;
}
g.append('circle')
.attr('cx', x)
.attr('cy', y)
.attr('r', r)
.style('visibility', 'hidden')
.on('mouseover', function(){
g
.selectAll('circle')
.style('visibility', 'visible')
;
})
.on('mouseout', function () {
g
.selectAll('circle')
.style('visibility', 'hidden')
});
rect
.on('mouseover', function(){
// alert('hover');
g
.selectAll('circle')
.style('visibility', 'visible')
;
})
.on('mouseout', function(){
g
.selectAll('circle')
.style('visibility', 'hidden')
})
}
var rectangle = {
width : 50,
height:50,
x:100,
y:100
};
var svg = d3.select('svg');
var g = svg.append('g').attr('id', 'group');
console.log(g.attr('id'));
var rect = g.append('rect')
.attr('id', 'aaa')
.attr('x', rectangle.x)
.attr('y', rectangle.y)
.attr('width', rectangle.width)
.attr('height', rectangle.height)
.style('fill', 'blue')
.on('mouseover', function(){
drawCircle(this, 'right');
drawCircle(this, 'left');
})
;发布于 2015-06-15 07:15:09
你想要像这这样的东西吗?
如果有d3选择,则提供基础DOM元素。我还删除了大的红色测试,因为它停止了所有的工作。
function drawCircle(rect, side){
var g = d3.select(rect[0][0].parentNode);
var x = 0, y = 0, r =0;
var rectHeight = parseFloat(rect.attr('height'));
var rectWidth = parseFloat(rect.attr('width'));
var rectX = parseFloat(rect.attr('x'));
var rectY = parseFloat(rect.attr('y'));
y = rectY + rectHeight/2;
r = rectHeight/8;
if(side == 'left'){
x = rectX;
}else{
x = rectX + rectWidth;
}
g.append('circle')
.attr('cx', x)
.attr('cy', y)
.attr('r', r)
.style('visibility', 'hidden')
.on('mouseover', function(){
g
.selectAll('circle')
.style('visibility', 'visible')
;
})
.on('mouseout', function () {
g
.selectAll('circle')
.style('visibility', 'hidden')
});
rect
.on('mouseover', function(){
g
.selectAll('circle')
.style('visibility', 'visible')
;
})
.on('mouseout', function(){
g
.selectAll('circle')
.style('visibility', 'hidden')
})
}
var rectangle = {
width : 50,
height:50,
x:100,
y:100
};
var svg = d3.select('svg');
var g = svg.append('g').attr('id', 'group');
console.log(g.attr('id'));
var rect = g.append('rect')
.attr('id', 'aaa')
.attr('x', rectangle.x)
.attr('y', rectangle.y)
.attr('width', rectangle.width)
.attr('height', rectangle.height)
.style('fill', 'blue')
.on('mouseover', function(){
drawCircle(rect, 'right');
drawCircle(rect, 'left');
})
;https://stackoverflow.com/questions/30837699
复制相似问题