2017-04-14 17 views
2

私は、スーパークールな手が降りて、コインをピギーバンクに落とす銀行アプリケーションがあります。問題は、手は硬貨を一度落としてから作業を停止することです。JavaScript CSSアニメーションは一度しか動作しません

* { 
    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> 

予告あなたが貯金箱にお金を入金hand.styleアニメーション:

は、ここに私のコードです。

考えてみませんか?

ありがとうございました!

+1

自己完結型の例ですか?私はスーパークールの手も見たいと思っています: – Christoph

+0

ここに画像とCSSをホストするにはどうすればいいですか?) – Brixsta

+1

@Brixsta質問に画像を追加することができます。 CSSの場合は、JavaScriptとHTMLのように投稿してください。 – freginold

答えて

4

これは、CSS animations don't automatically restartです。特に、時間ループを定義していないため、一度だけ実行します。あなたは

.addClass(クラスX上で定義されたアニメーションを再トリガする.addClass( 'X')。removeClass( 'X')を使用するため

一つのアプローチはある)当然のjQueryのです。たとえば、hand.className + = 'my-animation'を使用して、vanilla JSで同じことを行うことができます。以下のようにメソッドの先頭でリセットします。

//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-->

+1

ソリューションは一度だけ実行されます。 IE11を使用します。 – freginold

+2

修正しました。確認してください。今やjQueryは必要ありません! –

+0

すべていいよ!ニースの解決策。 – freginold

1
あなたはアニメーションの後の手のスタイルを削除する必要があり

(スクリプトに3行を追加します):= falseを

...

するvar myHandを。

deposit.addEventListener( 'click'、depositCash);

withdraw.addEventListener( 'click'、withdrawCash);

機能depositCash(){

(myHand)てclearTimeout(myHand)であれば、

...

hand.style.animation = 'moveDown 1.5秒やすさ・イン・アウト、フェードイン1.5秒やすさ・イン・アウト';

残高=番号(残高)+番号(depositAmt);

document.getElementById( 'balance')。value = balance;

myHand = setTimeout(function(){hand.style.animation = '';}、2000);

関連する問題