JSFiddle - React, Tailwind, and code Playground
Show Loading Overlay Based on Clicks
by Hugo Carneiro
HTML
<div class="overlay-panel">
<div class="widget-screen-loading">
<div class="spinner-wrapper">
<div class="spinner-cancel">Cancel</div>
<div class="spinner-content">
<span></span>
</div>
</div>
</div>
<button class="btn btn-default click-me">CLICK ME IF YOU CAN</button>
</div>
CSS
.widget-screen-loading {
opacity: 0;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 99999;
background: rgba(0, 0, 0, 0.4);
pointer-events: none;
-webkit-transition: all .5s ease;
transition: all .5s ease;
}
.clicks-disabled .widget-screen-loading {
pointer-events: all;
}
.clicks-disabled.show-loading .widget-screen-loading {
opacity: 1;
pointer-events: all;
}
.widget-screen-loading .spinner-wrapper {
position: absolute;
width: 220px;
height: 80px;
top: calc(50% - 30px);
left: calc(50% - 110px);
background: #FFF;
border: 1px solid rgba(0, 0, 0, 0.6);
border-radius: 6px;
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
pointer-events: none;
}
.clicks-disabled.show-loading .widget-screen-loading .spinner-wrapper {
pointer-events: all;
}
.widget-screen-loading .spinner-wrapper .spinner-cancel {
position: absolute;
bottom: 0;
left: 0;
right: 0;
text-align: center;
padding: 6px 0;
border-top: 1px solid #d4d4d4;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
z-index: 1;
cursor: pointer;
}
.widget-screen-loading .spinner-wrapper .spinner-cancel:hover {
background-color: #F1F1F1;
}
.widget-screen-loading .spinner-wrapper .spinner-cancel:active {
background-color: #EAEAEA;
}
.widget-screen-loading .spinner-content {
position: absolute;
top: calc(50% - 22px);
left: calc(50% - 83px);
width: 167px;
height: 12px;
margin: 0 auto;
background: #4cc2e0;
border: 1px solid #3c91c4;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.widget-screen-loading .spinner-content > span {
position: absolute;
display: block;
height: 100%;
background-color: #3c91c4;
}
.widget-screen-loading .spinner-content > span {
animation: animationFrames2 1s infinite linear;
-webkit-animation: animationFrames2 1s infinite linear;
-moz-animation: animationFrames2 1s infinite...
JavaScript
$('.click-me').on('click', function() {
$('.overlay-panel').addClass('clicks-disabled');
addEvent();
});
$('.spinner-cancel').on('click', function() {
$('.overlay-panel').removeClass('clicks-disabled show-loading');
});
function addEvent() {
$('.clicks-disabled .widget-screen-loading').on('click', function() {
CountFun();
});
}
var cnt = 0;
function CountFun() {
cnt = parseInt(cnt) + parseInt(1);
if (cnt == 3) {
$('.overlay-panel').addClass('show-loading');
}
}