この記事では、受賞歴のあるHTML5モバイル端末でのシームレススクロールアニメーションの実装例を中心に紹介します。内容がとても良いので、参考にさせていただきます。
この記事では、受賞歴のあるHTML5モバイル端末でのシームレススクロールアニメーションの実装例を紹介したいと思います。詳細は次のとおりです:
要件分析
はは、とてもわかりやすいですね。動的図を見た後。
転がる、転がる、どうやって作るの?要約すると、
html スケルトン
は、最も外側の
は移動を制御するために使用され、
まず基本的な CSS スタイルを実装します
<p class="roll" id="roll"> <ul> <li>第一个结构</li> <li>第二个结构</li> <li>第三个结构</li> <li>第四个结构</li> <li>第五个结构</li> <li>第六个结构</li> <li>第七个结构</li> <li>第八个结构</li> </ul> </p>
一般的なスタイルを見てみましょう:
実装のアイデア
1. jquery のアニメーションアニメーションを使用しますアニメーション化する( )メソッド
$(selector).animate(styles,speed,easing,callback)
パラメータ:
speed: アニメーションの速度を指定します
@数値:1000 (ms)
@文字列: "slow"、"normal"、"fast"
イージング: アニメーション速度 (スイング、リニア)
callback: 関数実行後のコールバック関数
*{ margin:0; padding:0; } .roll{ margin: 100px auto; width: 200px; height: 40px; overflow:hidden; border: 1px solid aquamarine; } .roll ul{ list-style: none; } .roll li{ line-height:20px; font-size:14px; text-align:center; }
css3 のキーフレームを通じて、ステップをジャンプする効果を得ることができます。まずそのアイデアを簡単に見てみましょう。
予備1. 1枚ずつ巻いている場合は、前のものを後ろにコピーする必要があります。を選択し、1 つ目と 2 つ目をコピーします。
$(document).ready(function(){ setInterval(function(){ // 添加定时器,每1.5s进行转换 $("#roll").find("ul:first").animate({ marginTop:"-40px" //每次移动的距离 },500,function(){ // 动画运动的时间 //$(this)指的是ul对象, //ul复位之后把第一个元素和第二个元素插入 //到ul的最后一个元素的位置 $(this).css({marginTop:"0px"}).find("li:first").appendTo(this); $(this).find("li:first").appendTo(this); }); },1500) });
2. 次に、スクロールする回数と各回の秒数を計算します。例では 2 回のスクロールに 5 秒かかるため、CSS3 のアニメーション時間は 5 秒です。では、@keyframe はいくつの部分に分割する必要があるのでしょうか?一時停止なので、各スクロールには 2 つのコピーが必要で、最後のスクロールはジャンプする必要があるため、コピーは 1 つだけなので、5 * 2 - 1 = 9 つのコピーが必要になることがわかります。コードを見るとわかります:
<p class="roll" id="roll"> <ul> <li>第一个结构</li> <li>第二个结构</li> <li>第三个结构</li> <li>第四个结构</li> <li>第五个结构</li> <li>第六个结构</li> <li>第七个结构</li> <li>第八个结构</li> <li>第一个结构</li> <li>第二个结构</li> </ul> </p>
。
上級数値が不確かなため、動的に計算する必要がある場合は、jsを使用して@keyframesを動的に追加し、間隔と移動距離を計算するだけで済みます。
1. まず
4.
/*这里不做兼容性处理*/ .roll ul{ list-style: none; animation: ani 5s linear infinite; /*动画ani,5s,循环匀速播放*/ } @keyframes ani{ 0%{ margin-top: 0; } 12.5%{ margin-top: 0; } 25%{ margin-top: -40px; } 37.5%{ margin-top: -40px; } 50%{ margin-top: -80px; } 62.5%{ margin-top: -80px; } 75%{ margin-top: -120px; } 87.5%{ margin-top: -120px; } 100%{ margin-top: -160px; /*最后是一个,这样可以打断动画*/ } }
function addKeyFrame(){ var ulObj = $("#roll ul"), //获取ul对象 length = $("#roll li").length, //获取li数组长度 per = 100 / (length / 2 * 2 ); //计算中间间隔百分比 // 拼接字符串 var keyframes = `\ @keyframes ani{`; for(var i = 0 ; i<=length ; i++ ){ keyframes+=`${i * per}%{ margin-top: ${i % 2 == 0 ? -i * 20 : -(i - 1) * 20}px; }`; } keyframes+='}'; var liFirst = $("#roll li:first"), //获取第一个元素 liSec = liFirst.next(); //获取第二个元素 ulObj.append(liFirst.clone()).append(liSec.clone()); //将两个元素插入到ul里面 $("<style>").attr("type","text/css").html(keyframes).appendTo($("head")); //创建style标签把关键帧插入到头部 ulObj.css("animation","ani 5s linear infinite"); //给ul添加css3动画 } addKeyFrame();
HTML5 Canvasを使用してオナニーゲームを実装する
HTML5 Canvasを使用してピクセル幅の細い線の描画を実装する
以上が受賞歴のあるHTML5モバイル端末のシームレスなスクロールアニメーションの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。