実現したいこと
スライドアニメーションで図形を斜めに移動させ、移動中に図形をクリックしても2重処理が起こらないようにflagで制御したい。
前提
JavaScriptでアニメーションの練習をしておりますが、斜めに移動させる座標指定の方法がわからず困っています。また、アニメーション中に図形をクリックすると元の位置に戻りカクカクとした動きになってしまいます。flagの処理を行いアニメーション中にクリックしても綺麗に最後まで動くようにしたいです。
図形は右に500px、下に400px動かしたいです。CSSのtransitionを使わずjavascriptのみで行いたいです。記述しているslideAnimation関数を使った形で作りたいと思っております。
該当のソースコード
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>lesson02 アニメーション1</title> <link rel="stylesheet" type="text/css" href="base.css"> </head> <body> <div id="wrapper"> <button onclick="reset()">リセット</button> <div id="box"> <p>box</p> </div><!-- box --> </div><!-- wrapper --></body> </html><script> const element = document.getElementById("box"); element.onclick = function(){ let flag = false; if(flag){ flg = false; }else{ flag=true; } function slideAnimation(element,direction,distance,duration) { let position = 0; function slide(){ position += 1; if (position < distance){ if (direction === "left"){ element.style.transform = `translateX(${-position}px)`; } else if (direction === "right"){ element.style.transform = `translateX(${position}px)`; } else if (direction === "up"){ element.style.transform = `translateY(${-position}px)`; } else if (direction === "down"){ element.style.transform = `translateY(${position}px)`; } }else{ clearInterval(slide); } } setInterval(slide,duration); } slideAnimation(element,"right",300,2); } function reset() { document.getElementById("box") element.style.transform="translate(0)" } </script>
#box {
width: 320px;
height: 180px;
background-color: #fdd;
cursor: pointer;
}
#box p {
line-height: 180px;
font-size: 32px;
text-align: center;
}
試したこと
onclick 関数の中にflagを記入してみましたがうまく動きません。

回答2件
あなたの回答
tips
プレビュー