Vanessa 2025-01-11 12:22:44 +08:00
parent 87c8db09a0
commit 544d82216b
9 changed files with 130 additions and 114 deletions

View file

@ -232,6 +232,7 @@ export class Outline extends Model {
return true;
}
});
const contentRect = this.element.getBoundingClientRect();
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
if (!editor || editor.disabled || Math.abs(moveEvent.clientY - event.clientY) < 3 &&
Math.abs(moveEvent.clientX - event.clientX) < 3) {
@ -249,13 +250,29 @@ export class Outline extends Model {
}
ghostElement.style.top = moveEvent.clientY + "px";
ghostElement.style.left = moveEvent.clientX + "px";
selectItem = hasClosestByClassName(moveEvent.target as HTMLElement, "b3-list-item") as HTMLElement;
if (!selectItem || selectItem.tagName !== "LI" || selectItem.isSameNode(item) || selectItem.style.position === "fixed" || !this.element.contains(selectItem)) {
if (!this.element.contains(moveEvent.target as Element)) {
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover, .dragover__current").forEach(item => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover", "dragover__current");
});
return;
}
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover").forEach(item => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover");
if (moveEvent.clientY < contentRect.top + Constants.SIZE_SCROLL_TB || moveEvent.clientY > contentRect.bottom - Constants.SIZE_SCROLL_TB) {
this.element.scroll({
top: this.element.scrollTop + (moveEvent.clientY < contentRect.top + Constants.SIZE_SCROLL_TB ? -Constants.SIZE_SCROLL_STEP : Constants.SIZE_SCROLL_STEP),
behavior: "smooth"
});
}
selectItem = hasClosestByClassName(moveEvent.target as HTMLElement, "b3-list-item") as HTMLElement;
if (!selectItem || selectItem.tagName !== "LI" || selectItem.style.position === "fixed") {
return;
}
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover, .dragover__current").forEach(item => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover", "dragover__current");
});
if (selectItem.isSameNode(item)) {
selectItem.classList.add("dragover__current");
return;
}
const selectRect = selectItem.getBoundingClientRect();
if (moveEvent.clientY > selectRect.bottom - 10) {
selectItem.classList.add("dragover__bottom");
@ -278,7 +295,8 @@ export class Outline extends Model {
selectItem = this.element.querySelector(".dragover__top, .dragover__bottom, .dragover");
}
let hasChange = true;
if (selectItem && selectItem.className.indexOf("dragover") > -1 && editor) {
if (selectItem && editor &&
(selectItem.classList.contains("dragover__top") || selectItem.classList.contains("dragover__bottom") || selectItem.classList.contains("dragover"))) {
let previousID;
let parentID;
const undoPreviousID = (item.previousElementSibling && item.previousElementSibling.tagName === "UL") ? item.previousElementSibling.previousElementSibling.getAttribute("data-node-id") : item.previousElementSibling?.getAttribute("data-node-id");
@ -331,8 +349,8 @@ export class Outline extends Model {
return true;
}
}
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover").forEach(item => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover");
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover, .dragover__current").forEach(item => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover", "dragover__current");
});
};
});