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 をインストールするためのチュートリアル
この記事では、「'localhost' (10061) の MySQL サーバーに接...
プロセス アドレス空間の分離は、現代のオペレーティング システムの注目すべき機能です。これは、「古い...
1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...
技術初心者として、初めて Linux システムをインストールするプロセスを記録しています。まず、Wi...
vue-cli で構築されたプロジェクト スキャフォールディングでは、すでに autoprefix...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...
1. 公式サイトからmysql-8.0.17-winx64をダウンロードし、Zipファイル形式を選択...
1. Flexレイアウトの紹介Flex は Flexible Box の略で、「柔軟なレイアウト」を...
1. まずMySQLとEclipseの環境を準備します。環境がセットアップされたら、Eclipseの...
この記事では、MySQL 8.0.12 の解凍版のインストールと設定方法を記録し、皆様と共有します。...
1. haslayout と bfc は IE 固有の標準属性です。 2. BFC はページ上の分離...
テキスト入力でプレースホルダーを使用していますが、問題なく動作します。しかし、選択ボックスにはプレー...
HTML+CSS 1. WEB 標準と W3C の理解と知識<br /> タグを閉じ、小...
目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...