JSFiddle - React, Tailwind, and code Playground
HTML
<body>
<div id="draggable" draggable="true" style="background-position: 0px 0px;">
</div>
</body>
CSS
body {
background-color: #111;
color: #555;
font-size: 1.1em;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
#draggable{
background-color: white;
position:relative;
width: 80%;
height: 400px;
margin: 0 auto;
background-image: url("http://139.59.24.243/images/invitations/birthday/a.jpg");
background-size: cover;
background-repeat: no-repeat;
-webkit-mask-image: url(http://139.59.24.243/images/invitations/birthday/ice.png);
mask-image: url(http://tympanus.net/codrops-playground/assets/images/cssref/properties/mask-image/mask-image.png);
-webkit-mask-position: center center;
mask-position: center center;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
}
JavaScript
var xStart;
var yStart;
var imgOriginTop = 0;
var imgOriginLeft = 0;
var draggableElem = document.getElementById("draggable");
function moveDraggable(event){
var offsetX = event.clientX - parseInt(xStart);
var offsetY = event.clientY - parseInt(yStart);
console.log((parseInt(imgOriginLeft) + offsetX) + "px");
draggableElem.style.backgroundPositionX = (parseInt(imgOriginLeft) + offsetX) + "px";
draggableElem.style.backgroundPositionY = (parseInt(imgOriginTop) + offsetY) + "px";
}
document.addEventListener("dragstart", function(event) {
xStart = event.clientX;
yStart = event.clientY;
var img = document.createElement("img");
img.src = "";
img.width = 0;
img.height = 0;
event.dataTransfer.setDragImage(img, 0, 0);
imgOriginLeft = draggableElem.style.backgroundPositionX;
imgOriginTop = draggableElem.style.backgroundPositionY;
}, false);
document.addEventListener("drag", function(event) {
moveDraggable(event);
}, false);
document.addEventListener("dragend", function(event) {
moveDraggable(event);
imgOriginLeft = parseInt(draggableElem.style.backgroundPositionX);
imgOriginTop = parseInt(draggableElem.style.backgroundPositionY);
}, false);