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. 参照整合性参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。複数テ...
目次1. シナリオ2. IJavaScriptShadowboxを実装する2.1 メインスレッドの実...
目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...
CSS は Web ページの印刷スタイルを制御します。 CSS を使用して印刷スタイルを制御します。...
目次1. 適用メソッドを置き換え、関数を呼び出すときにパラメータを処理する2. 残りパラメータ(残り...
主キー:キーワード: 主キー機能: null にすることはできず、一意である必要があります。主キーの...
プロジェクトの作業を開始するときは、ワイヤーフレームを使用してアイデアをスケッチすることが重要です。...
MySQL 8.0をインストールする docker run -p 63306:3306 -e MYS...
目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...
以前、会社で小さな機能に取り組んでいたとき、特定の状況でデータがいくつあるかを数えてから問題を修正し...
Vue でフォーム フィールドを記述および検証する方法は多数あります。このブログでは、より一般的に使...
この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...
私の MySQL バージョンは MYSQL V5.7.9 です。古いバージョンを使用してください: ...
目次実装のアイデアアカウント パスワードを保存する方法は 3 つあります。機能インターフェースアカウ...
序文「大規模なフロントエンド プロジェクト向け」に設計されたフロントエンド フレームワークである A...