現在、ステージ/ヒーローには、背景イメージ(テキストイメージ)をループしたdivがあり、アニメーションを作成するためにjQueryを使用しているサイトで作業していますスクリーン上を移動する画像の「海」の外観を与えるためのそれらの配置。jQueryバックグラウンドポジションとCSSアニメーションポジションのバグと効率
var position = 0;
setInterval(function() {
position -= 1;
$(".sub-image-1").css({ "background-position":+ position +"px 0px" })
}, 20);
setInterval(function() {
position -= 1;
$(".sub-image-2").css({ "background-position":+ position +"px 0px" })
}, 140);
setInterval(function() {
position -= 1;
$(".sub-image-3").css({ "background-position":+ position +"px 0px" })
}, 200);
.stage-image {
width:100vh;
height:30vh;
}
.stage-sub-image {
position:absolute; top:0;
width:100%;
height:100%;
background-repeat:repeat-x;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="stage-image">
<div class="stage-sub-image sub-image-1" style="background:url(https://upload.wikimedia.org/wikipedia/commons/c/ca/Triple-Spiral-4turns_green_transparent.png)"></div>
<div class="stage-sub-image sub-image-2" style="background:url(https://upload.wikimedia.org/wikipedia/commons/b/be/Blender3D_Lisc_lipy-Transparent.png)"></div>
<div class="stage-sub-image sub-image-3" style="background:url(https://cdn0.iconfinder.com/data/icons/ball/256/transparent.png)"></div>
</div>
以下のブラウザ集約的で、このソリューションへのより良い方法がある場合、私は興味があります。私はこの場合、setInterval
が必要以上にサイトに多くのオーバーヘッドを加えると感じています。このようなことに対処するためのよりよいアプローチはありますか?パフォーマンスの問題の上で、JSを介して行われたアニメーションは非常に不安定であり、私はよりスムーズな効果を望んでいます。ここで
は、私は現在、上記の持っているもののCodePenだ:これはに近いされている間
https://codepen.io/stufu/pen/GvJdxq
UPDATE
@FuriousDは、これを達成するためにCSSを使用して、以下の優れた提案を行いました私が望んでいたことは、CSSのアニメーションはバックグラウンドポジションの終わりに当たったときにジャンプを引き起こします。
ここで自分の答えではなく、アニメーションが完了した後、「ジャンプ」の新しい問題に基づいて、Codepenです:
おかげでここに私の結果です。私は私の質問を十分に説明していませんでした。残念ながら、値をハードコーディングする上のアプローチではうまくいきません。幅の終わりに達すると "ジャンプ"があります –
JSをCSSアニメーションと組み合わせて使用することができるアプローチがいくつかあります。例えば、JSを使ってアニメーションを再トリガするなどです。ハードコーディングの値は含まれていませんが、些細な解決策はありません。 – FuriousD
問題の一部だと思います。幅をハードコードすると(たとえそれがvwであっても)、最後にスキップします。私は何が起こるかを示すためにコードを設定します:https://codepen.io/stufu/pen/YxXaLR 純粋なJSのアプローチの利点は、無限にバックグラウンドの位置を無限に変更することです、CSSはそれを再開します。しかし、私は苦労してsetInterval –