放开鼠标以后结束移动<div>,再次移动需要重新选中<div>,点击<div>区域不会创建<div>,要点击<div>区域外才会创建
时间: 2023-08-13 19:06:07 浏览: 110
点击div以外的部分,div消失不见
要实现您所描述的功能,您需要对代码进行一些修改。以下是更新后的代码:
```javascript
var selectedDiv = null;
var offsetX = 0;
var offsetY = 0;
document.addEventListener("dblclick", function(event) {
if (!event.target.classList.contains("mathjax-formula")) {
navigator.clipboard.readText().then(function(text) {
if (text) {
var latexCode = text.trim();
if (latexCode) {
var newFormula = document.createElement("div");
newFormula.className = "mathjax-formula";
newFormula.style.left = event.clientX + "px";
newFormula.style.top = event.clientY + "px";
newFormula.innerText = latexCode;
mathjaxFormulasContainer.appendChild(newFormula);
formulas.push({
latexCode: latexCode,
position: {
x: event.clientX,
y: event.clientY
}
});
MathJax.Hub.Queue(["Typeset", MathJax.Hub, newFormula]);
}
}
});
}
});
document.addEventListener("mousedown", function(event) {
if (event.target.classList.contains("mathjax-formula")) {
selectedDiv = event.target;
offsetX = event.clientX - parseInt(selectedDiv.style.left);
offsetY = event.clientY - parseInt(selectedDiv.style.top);
} else {
selectedDiv = null;
}
});
document.addEventListener("mousemove", function(event) {
if (selectedDiv) {
selectedDiv.style.left = event.clientX - offsetX + "px";
selectedDiv.style.top = event.clientY - offsetY + "px";
}
});
document.addEventListener("mouseup", function() {
selectedDiv = null;
});
```
这段代码的更新部分包括:
- 双击事件(dblclick):当用户双击页面时,只有当点击的不是<div>元素时,才会将剪切板中的文本作为LaTeX代码添加到容器中。
- 鼠标按下事件(mousedown):当用户按下鼠标时,如果点击的是<div>元素,则记录选中的<div>元素,并计算鼠标位置与<div>元素左上角的偏移量。如果点击的不是<div>元素,则清空选中的<div>元素。
- 鼠标移动事件(mousemove):当用户按下鼠标并移动时,如果有选中的<div>元素,则根据鼠标位置和偏移量来更新<div>元素的位置。
- 鼠标放开事件(mouseup):当用户释放鼠标时,清除选中的<div>元素。
这样修改后,双击画布区域时会获取剪切板中的文本,并根据鼠标位置在非<div>区域创建新的<div>元素;点击<div>区域会选中该<div>元素并可以移动,再次点击其他区域会取消选中。
阅读全文