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 をインストールするためのチュートリアル
目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...
ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...
目次1. 解決策2. サーバーから返されたトークンをブラウザに保存する3. リクエストにアクセス権限...
Git は vscode に統合されており、git コマンドをいくつか記述しなくても、クリックするだ...
通常、CSS セレクターは上から下に選択し、親要素を介して子要素を選択します。では、子要素を介して親...
この記事では主に、ElementUI テーブルのヘッダー アイコンにフローティング プロンプトを追加...
この記事では、jQueryブリージングカルーセル制作原理の具体的なプロセスを参考までに紹介します。具...
今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇し...
前の章では、高性能な MySQL に不可欠な、最適化されたデータ型の選択方法とインデックスの効率的な...
この記事では、MySQL での重複キー更新時の replace into と insert into...
概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...
Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピュ...
この記事では、explain を使用して SQL ステートメントを分析する方法を紹介します。実際、イ...
MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...
今日は奇妙なネットワーク問題に遭遇しました。調査プロセスといくつかの構成状況を記録し、Linux で...