Commit 934d6b2b by yakoff94

fix resizer

parent 70b17b67
...@@ -4,7 +4,7 @@ import { Extension } from "@tiptap/core"; ...@@ -4,7 +4,7 @@ import { Extension } from "@tiptap/core";
export default Extension.create({ export default Extension.create({
name: "Resizable", name: "Resizable",
addOptions() { addOptions () {
return { return {
types: ["image", "video"], types: ["image", "video"],
handlerStyle: { handlerStyle: {
...@@ -18,31 +18,31 @@ export default Extension.create({ ...@@ -18,31 +18,31 @@ export default Extension.create({
}; };
}, },
addStorage() { addStorage () {
return { return {
resizeElement: null, resizeElement: null,
}; };
}, },
onCreate({ editor }) { onCreate ({editor}) {
const element = editor.options.element; const element = editor.options.element;
element.style.position = "relative"; element.style.position = "relative";
// resizeLayer // resizeLayer
console.log('onCreate', editor);
const resizeLayer = document.createElement("div"); const resizeLayer = document.createElement("div");
resizeLayer.className = "resize-layer"; resizeLayer.className = "resize-layer";
resizeLayer.style.display = "none"; resizeLayer.style.display = "none";
resizeLayer.style.position = "absolute"; resizeLayer.style.position = "absolute";
Object.entries(this.options.layerStyle).forEach(([key, value]) => { Object.entries(this.options.layerStyle).forEach(([key, value]) => {
resizeLayer.style[key] = value; resizeLayer.style[key] = value;
}); });
resizeLayer.addEventListener("mousedown", (e) => { resizeLayer.addEventListener("mousedown", (e) => {
const resizeElement = this.storage.resizeElement; const resizeElement = this.storage.resizeElement;
if (!resizeElement) return; if ( ! resizeElement) return;
if (/bottom/.test(e.target.className)) { if (/bottom/.test(e.target.className)) {
let startX = e.screenX; let startX = e.screenX;
const dir = e.target.classList.contains("bottom-left") ? -1 : 1; const dir = e.target.classList.contains("bottom-left") ? -1 : 1;
...@@ -57,8 +57,6 @@ export default Extension.create({ ...@@ -57,8 +57,6 @@ export default Extension.create({
const clientHeight = resizeElement.clientHeight; const clientHeight = resizeElement.clientHeight;
resizeElement.style.width = clientWidth + "px"; // max width resizeElement.style.width = clientWidth + "px"; // max width
// resizeLayer // resizeLayer
const pos = getRelativePosition(resizeElement, element); const pos = getRelativePosition(resizeElement, element);
resizeLayer.style.top = pos.top + "px"; resizeLayer.style.top = pos.top + "px";
...@@ -69,7 +67,7 @@ export default Extension.create({ ...@@ -69,7 +67,7 @@ export default Extension.create({
startX = e.screenX; startX = e.screenX;
}; };
document.addEventListener("mousemove", mousemoveHandle); document.addEventListener("mousemove", mousemoveHandle);
document.addEventListener("mouseup", () =>{ document.addEventListener("mouseup", () => {
document.removeEventListener("mousemove", mousemoveHandle) document.removeEventListener("mousemove", mousemoveHandle)
}); });
} }
...@@ -95,60 +93,42 @@ export default Extension.create({ ...@@ -95,60 +93,42 @@ export default Extension.create({
editor.resizeLayer = resizeLayer; editor.resizeLayer = resizeLayer;
element.appendChild(resizeLayer); element.appendChild(resizeLayer);
}, },
onSelectionUpdate({ editor, transaction }) { onUpdate({editor, transaction}) {
selectionUpdate({editor, transaction}, this.options, this.storage)
},
onSelectionUpdate ({editor, transaction}) {
selectionUpdate({editor, transaction}, this.options, this.storage)
},
});
function selectionUpdate({editor, transaction}, options, storage)
{
const element = editor.options.element; const element = editor.options.element;
const node = transaction.curSelection.node; const node = transaction.curSelection.node;
const resizeLayer = editor.resizeLayer; const resizeLayer = editor.resizeLayer;
console.log("res layer",resizeLayer) // console.log("res layer", resizeLayer)
if (node && this.options.types.includes(node.type.name)) { if (node && options.types.includes(node.type.name)) {
// resizeLayer位置大小 // resizeLayer
resizeLayer.style.display = "block"; resizeLayer.style.display = "block";
let dom = editor.view.domAtPos(transaction.curSelection.from).node; let dom = editor.view.domAtPos(transaction.curSelection.from).node;
if (dom.getAttribute("src") !== node.attrs.src) { if (dom.getAttribute("src") !== node.attrs.src) {
dom = dom.querySelector(`[src="${node.attrs.src}"]`); dom = dom.querySelector(`[src="${node.attrs.src}"]`);
} }
this.storage.resizeElement = dom; storage.resizeElement = dom;
const pos = getRelativePosition(dom, element); const pos = getRelativePosition(dom, element);
console.log("dom after src", dom)
console.log(pos)
resizeLayer.style.top = pos.top + "px"; resizeLayer.style.top = pos.top + "px";
resizeLayer.style.left = pos.left + "px"; resizeLayer.style.left = pos.left + "px";
resizeLayer.style.width = dom.width + "px"; resizeLayer.style.width = dom.width + "px";
resizeLayer.style.height = dom.height + "px"; resizeLayer.style.height = dom.height + "px";
const resizeObserver = new ResizeObserver((entries) => {
for (let entry of entries) {
const currentPosition = entry.target.getBoundingClientRect();
if (currentPosition.x === 0) {
console.log("changed pos");
//resizeLayer.style.display = "none";
}
console.log(entry.target.parentNode)
console.log("target: ", entry.target)
console.log("bounding rect: ", currentPosition)
}
})
resizeObserver.observe(dom);
} else { } else {
console.log("no node");
resizeLayer.style.display = "none"; resizeLayer.style.display = "none";
} }
}, }
}); function getRelativePosition (element, ancestor) {
// 计算相对位置
function getRelativePosition(element, ancestor) {
const elementRect = element.getBoundingClientRect(); const elementRect = element.getBoundingClientRect();
const ancestorRect = ancestor.getBoundingClientRect(); const ancestorRect = ancestor.getBoundingClientRect();
const relativePosition = { const relativePosition = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment