DragMode:'absolute' behaves strange
sorry - this was a problem on my side which became obvious within the editor only - sorry for bothering!
Read full answer below βQuestion
GrapesJS version
- I confirm to use the latest version of GrapesJS
What browser are you using?
Version 1.56.20 Chromium: 115.0.5790.171 (Offizieller Build) (arm64)
Reproducible demo link
none
Describe the bug
I want the components in my editor to be moveable by dragging. After some research, I found that
let Editor = grapesjs.init({
dragMode:'absolute',
is needed to achieve this functionality. At least, my components can now be moved...but, since the editor uses a wrapper around the actual component view, the wrapper position may be correct, but the view position is now measured relative to the wrapper, which is wrong:
<img width="284" alt="moving-component" src="https://github.com/GrapesJS/grapesjs/assets/514882/60685671-95d3-41da-9906-bf1e1e5953bc">The technical reason for this behaviour (and why I consider this as a "bug") is that both the wrapper and its content get the same HTML id assigned to them - which is always wrong as such ids must be unique within an HTML document:
The elements in the DOM:
<img width="534" alt="DOM" src="https://github.com/GrapesJS/grapesjs/assets/514882/99dbad4b-883d-4569-a996-c3889682c777">...and their CSS settings:
<img width="340" alt="Style" src="https://github.com/GrapesJS/grapesjs/assets/514882/31f69719-2c0e-408b-8ba4-4a0b860bef71">As a consequence, the same styling is applied to both
Code of Conduct
- I agree to follow this project's Code of Conduct
Answers (2)
sorry - this was a problem on my side which became obvious within the editor only - sorry for bothering!
Thanks for reporting this, @rozek.
The issue with dragMode:'absolute' behaves strange appears to be a race condition or state management timing problem. This typically happens when component lifecycle events and DOM modifications overlap, creating an inconsistent state.
What to try:
- Add a setTimeout wrapper to ensure the DOM has settled:
setTimeout(() => {
// your operation here
}, 0);
-
Check initialization order β make sure components are fully loaded before you interact with them
-
Use the editor's event system β listen to completion events:
editor.on('component:mount', (component) => {
// safe to interact with component here
});
Recommended next steps:
- Test with the latest GrapesJS version if you haven't
- Provide a minimal reproducible example (CodeSandbox) β this helps the team identify the root cause faster
- Include GrapesJS version, browser, and console errors in your report
Related Questions and Answers
Continue research with similar issue discussions.
Issue #5362
draggable/droppable property functions not called while dragging
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Version 1.56.20 Chromium: 115.0.5790.171 (...
Issue #5352
Uncaught SyntaxError: Unexpected token '{' at CanvasView.ts:590:12
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Version 1.56.20 Chromium: 115.0.5790.171 (...
Issue #5090
Component script function runs twice after page save
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? 112.0.5615.137 (Official Build) (arm64) Re...
Issue #4601
update() of custom types added to StyleManager is no more triggered when switching between some targets.
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chromium 104 Reproducible demo link https:...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins βPremium plugins ship with support, regular updates, and production-ready features β save days of integration work.
Browse premium plugins βRelated tutorials
In-depth guides on the same topic.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Big Updates: TinyMCE 8 and Placeholder 2.0 for GrapesJS
In May we shipped major updates to two of our most popular GrapesJS plugins β TinyMCE Inline Text Editor and Placeholder.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.