JS でアニメーションを記述する場合、移動前に相対位置を絶対位置に変換してからアニメーション機能を実行する、レイアウト変換がよく使用されます。ネイティブ JS で実装されたレイアウト変換のデモです。効果は次のとおりです。 以下はコード実装です。どなたでもコピー、貼り付け、コメントしていただけます。 <!DOCTYPE html> <html> <ヘッド> <meta http-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8" /> <title>ネイティブ JS がアニメーションのレイアウト変換を実装</title> <スタイル> * { マージン: 0; パディング: 0; } #ul1 { 幅: 366ピクセル; マージン: 0 自動; 位置: 相対的; } #ul1 li { リストスタイル: なし; 幅: 100ピクセル; 高さ: 100px; 背景: #CCC; 境界線: 1px 黒一色; フロート: 左; マージン: 10px; zインデックス: 1; } </スタイル> <!-- モーションフレーム --> <スクリプト> // 指定されたスタイルの値を取得する function getStyle(obj, attr) { (obj.currentStyle)の場合{ obj.currentStyle[attr]を返します。 } それ以外 { getComputedStyle(obj, false)[attr]を返します。 } }; //モーション関数 function startMove(obj, json, fn) { タイマー間隔をクリアします。 obj.timer = setInterval(関数() { var bStop = true; for (var attr in json) { var iCur = 0; 属性 == '不透明度' の場合 { iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100); } それ以外 { iCur = parseInt(getStyle(obj, attr)); } var iSpeed = (json[attr] - iCur) / 8; iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); iCur != json[attr] の場合 { bStop = false; } 属性 == '不透明度' の場合 { obj.style.filter = 'alpha(不透明度:' + (iCur + iSpeed) + ')'; obj.style.opacity = (iCur + iSpeed) / 100; } それ以外 { obj.style[attr] = iCur + iSpeed + 'px'; } } if (bStop) { タイマー間隔をクリアします。 もし(関数){ 関数fn(); } } }, 30) } </スクリプト> <!-- イベントを追加 --> <スクリプト> window.onload = 関数(){ var oUl = document.getElementById('ul1'); var aLi = oUl.getElementsByTagName('li'); var iMinZindex = 2; var i = 0; // 1. レイアウト変換 for (i = 0; i < aLi.length; i++) { //aLi[i].innerHTML='左:'+aLi[i].offsetLeft+'、上:'+aLi[i].offsetTop; aLi[i].style.left = aLi[i].offsetLeft + 'px'; aLi[i].style.top = aLi[i].offsetTop + 'px'; } // 2つのループが必要です for (i = 0; i < aLi.length; i++) { aLi[i].style.position = '絶対'; //最初のループでは、オフセット値によって元のマージン値がすでに計算されているため、ここでクリアする必要があります。aLi[i].style.margin = '0'; } // 2. イベントを追加します for (i = 0; i < aLi.length; i++) { aLi[i].onmouseover = 関数 () { // スタックを防ぐために、現在の zIndex が増加し続けるようにします。this.style.zIndex = iMinZindex++; startMove(これ、{ 幅: 200, 高さ: 200, 左余白: -50, マージン上: -50 }); }; aLi[i].onmouseout = 関数 () { startMove(これ、{ 幅: 100, 高さ: 100, 左余白: 0, マージン上: 0 }); }; } }; </スクリプト> </head> <本文> <ul id="ul1"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </本文> </html> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル
1.コマンドが見つかりません コマンドが見つかりません2. そのようなファイルまたはディレクトリは...
インストールユーザーにインストール権限があることを確認してくださいルートスイッチなしsuルート(su...
目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...
ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...
目次ログインビジネスプロセスログイン機能の実装要約するまず、エフェクトの実装プロセスを見てみましょう...
序文開発プロセスでは、ブラウザレベルでユーザーが実行した操作を記憶するなど、同様の要件に遭遇すること...
1. 最初の方法は、unhup コマンドを直接使用してプログラムをバックグラウンドで実行することです...
必要フィールドをクエリする場合、フィールドに同じ値を指定する必要があります。この値はハードコードする...
序文従来のWEBレイアウトに沿うため、すべてヘッダーとフッターモードの左・中央・右レイアウトで書かれ...
React 16の内容です。最新技術ではありませんが、ドキュメントで調べるまであまり話題に上がらなか...
今日、データベース操作はますますアプリケーション全体のパフォーマンスのボトルネックになりつつあり、こ...
この記事では、スクロール可能なポップアップウィンドウ効果を実現するためのVueの具体的なコードを参考...
この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...
序文JavaScript では、document.querySelector("#demo...
序文データベースの応用において、プログラマーは継続的な実践を通じて多くの経験を積んできました。これら...