gpt4 book ai didi

javascript - d3js Behaviour.drag 阻止可编辑内容?

转载 作者:行者123 更新时间:2023-11-28 04:08:50 26 4
gpt4 key购买 nike

我有一个小的弹出编辑器,用于在 d3js 应用程序中输入一些数据。由于此编辑器有时会覆盖页面的有趣区域,因此我使用 behavior.drag

使弹出窗口可拖动

这工作得很好...我现在可以拖动弹出窗口。但是我无法再编辑内容。

有人知道为什么这不起作用以及该怎么办吗?

这是我的问题的一个小问题:https://jsfiddle.net/ey73b557/41/ 。这是代码中的拖动行为:

// defined the drag behavior
var editTaskdrag = d3.behavior.drag()
.on("drag", function(d,i) {
var d3EditTaskObject = d3.select(this);
d3EditTaskObject.style("left", addPx(d3EditTaskObject.style("left"), d3.event.dx));
d3EditTaskObject.style("top", addPx(d3EditTaskObject.style("top"), d3.event.dy));
})
;

您可以编辑*编辑我文本。单击蓝色按钮,将出现一个弹出窗口,其中包含相同的 *edit me* 文本。但是,您无法编辑此内容。这两个元素都将 contenteditable 设置为 true。

最佳答案

点击和拖动之间存在冲突,这在 D3 代码中是众所周知的。

就您而言,最简单的解决方案(当然不是最优雅的解决方案)就是在单击跨度时删除拖动行为:

.on("click", function(){
popupEditor.on(".drag", null)
})

这是经过更改的代码:

// this generates the 'editor' - used for both the static and the draggable version
function simpleEditor(d3Object) {
d3Object.append("span")
.text("content: ");
d3Object.append("span")
.text(" * edit me * ")
.attr("contenteditable", "true")
.style("border", "solid black 1pt")
.style("background", "lightblue")
.on("click", function() {
popupEditor.on(".drag", null)
})
.on("mouseout", function() {
popupEditor.call(editTaskdrag)
})
}
// arithmetic on strings with px at the end: addPx("110px", 23) = "133px"
function addPx(s, d) {
var number = parseInt(s, 10); // this really works even if the string is "120px"
number += d;
return number.toString() + "px";
}
// defined the drag behavior
var editTaskdrag = d3.behavior.drag()
.on("drag", function(d, i) {
var d3EditTaskObject = d3.select(this);
d3EditTaskObject.style("left", addPx(d3EditTaskObject.style("left"), d3.event.dx));
d3EditTaskObject.style("top", addPx(d3EditTaskObject.style("top"), d3.event.dy));
});
// generate the static editor
simpleEditor(d3.select("#staticEditor"))
// and now the draggable editor, hidden, but with drag behavior
var popupEditor = d3.select("#popupEditor");
simpleEditor(popupEditor);
popupEditor.attr("hidden", "true")
.call(editTaskdrag);
// click this button to get the draggable popup. However, it is not editable anymore
d3.select("#button")
.on("click", function() {
d3.select("#popupEditor")
.style("position", "fixed")
.style("left", "30%")
.style("top", "30%")
.style("background", "grey")
.style("padding", "1em")
.style("box-shadow", "0.5em 0.5em lightgrey")
.attr("hidden", null)
})
#button {
background-color: blue;
color: white;
border: solid black 1pt;
padding: 0.2em;
border-radius: 1em
}
<script src="https://d3js.org/d3.v3.min.js"></script>
<body>
<p id="staticEditor">
</p>
<p id="popupEditor">
</p>
<p>
<span id="button">
Click here to open the pop up editor
</span>
</p>
</body>

关于javascript - d3js Behaviour.drag 阻止可编辑内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com