[英]d3 click event do not working after clone element append for drag event
use "d3": "^3.5.17" in angular在 angular 中使用 "d3": "^3.5.17"
const dragEvent = {
dragstarted: function(d) {
console.log(`drag start`);
d3.event.sourceEvent.stopPropagation();
const node = d3.select(this.parentNode).node();
const clonedG = node.cloneNode(true);
d3.select(clonedG).attr('id', 'dragging').classed('dragging', true).attr('opacity', 0.7);
// problem
node.parentNode.append(clonedG);
},
dragged: function(d) {
console.log(`drag`);
d3.select('#dragging').attr('transform', `translate(${(d.x = d3.event.x)},${(d.y = d3.event.y)})`);
},
dragended: (d) => {
// todo: drop call
console.log(`dragended`);
const dragging = document.getElementById('dragging');
dragging.parentNode.removeChild(dragging);
}
};
const drag = d3.behavior.drag()
.origin(function(d) {
d = {x: 0, y: 0};
return d;
})
.on('dragstart', dragEvent.dragstarted)
.on('drag', dragEvent.dragged)
.on('dragend', dragEvent.dragended);
d3.selectAll('.select-rect')
.datum({x: 0, y: 0})
.call(drag)
.on('click', function () {
console.log(`click`);
if (d3.event.defaultPrevented) { return; }
console.log(`clicked`);
});
I am sorry first.首先我很抱歉。
my English is bad.我的英语不好。
I want to drag a new element and delete it when the drag ends.我想拖动一个新元素并在拖动结束时将其删除。
But I have some problem with this line: node.parentNode.append(clonedG);
但我对这一行有一些问题: node.parentNode.append(clonedG);
The click event is not working after appending the cloned element.附加克隆元素后,单击事件不起作用。
Am I wrong?我错了吗?
Or the click event handle again after drag end event?还是拖动结束事件后再次单击事件句柄?
Can anyone help me?谁能帮我?
I solved this issue.我解决了这个问题。
let isClick = false;
const dragEvent = {
dragstarted: function(d) {
console.log(`drag start`);
d3.event.sourceEvent.stopPropagation();
},
dragged: function(d) {
if (!isClick) {
isClick = true;
const node = d3.select(this.parentNode).node();
const clonedG = node.cloneNode(true);
d3.select(clonedG).attr('id', 'dragging').classed('dragging', true).attr('opacity', 0.7);
// problem
node.parentNode.append(clonedG);
}
console.log(`drag`);
// tslint:disable-next-line:no-shadowed-variable
const dragging = d3.select('#dragging');
console.log(`dragging`, dragging);
if (dragging) {
dragging.attr('transform', `translate(${(d.x = d3.event.x)},${(d.y = d3.event.y)})`);
}
},
dragended: (d) => {
// todo: drop call
console.log(`dragended`);
isClick = false;
const dragging = document.getElementById('dragging');
if (dragging) {
dragging.parentNode.removeChild(dragging);
}
}
};
changed dragstarted part更改了拖动开始部分
clone element code move to dragged part克隆元素代码移动到被拖动的部分
but I don't know different.但我不知道不同。
bless you dev people!祝福你们开发人员!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.