我有一个银行应用程序,它有一只 super 酷的手放下一枚硬币到存钱 jar 中。问题是,这只手只掉了一次硬币,然后就停止工作了。
这是我的代码:
* {
margin:0px;
padding:0px;
}
body {
background-image:url('../images/bg.png');
}
@keyframes moveDown {
0% {}
100% {margin-top:-220px;}
}
@keyframes fadeIn {
0% {opacity:0;}
90%{opacity:1}
100%{opacity:0;}
}
#hand {
height:300px;
width:300px;
position:absolute;
left:50%;
margin-left:-120px;
margin-top:-350px;
background-image:url("../images/hand.png");
opacity:0;
}
#pigBox {
margin-left:auto;
margin-right:auto;
height:600px;
width:500px;
margin-top:250px;
position:relative;
img {
margin:0px 50px;
}
}
input[type=text] {
float:left;
display:block;
font-size:2em;
width:500px;
border-radius:10px;
border:solid 2px pink;
margin-top:10px;
font-family: 'Gochi Hand', cursive;
text-align:center;
padding:2px;
}
#deposit {
float:left;
display:block;
font-family: 'Gochi Hand', cursive;
font-size:2em;
clear:left;
width:200px;
margin:10px 25px;
border-radius:10px;
background-color:pink;
border:solid 2px pink;
padding:2px;
cursor:pointer;
&:hover {
background-color:white;
}
}
#withdraw {
float:left;
display:block;
font-family: 'Gochi Hand', cursive;
font-size:2em;
width:200px;
margin:10px 25px;
border-radius:10px;
background-color:pink;
border:solid 2px pink;
padding:2px;
cursor:pointer;
&:hover {
background-color:white;
}
}
label {
text-align:center;
display:block;
font-family: 'Gochi Hand', cursive;
font-size:2.5em;
border-radius:10px;
width:300px;
margin-left:100px;
margin-right:100px;
margin-top:5px;
margin-bottom:-15px;
}
document.getElementById('balance').value = "1000"
var balance = document.getElementById('balance').value;
var deposit = document.getElementById('deposit');
var withdraw = document.getElementById('withdraw');
var hand = document.getElementById('hand');
deposit.addEventListener('click', depositCash);
withdraw.addEventListener('click', withdrawCash);
function depositCash() {
var depositAmt = prompt('How much would you like to deposit?');
if(depositAmt != Number(depositAmt)) {
return alert('Please enter a valid integer.');
}
else if (Number(depositAmt) < 0) {
return alert('Please enter a positive integer.');
}
hand.style.animation = 'moveDown 1.5s ease-in-out, fadeIn 1.5s ease-in-out';
balance = Number(balance) + Number(depositAmt);
document.getElementById('balance').value = balance;
}
function withdrawCash() {
var withdrawAmt = prompt('How much you you like to withdraw?');
if(withdrawAmt != Number(withdrawAmt)) {
return alert('Please enter a valid integer.');
}
else if (Number(withdrawAmt) < 0) {
return alert('Please enter a positive integer.');
}
else if(withdrawAmt > balance) {
return alert("Your balance isn't large enough to withdraw that amount!")
}
balance = Number(balance) - Number(withdrawAmt);
document.getElementById('balance').value = balance;
}
<section id="pigBox">
<div id="hand"></div><!-- end of hand-->
<img src="images/pig.png" />
<label>Balance: </label><input type="text" id="balance" />
<button id="deposit"> Deposit </button>
<button id="withdraw"> Withdraw </button>
</section><!-- end of pigBox-->
<a href="http://imgur.com/FxwmGFi"><img src="http://i.imgur.com/FxwmGFi.png" title="source: imgur.com" /></a>
请注意将钱存入存钱 jar 时的手型动画。
大家有什么想法吗?
谢谢!
最佳答案
是因为CSS animations don't automatically restart .特别是因为您没有定义时间循环,所以它只执行一次。
一种方法是使用 .addClass('x').removeClass('x') 来重新触发定义在类 X 上的动画。
.addClass() 当然是 jQuery。您可以在 vanilla JS 中执行相同的操作,例如,使用 hand.className += 'my-animation';并按照以下方法在方法顶部重置。
//ref: https://css-tricks.com/restart-css-animation/
document.getElementById('balance').value = "1000"
var balance = document.getElementById('balance').value;
var deposit = document.getElementById('deposit');
var withdraw = document.getElementById('withdraw');
var hand = document.getElementById('hand');
deposit.addEventListener('click', depositCash);
withdraw.addEventListener('click', withdrawCash);
function depositCash() {
hand.className = 'randoImage';
var depositAmt = prompt('How much would you like to deposit?');
if(depositAmt != Number(depositAmt)) {
return alert('Please enter a valid integer.');
}
else if (Number(depositAmt) < 0) {
return alert('Please enter a positive integer.');
}
hand.className += ' my-animation';
balance = Number(balance) + Number(depositAmt);
document.getElementById('balance').value = balance;
}
function withdrawCash() {
var withdrawAmt = prompt('How much you you like to withdraw?');
if(withdrawAmt != Number(withdrawAmt)) {
return alert('Please enter a valid integer.');
}
else if (Number(withdrawAmt) < 0) {
return alert('Please enter a positive integer.');
}
else if(withdrawAmt > balance) {
return alert("Your balance isn't large enough to withdraw that amount!")
}
balance = Number(balance) - Number(withdrawAmt);
document.getElementById('balance').value = balance;
}
.randoImage {
width: 25px;
height: 25px;
background-image: url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7);
}
* {
margin:0px;
padding:0px;
}
@keyframes moveDown {
0% {}
100% {margin-top:-220px;}
}
@keyframes fadeIn {
0% {opacity:0;}
90%{opacity:1}
100%{opacity:0;}
}
#hand {
height:300px;
width:300px;
position:absolute;
left:50%;
margin-left:-120px;
margin-top:-350px;
/*background-image:url("../images/hand.png");*/
opacity:0;
}
#pigBox {
margin-left:auto;
margin-right:auto;
height:600px;
width:500px;
margin-top:250px;
position:relative;
img {
margin:0px 50px;
}
}
input[type=text] {
float:left;
display:block;
font-size:2em;
width:500px;
border-radius:10px;
border:solid 2px pink;
margin-top:10px;
font-family: 'Gochi Hand', cursive;
text-align:center;
padding:2px;
}
#deposit {
float:left;
display:block;
font-family: 'Gochi Hand', cursive;
font-size:2em;
clear:left;
width:200px;
margin:10px 25px;
border-radius:10px;
background-color:pink;
border:solid 2px pink;
padding:2px;
cursor:pointer;
&:hover {
background-color:white;
}
}
#withdraw {
float:left;
display:block;
font-family: 'Gochi Hand', cursive;
font-size:2em;
width:200px;
margin:10px 25px;
border-radius:10px;
background-color:pink;
border:solid 2px pink;
padding:2px;
cursor:pointer;
&:hover {
background-color:white;
}
}
label {
text-align:center;
display:block;
font-family: 'Gochi Hand', cursive;
font-size:2.5em;
border-radius:10px;
width:300px;
margin-left:100px;
margin-right:100px;
margin-top:5px;
margin-bottom:-15px;
}
.my-animation {
animation: moveDown 1.5s ease-in-out, fadeIn 1.5s ease-in-out;
}
<section id="pigBox">
<div class="randoImage" id="hand"></div><!-- end of hand-->
<img class="randoImage" />
<!--<img src="images/pig.png" />-->
<label>Balance: </label><input type="text" id="balance" />
<button id="deposit"> Deposit </button>
<button id="withdraw"> Withdraw </button>
</section><!-- end of pigBox-->
关于JavaScript CSS 动画只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43412480/