"to reduce to particles, fragments, or parts; break up or destroy the cohesion of"
This example makes use of Disintegrate's built in contain effects paired with a simple drag effect, implemented in Javascript.
<div data-dis-container>
<button data-dis-type="contained" class="draggable">
Drag me outside the bounds
</button>
<button data-dis-type="contained" class="draggable">
Drag me outside the bounds
</button>
</div>
disintegrate.init();
/* A simple drag effect demo */
var objMoving;
if(document.querySelector(".draggable")) {
window.addEventListener("load", addListeners);
function addListeners() {
disintegrate.dises.forEach(function(disObj) {
if(disObj.elem.classList.contains("draggable")) {
disObj.elem.addEventListener('mousedown', function(e) {
objMoving = disObj;
mouseDown(e);
}, false);
}
});
}
function mouseUp() {
objMoving.elem.style.zIndex = "";
window.removeEventListener('mousemove', elMove, true);
}
var mXo, mYo;
function mouseDown(e) {
window.addEventListener('mousemove', elMove, true);
window.addEventListener('mouseup', mouseUp, false);
mXo = e.offsetX;
mYo = e.offsetY;
objMoving.elem.style.zIndex = "100";
// Only relevant if hover effect needed, but an additional
// hover class is required - see the below link for more info
// https://github.com/niklasvh/html2canvas/issues/683#issuecomment-316503359
// getScreenshot(objMoving);
}
function elMove(e) {
objMoving.elem.style.margin = 0;
objMoving.elem.style.top = 0;
objMoving.elem.style.left = 0;
objMoving.elem.style.position = 'absolute';
var coords = getRelativeCoordinates(e);
objMoving.elem.style.transform = "translate(" + (coords.x - mXo) + "px, " + (coords.y - mYo) + "px)";
}
// From https://stackoverflow.com/a/36860652/2065702 then modified
function getRelativeCoordinates (e) {
var pos = {}, offset = {}, ref;
ref = objMoving.container.offsetParent;
pos.x = !! e.touches ? e.touches[ 0 ].pageX : e.pageX;
pos.y = !! e.touches ? e.touches[ 0 ].pageY : e.pageY;
offset.left = objMoving.container.offsetLeft;
offset.top = objMoving.container.offsetTop;
while (ref) {
offset.left += ref.offsetLeft;
offset.top += ref.offsetTop;
ref = ref.offsetParent;
}
return {
x : pos.x - offset.left,
y : pos.y - offset.top,
};
}
}