Skip to content

Instantly share code, notes, and snippets.

@marek-saji
Last active January 1, 2016 14:59
Show Gist options
  • Save marek-saji/8161090 to your computer and use it in GitHub Desktop.
Save marek-saji/8161090 to your computer and use it in GitHub Desktop.
cat draggin'
/**
* cat draggin'
*/
html,
body
{
min-height: 100%;
min-width: 100%;
margin: 0; padding: 0;
}
div
{
font-size: 5em;
width: 2em; height: 2em; line-height: 2.25em;
text-align: center;
border: black dashed thin;
border-radius: 1em;
position: absolute;
top: 0; left: 0;
cursor: pointer;
}
<div>😸</div>
var el = document.getElementsByTagName('div')[0],
elSize = el.offsetWidth;
function grab (event)
{
var rect = event.target.getBoundingClientRect();
// cross-browser offsetX, offsetY
// source: http://www.jacklmoore.com/notes/mouse-position/
el.dataset.grabbedX = event.clientX - rect.left; // offsetX
el.dataset.grabbedY = event.clientY - rect.top; // offsetY
event.preventDefault();
}
function letGo (event)
{
delete el.dataset.grabbedX;
delete el.dataset.grabbedY;
}
function drag (x, y)
{
delete el.dataset.queued;
el.style.top = Math.min(
window.innerHeight - elSize,
Math.max(0, y)
) + 'px';
el.style.left = Math.min(
window.innerWidth - elSize,
Math.max(0, x)
) + 'px';
}
function dragPerhaps (event)
{
event.preventDefault();
if (!el.dataset.queued && el.dataset.grabbedX)
{
el.dataset.queued = true;
window.requestAnimationFrame(drag.bind(
drag,
event.pageX - el.dataset.grabbedX,
event.pageY - el.dataset.grabbedY
));
}
}
el.addEventListener('mousedown', grab);
document.addEventListener('mouseup', letGo);
document.addEventListener('mousemove', dragPerhaps);
<head>
<link rel="stylesheet" type="text/css" href=./dabblet.css>
</head>
<body>
<div>😸</div>
<script src=./dabblet.js></script>
</body>
{"view":"split","fontsize":"100","seethrough":"","prefixfree":"1","page":"all"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment