JSFiddle - React, Tailwind, and code Playground
HTML
<div class="overlay" id="welcome-message" style="display: none">
<h1>Hey, welcome to my site. Are you a human?</h1>
<button>Yes</button>
</div>
<script>
// show the welcome message immediately if JS is enabled
document.getElementById('welcome-message').style.display = 'block';
</script>
<section id="links-wrap">
<a href="/page-A.html" target="_blank">Page A</a>
<a href="/page-B.html" target="_blank">Page B</a>
<a href="/page-C.html" target="_blank">Page C</a>
<a href="/page-D.html" target="_blank">Page D</a>
</section>
<div id="rapid-click-box">
Click me really fast and see what happens!
</div>
CSS
.overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 10%;
background-color: rgba(0, 0, 0, .5);
color: #fff;
text-align: center;
}
#rapid-click-box {
display: inline-block;
width: 100px;
padding: 1em;
color: #fff;
background-color: green;
}
JavaScript
function openWindowFromLink(link, idx) {
var top = idx % 2 * 600;
var left = Math.floor(idx/2) * 600;
var win = window.open(link.href, 'Window '+ top +'x'+ left, 'width=600,height=600,top='+ top +',left='+ left);
if (win) {
link.style.display = "none";
}
return win;
}
function handleLinkClick(ev) {
ev.preventDefault();
var link = ev.target;
var idx = 0;
var prev = link.previousSibling;
while (prev) {
if (prev.nodeType === 1) {
idx++;
}
prev = prev.previousSibling;
}
openWindowFromLink(link, idx);
}
function runApp() {
// Use event delegations to listen for link click events
var linksWrap = document.getElementById('links-wrap');
linksWrap.addEventListener('click', handleLinkClick);
// Build a list of links (without text nodes)
var links = [];
for (var i = 0, l = linksWrap.childNodes.length; i < l; i++) {
if (linksWrap.childNodes[i].nodeType === 1) {
links.push(linksWrap.childNodes[i]);
}
}
// Set up a rapid click box to allow opening many windows
var clickBox = document.getElementById('rapid-click-box');
var clickCount = 0;
clickBox.addEventListener('click', function handleRapidClick (ev) {
var link = links[clickCount];
if (link.style.display !== 'none') {
openWindowFromLink(link, clickCount);
}
if (++clickCount === links.length) {
clickBox.removeEventListener('click', handleRapidClick);
clickBox.style.display = 'none';
}
});
// Finally try and open all windows at once
var button = document.getElementsByTagName('button')[0];
button.addEventListener('click', function handleYesClick (ev) {
ev.preventDefault();
button.removeEventListener('click', handleYesClick);
document.getElementById('welcome-message').style.display = 'none';
for (var i = 0, l = links.length; i < l; i++) {
if ( !openWindowFromLink(links[i], i) ) {
break;
}
}
if (i === links.length) {
...