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. レジストリについて公式 Docker ハブは、パブリックイメージを管理するのに適した場所です。...
序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...
最近友人からDockerを触ったことがあるかと聞かれました。あまり自信がなかったので答えられませんで...
元記事:究極の IE6 チートシート: 25 以上の Internet Explorer 6 のバグ...
Vueボタンコンポーネントのカスタムカプセル化コードは参考用です。具体的な内容は次のとおりです。ボタ...
目的nextTickの役割といくつかの簡単な使用シナリオを理解する文章その機能は何ですか?遅延コール...
インターネット時代が成熟するにつれて、オンライン広告の発展も加速しています。圧倒的な広告収入と完璧な...
<em></em> などのフレーズ要素を使用すると、意図した視覚スタイルを維...
1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...
1. 設定ファイルをユーザー環境にコピーし、新しい.vimフォルダを作成し、バンドルサブフォルダを作...
SQL とは何ですか? SQL はデータベースを操作するために使用される言語です。 SQL はすべ...
antd-mobileをインストールするグローバル輸入 npm をインストール antd-mobil...
現在、2016サーバーは、win2008や2012よりも優れたマルチサイトhttpsサービスをサポー...
ビジネス要件最近開発したプロジェクトの一つに、WeChat公式アカウントに関連したH5ページがありま...
フォーム内のフォーム フィールドが無効に設定されている場合、フォーム フィールドの値は送信されません...