JSFiddle - React, Tailwind, and code Playground
HTML
<div class="dark"></div>
<div class="light"></div>
CSS
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
background-color: #000;
}
.dark, .light {
background-image: url("http://placekitten.com/g/1024/768");
}
.dark {
width: 100%;
height: 100%;
/* opacity: 0.25; */
background: #fff;
}
.light {
width: 100px;
height: 100px;
position: absolute;
top:100px;
left:100px;
background-position: -100px -100px;
box-shadow: 0 0 10px black;
background: rgba(120, 0, 0, .1)
}
JavaScript
//set everything up
var $dark = $('.dark'), $light = $('.light'), $body = $("body"),
mouseOffsetX = 0, mouseOffsetY = 0;
$(document).ready(function(){
$light.on("mousedown",onMouseDownOnLight);
$body.on("mouseup",onMouseUpOnBody);
});
function onMouseDownOnLight(e){
$body.on("mousemove", onMouseMoveOnBody);
mouseOffsetX = e.offsetX;
mouseOffsetY = e.offsetY;
}
function onMouseMoveOnBody(e){
var x = e.pageX - mouseOffsetX,
y = e.pageY - mouseOffsetY
$light.css({
top: y,
left: x,
backgroundPosition: (-x) + "px " + (-y) + "px"
});
}
function onMouseUpOnBody(e){
$body.off("mousemove", onMouseMoveOnBody);
}