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);
}