JSFiddle - React, Tailwind, and code Playground
JavaScript
var w = 800;
var h = 600;
var paper = Raphael(0, 0, w, h);
// i want to show this image through the effect
paper.image("http://static.pourfemme.it/pfmoda/fotogallery/625X0/63617/borsa-alviero-martini-rodeo-drive.jpg", 0, 0, w, h);
//path coordinates for bounding rectangle
var outerpath = "M0,0L" + w + ",0L" + w + "," + h + "L0," + h + "L0,0z";
//path coordinates for inner circle
var r = 1;
//see http://stackoverflow.com/questions/5737975/circle-drawing-with-svgs-arc-path for explanation of the extra 0.1 pixel
var innerpath = "M" + (w/2) + "," + (h/2 - r) + "A" + r + "," + r + " 0 1,0 " + (w/2 + 0.1) + "," + (h/2 - r) + "z";
var path1 = outerpath + innerpath;
var mask = paper.path(path1).attr({stroke: 0, fill: "#999"});
r = 600;
var innerpath = "M" + (w/2) + "," + (h/2 - r) + "A" + r + "," + r + " 0 1,0 " + (w/2 + 0.1) + "," + (h/2 - r) + "z";
var path2 = outerpath + innerpath;
var anim = Raphael.animation({path: path2}, 2000);
//expand the circle
mask.animate(anim.delay(500));