問題文の適切な方法
の例に見られるように、ボタンのクリックでビューポートの周囲に沿って、正方形を移動するには:
https://codepen.io/vineetrok/pen/XRowdB
何が必要ですか?
私はこのコードをCSSのtransition
と組み合わせて使用しています。私はtransition
とsetInterval()
の組み合わせが遅れを引き起こしていると思います。これを行うにはjavascriptを使用するより効率的な方法がありますか?
私のコードを以下に示します。
HTML
<div class="box" style="left:0;top:0"></div>
<button type="button" name="button" onclick="init()">Start!</button>
CSS
.box{
transition: all 1s linear;
}
JS
var elem = document.querySelector(".box");
var viewportWidth = window.innerWidth;
var viewportHeight = window.innerHeight;
var dimension = elem.clientWidth;
var deltaX = viewportWidth - dimension;
var deltaY = viewportHeight - dimension;
function move(x,y){
if(x <=0 && y==0){
elem.style.left=(deltaX)+"px";
}
else if(x==(deltaX) && y==0){
elem.style.top=(deltaY)+"px";
}
else if(x==(deltaX) && y==(deltaY)){
elem.style.left="0px";
}
else if(x==0 && y==(deltaY)){
elem.style.top="0px";
}
}
function getCoordinates(elem){
return {
x: elem.getBoundingClientRect().left,
y: elem.getBoundingClientRect().top
}
}
var init = function(){
var clearTimer = 1;
var startTimer = setInterval(function(){
move(getCoordinates(elem).x,getCoordinates(elem).y)
}, 1000);
clearTimer++;
if(clearTimer>=4){
clearInterval(startTimer);
}
}
私は同意しません。 CSSアニメーションはハードウェアアクセラレーションを使用しており、CPUによって処理されるJS計算アニメーションよりもずっと軽くて高速です。 –
それはそれより複雑です(私の簡単な要約よりも複雑です)。一部のCSSトランジションでは、ハードウェアアクセラレーションを使用できますが、すべてではありません。また、JavaScriptよりも頻繁に低速ではありません。しかし、それは多くの要因に依存します。いずれにしても、パフォーマンスが問題であることが分かっていない場合は、問題を最もよく解決し、パフォーマンスの問題を気にすることのないソリューションを選択するのが最善です。 https://greensock.com/css-performance https://blog.alexmaccaw.com/css-transitions –
@ConorMancone JSとCSSの両方を使用して移行を管理するとトラブルが発生することに同意します。私は毎回違うタイミングを取る。また、私はこれのjqueryソリューションを知っています。しかし、私はここでJSの唯一の解決策を探しています。私はCSS遷移も排除しようとしています。 – md1hunox