Skip to content

Instantly share code, notes, and snippets.

@moosetraveller
Created August 12, 2021 22:57
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moosetraveller/1a2c6626e9d12c945f777da4ae4a2040 to your computer and use it in GitHub Desktop.
Save moosetraveller/1a2c6626e9d12c945f777da4ae4a2040 to your computer and use it in GitHub Desktop.
Javascript: Draggable Panel

Make Panel Draggable

HTML

<div id="panelContainer">
    <div id="panelTitle">Title</div>
    <div id="panelBody">Body</div>
</div>

CSS

#panelContainer {
  position: fixed;
}
#panelTitle {
  cursor: move;
}

JavaScript

const panelContainer = document.getElementById("panelContainer");
const panelTitle = document.getElementById("panelTitle");

panelTitle.addEventListener("mousedown", dragStartEvent => {

  dragStartEvent.preventDefault();

  let x = dragStartEvent.clientX;
  let y = dragStartEvent.clientY;

  const onDrag = dragEvent => {

    dragEvent.preventDefault();

    const relX = x - dragEvent.clientX;
    const relY = y - dragEvent.clientY;

    x = dragEvent.clientX;
    y = dragEvent.clientY;

    panelContainer.style.top = `${panelContainer.offsetTop - relY}px`;
    panelContainer.style.left = `${panelContainer.offsetLeft - relX}px`;

  };

  const onDragFinished = _ => {
    document.removeEventListener("mouseup", onDragFinished);
    document.removeEventListener("mousemove", onDrag);
  }

  document.addEventListener("mouseup", onDragFinished);
  document.addEventListener("mousemove", onDrag);

});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment