Reputation: 965
I am new to CSS Animations and am trying to chain animation of checkboxes being checked. Basically, I have a list of Items and corresponding checkboxes. My aim is to start checking the checkboxes one after the other.
I have done the checking animation (animated tick) with the help of few online tutorials. Though now I am unable to figure out a way to replicate the clicking event of checkboxes to start the animation.
https://jsfiddle.net/vishsid73/a7L5kdvL/2/
@-moz-keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@-webkit-keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-webkit-keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-moz-keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
input[type=checkbox] { display: none; }
.check-box {
height: 50px;
width: 50px;
background-color: transparent;
border: 5px solid black;
border-radius: 5px;
position: relative;
display: inline-block;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-transition: border-color ease 0.2s;
-o-transition: border-color ease 0.2s;
-webkit-transition: border-color ease 0.2s;
transition: border-color ease 0.2s;
cursor: pointer;
}
.check-box::before,
.check-box::after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
height: 0;
width: 10px;
background-color: #23527c;
display: inline-block;
-moz-transform-origin: left top;
-ms-transform-origin: left top;
-o-transform-origin: left top;
-webkit-transform-origin: left top;
transform-origin: left top;
border-radius: 5px;
content: ' ';
-webkit-transition: opacity ease .5;
-moz-transition: opacity ease .5;
transition: opacity ease .5;
}
.check-box::before {
top: 40px;
left: 20px;
/* box-shadow: 0 0 0 5px #667788;*/
-moz-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
-o-transform: rotate(-135deg);
-webkit-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.check-box::after {
/* top: 37px; */
top: 20px;
left: 0px;
/* left: 5px;*/
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
input[type=checkbox]:checked + .check-box,
.check-box.checked { border-color: #23527c; }
input[type=checkbox]:checked + .check-box::after,
.check-box.checked::after {
/* height: 50px;*/
height: 25px;
-moz-animation: dothabottomcheck 0.2s ease 0s forwards;
-o-animation: dothabottomcheck 0.2s ease 0s forwards;
-webkit-animation: dothabottomcheck 0.2s ease 0s forwards;
animation: dothabottomcheck 0.2s ease 0s forwards;
}
input[type=checkbox]:checked + .check-box::before,
.check-box.checked::before {
/* height: 120px;*/
height: 70px;
-moz-animation: dothatopcheck 0.4s ease 0s forwards;
-o-animation: dothatopcheck 0.4s ease 0s forwards;
-webkit-animation: dothatopcheck 0.4s ease 0s forwards;
animation: dothatopcheck 0.4s ease 0s forwards;
}
<body>
<div class="container">
<h2>Sid Anim</h2>
<input type="checkbox" id="cbtest" />
<label for="cbtest" class="check-box"></label>
<br><br>
<input type="checkbox" id="cbtest1" />
<label for="cbtest1" class="check-box"></label>
<br><br>
<input type="checkbox" id="cbtest2" />
<label for="cbtest2" class="check-box"></label>
</div>
</body>
Please Guide how to chain the animation with 1.5 sec gap after previous
Upvotes: 2
Views: 2099
Reputation: 115372
I don't claim to be any JQuery expert but you can do it like this
$(document).ready(function() {
$('#cbtest').click(function() {
$('input').each(function(i) {
var myDelay = 500
var myElement = $(this);
setTimeout(function() {
myElement.prop('checked', true);
}, i * myDelay);
});
});
});
@-moz-keyframes dothabottomcheck {
0% {
height: 0;
}
100% {
height: 25px;
}
}
@-webkit-keyframes dothabottomcheck {
0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes dothabottomcheck {
0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes dothatopcheck {
0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-webkit-keyframes dothatopcheck {
0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-moz-keyframes dothatopcheck {
0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
input[type=checkbox] {
display: none;
}
.check-box {
height: 50px;
width: 50px;
background-color: transparent;
border: 5px solid black;
border-radius: 5px;
position: relative;
display: inline-block;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-transition: border-color ease 0.2s;
-o-transition: border-color ease 0.2s;
-webkit-transition: border-color ease 0.2s;
transition: border-color ease 0.2s;
cursor: pointer;
}
.check-box::before,
.check-box::after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
height: 0;
width: 10px;
background-color: #23527c;
display: inline-block;
-moz-transform-origin: left top;
-ms-transform-origin: left top;
-o-transform-origin: left top;
-webkit-transform-origin: left top;
transform-origin: left top;
border-radius: 5px;
content: ' ';
-webkit-transition: opacity ease .5;
-moz-transition: opacity ease .5;
transition: opacity ease .5;
}
.check-box::before {
top: 40px;
left: 20px;
/* box-shadow: 0 0 0 5px #667788;*/
-moz-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
-o-transform: rotate(-135deg);
-webkit-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.check-box::after {
/* top: 37px; */
top: 20px;
left: 0px;
/* left: 5px;*/
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
input[type=checkbox]:checked + .check-box,
.check-box.checked {
border-color: #23527c;
}
input[type=checkbox]:checked + .check-box::after,
.check-box.checked::after {
/* height: 50px;*/
height: 25px;
-moz-animation: dothabottomcheck 0.2s ease 0s forwards;
-o-animation: dothabottomcheck 0.2s ease 0s forwards;
-webkit-animation: dothabottomcheck 0.2s ease 0s forwards;
animation: dothabottomcheck 0.2s ease 0s forwards;
}
input[type=checkbox]:checked + .check-box::before,
.check-box.checked::before {
/* height: 120px;*/
height: 70px;
-moz-animation: dothatopcheck 0.4s ease 0s forwards;
-o-animation: dothatopcheck 0.4s ease 0s forwards;
-webkit-animation: dothatopcheck 0.4s ease 0s forwards;
animation: dothatopcheck 0.4s ease 0s forwards;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div class="container">
<h2>Sid Anim</h2>
<input type="checkbox" id="cbtest" />
<label for="cbtest" class="check-box"></label>
<br/>
<br/>
<input type="checkbox" id="cbtest1" />
<label for="cbtest1" class="check-box"></label>
<br/>
<br/>
<input type="checkbox" id="cbtest2" />
<label for="cbtest2" class="check-box"></label>
</div>
</body>
Upvotes: 1
Reputation: 36732
You can achieve this using your current CSS animations by checking the checkboxes with a delay, using Javascript...
JQuery Version If you are already using jQuery on your page...
$('input[type="checkbox"]').each(function(i) {
var item = $(this);
setTimeout(function() {
item.prop('checked','checked');
}, 1000*i);
});
@-moz-keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@-webkit-keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-webkit-keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-moz-keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
input[type=checkbox] { display: none; }
.check-box {
height: 50px;
width: 50px;
background-color: transparent;
border: 5px solid black;
border-radius: 5px;
position: relative;
display: inline-block;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-transition: border-color ease 0.2s;
-o-transition: border-color ease 0.2s;
-webkit-transition: border-color ease 0.2s;
transition: border-color ease 0.2s;
cursor: pointer;
}
.check-box::before,
.check-box::after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
height: 0;
width: 10px;
background-color: #23527c;
display: inline-block;
-moz-transform-origin: left top;
-ms-transform-origin: left top;
-o-transform-origin: left top;
-webkit-transform-origin: left top;
transform-origin: left top;
border-radius: 5px;
content: ' ';
-webkit-transition: opacity ease .5;
-moz-transition: opacity ease .5;
transition: opacity ease .5;
}
.check-box::before {
top: 40px;
left: 20px;
/* box-shadow: 0 0 0 5px #667788;*/
-moz-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
-o-transform: rotate(-135deg);
-webkit-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.check-box::after {
/* top: 37px; */
top: 20px;
left: 0px;
/* left: 5px;*/
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
input[type=checkbox]:checked + .check-box,
.check-box.checked { border-color: #23527c; }
input[type=checkbox]:checked + .check-box::after,
.check-box.checked::after {
/* height: 50px;*/
height: 25px;
-moz-animation: dothabottomcheck 0.2s ease 0s forwards;
-o-animation: dothabottomcheck 0.2s ease 0s forwards;
-webkit-animation: dothabottomcheck 0.2s ease 0s forwards;
animation: dothabottomcheck 0.2s ease 0s forwards;
}
input[type=checkbox]:checked + .check-box::before,
.check-box.checked::before {
/* height: 120px;*/
height: 70px;
-moz-animation: dothatopcheck 0.4s ease 0s forwards;
-o-animation: dothatopcheck 0.4s ease 0s forwards;
-webkit-animation: dothatopcheck 0.4s ease 0s forwards;
animation: dothatopcheck 0.4s ease 0s forwards;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body>
<div class="container">
<h2>Sid Anim</h2>
<input type="checkbox" id="cbtest" />
<label for="cbtest" class="check-box"></label>
<br><br>
<input type="checkbox" id="cbtest1" />
<label for="cbtest1" class="check-box"></label>
<br><br>
<input type="checkbox" id="cbtest2" />
<label for="cbtest2" class="check-box"></label>
</div>
</body>
Javascript Version If you need a vanilla js solution...
checkboxes = document.getElementsByTagName("input");
for(var i=0;i < checkboxes.length;i++) {
doSetTimeout(i)
}
function doSetTimeout(i) {
setTimeout(function() {
checkboxes[i].checked = true;
}, 1000*i);
}
@-moz-keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@-webkit-keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes
dothabottomcheck { 0% {
height: 0;
}
100% {
height: 25px;
}
}
@keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-webkit-keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
@-moz-keyframes
dothatopcheck { 0% {
height: 0;
}
50% {
height: 0;
}
100% {
height: 70px;
}
}
input[type=checkbox] { display: none; }
.check-box {
height: 50px;
width: 50px;
background-color: transparent;
border: 5px solid black;
border-radius: 5px;
position: relative;
display: inline-block;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-transition: border-color ease 0.2s;
-o-transition: border-color ease 0.2s;
-webkit-transition: border-color ease 0.2s;
transition: border-color ease 0.2s;
cursor: pointer;
}
.check-box::before,
.check-box::after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
height: 0;
width: 10px;
background-color: #23527c;
display: inline-block;
-moz-transform-origin: left top;
-ms-transform-origin: left top;
-o-transform-origin: left top;
-webkit-transform-origin: left top;
transform-origin: left top;
border-radius: 5px;
content: ' ';
-webkit-transition: opacity ease .5;
-moz-transition: opacity ease .5;
transition: opacity ease .5;
}
.check-box::before {
top: 40px;
left: 20px;
/* box-shadow: 0 0 0 5px #667788;*/
-moz-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
-o-transform: rotate(-135deg);
-webkit-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.check-box::after {
/* top: 37px; */
top: 20px;
left: 0px;
/* left: 5px;*/
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
input[type=checkbox]:checked + .check-box,
.check-box.checked { border-color: #23527c; }
input[type=checkbox]:checked + .check-box::after,
.check-box.checked::after {
/* height: 50px;*/
height: 25px;
-moz-animation: dothabottomcheck 0.2s ease 0s forwards;
-o-animation: dothabottomcheck 0.2s ease 0s forwards;
-webkit-animation: dothabottomcheck 0.2s ease 0s forwards;
animation: dothabottomcheck 0.2s ease 0s forwards;
}
input[type=checkbox]:checked + .check-box::before,
.check-box.checked::before {
/* height: 120px;*/
height: 70px;
-moz-animation: dothatopcheck 0.4s ease 0s forwards;
-o-animation: dothatopcheck 0.4s ease 0s forwards;
-webkit-animation: dothatopcheck 0.4s ease 0s forwards;
animation: dothatopcheck 0.4s ease 0s forwards;
}
<body>
<div class="container">
<h2>Sid Anim</h2>
<input type="checkbox" id="cbtest" />
<label for="cbtest" class="check-box"></label>
<br><br>
<input type="checkbox" id="cbtest1" />
<label for="cbtest1" class="check-box"></label>
<br><br>
<input type="checkbox" id="cbtest2" />
<label for="cbtest2" class="check-box"></label>
</div>
</body>
Upvotes: 1