ホームページ ウェブフロントエンド H5 チュートリアル HTML5 の 3 次元立方体変換により、行き止まりのない 360 度の 3 次元回転効果が実現_html5 チュートリアル スキル

HTML5 の 3 次元立方体変換により、行き止まりのない 360 度の 3 次元回転効果が実現_html5 チュートリアル スキル

May 16, 2016 pm 03:47 PM
transform 三次元 立方体

変換の本質をよりよく理解するために、行き止まりのない 360 度の 3 次元回転効果を実現できる 3 次元立方体モデルを完成させることにしました。

ただし、回転時の各面の表示順序を決定するのは難しく、まだ完全には解決されていません。誰かが答えてくれることを願っています。

ソース コードは直接提供されます:

コードをコピーします
コードは次のとおりです:


<script> <br>/**<br>* このバージョンには次の問題があります: <br>* 3 次元回転の zIndex 計算に問題があります <br>* また、さまざまなモデルが欠如しています。一般的なモデルには、線、曲面、円錐、球、楕円体など。 <br>*/ <br>function cuboidModel(left_init,top_init,long_init,width_init,height_init) <br>{ <br>// /////////////////////////////////////// <br>//プライベート変数を初期化する<br>/ /////////////////////////////////////// <br>//直方体を初期化する位置とサイズ<br>var left = left_init; <br>var length = width_init; <br>var height = height_init;変換角度、デフォルトは 0 です。 <br>varrotateX = 0; <br>var zIndex = 0;直方体の側面 <br>var div_behind; <br>var div_top; <br><br> ///////// /////////////////////////// <br>//直方体を初期化<br>/// ////////// /////////////////////////// <br>//初期値に基づいて 6 つの面を構築します位置。 <br>this.init = function() { <br>// フロント div を作成します <br>div_front = document.createElement("div"); <br>div_front.className = "cuboid_side_div"; = "divfront"; <br>div_front.style.backgroundColor="#f1b2b2"; <br>document.body.appendChild(div_front); <br>div_behind = document.createElement(" div"); <br>div_behind.className = "cuboid_side_div"; <br>div_behind.innerHTML = "div Behind"; <br>div_behind.style.backgroundColor="#bd91eb"; <br>document.body.appendChild( div_behind); <br>// 左 div を作成します <br>div_left = document.createElement("div"); <br>div_left.innerHTML = "div left"; >div_left.style.backgroundColor="#64a3c3"; <br>document.body.appendChild(div_left); <br>div_right = document.createElement("div"); .className = "cuboid_side_div"; <br>div_right.innerHTML = "div right"; <br>document.body.appendChild(div_right);トップ div を作成します <br>div_top = document.createElement("div"); <br>div_top.className = "cuboid_side_div"; <br>div_top.style.backgroundColor=" #e7db78"; <br>document.body.appendChild(div_top); <br>//ボトム div を作成 <br>div_bottom = document.createElement("div"); <br>div_bottom.className = "cuboid_side_div"; <br>div_bottom.innerHTML = "divbottom"; <br>div_bottom.style.backgroundColor="#e79c78"; <br>document.body.appendChild(div_bottom) <br>} ; <br>//再描画<br>this.refresh = function() <br>{ <br>//div_front スタイルを定義します <br>div_front.style.left = left "px";トップ = トップ "px"; <br>div_front.style.width = 長さ "px"; <br>div_front.style.webkitTransformOrigin = "50% 50%" ((-1)*width / 2) "px"; <br>//div_behind スタイルを定義します<br>div_behind.style.left = left "px"; <br>div_behind.style.top = トップ "px" ; <br>div_behind.style.width = div_front.style.width; <br>div_behind.style.height = div_front.style.height; <br>div_behind.style.webkitTransformOrigin = "50% 50% " ((-1) *width / 2) "px"; <br>//div_left スタイルを定義します <br>div_left.style.left = left ((long - height) / 2) "px"; ((高さ - 幅) / 2) "px"; <br>div_left.style.width = 高さ "px"; <br>div_left.style.height = 幅 "px"; "50% 50% " ((-1) * long /2 ) "px"; <br>// div_right スタイルを定義します<br>div_right.style.left = div_left.style.left;トップ = div_left.style.top; <br>div_right.style.width = div_left.style.width; <br>div_right.style.height = div_left.style.height; <br>div_right.style.webkitTransformOrigin = "50 % 50% " ((-1) * long /2 ) "px"; <br>//div_top スタイルを定義<br>div_top.style.left = left "px"; <br>div_top.style.top = top ( (高さ - 幅)/ 2) "px"; <br>div_top.style.width = long "px"; <br>div_top.style.webkitTransformOrigin = " 50% 50% " ((-1) * height /2 ) "px"; <br>// div_bottom スタイルを定義 <br>div_bottom.style.left = div_top.style.left; <br>div_bottom.style.top = div_top.style.top; <br>div_bottom.style.width = div_top.style.width; <br>div_bottom.style.height = div_top.style.height; <br>div_bottom.style.webkitTransformOrigin = "50% 50 % " ((-1) * height /2 ) "px"; <br>this.rotate(rotateX,rotateY,rotateZ); <br>}; <br>//立方体を回転します<br>this.rotate = function(x,y,z) { <br>rotateX = x; <br>rotateZ = z; <br>varrotateX_front = <br>var 回転Y_フロント = 回転Y; <br>varrotateZ_front =rotateZ; <br>// 各面回転角度を判断 <br>varrotateX_behind =rotateX_front 180; <br>varrotateY_behind =rotateY_front * (-1); <br>varrotateZ_behind =rotateZ_front * (-1); <br>varrotateX_top =rotateX_front 90; <br>varrotateY_top =rotateZ_front; <br>varrotateZ_top =rotateY_front * (-1); <br>varrotateX_bottom =rotateX_front-90; <br>varrotateY_bottom =rotateZ_front * (-1); <br>varrotateZ_bottom =rotateY_front; <br>varrotateX_left =rotateX_front 90; <br>varrotateY_left =rotateZ_front - 90; <br>varrotateZ_left =rotateY_front * (-1); <br>varrotateX_right =rotateX_front 90; <br>varrotateY_right =rotateZ_front 90; <br>varrotateZ_right =rotateY_front * (-1); <br>// 各面のz轴表示顺序を判断 <br>var zIndex_front_default = -1; <br>var zIndex_behind_default = -6; <br>var zIndex_top_default = -5; <br>var zIndex_bottom_default = -2; <br>var zIndex_left_default = -4; <br>var zIndex_right_default = -3; <br>var xI = (rotateX_front / 90) % 4; <br>var yI = (rotateY_front / 90) % 4; <br>var zI = (rotateZ_front / 90) % 4; <br>var zIndex_matrix = 新しい Array(); <br>for(var i = 0; i zIndex_matrix.push(new Array()); <br>} <br>zIndex_matrix = [["","zIndex_top",""], <br>["zIndex_left","zIndex_front","zIndex_right"], <br>["","zIndex_bottom", ""]]; <br>var zIndex_matrix_behind = "zIndex_behind"; <br>//计算zIndex <br>if((xI >= 0 && xI = -4 && xI } else if(( xI >= 1 && xI = -3 && xI var zIndex_matrix_tmp = zIndex_matrix[0][1]; <br>zIndex_matrix[0][1] = zIndex_matrix[1][1]; <br>zIndex_matrix[1][1] = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix_behind; <br>zIndex_matrix_behind = zIndex_matrix_tmp; <br>} else if((xI >= 2 && xI = -2 && xI var zIndex_matrix_tmp = zIndex_matrix[0][1] ; <br>zIndex_matrix[0][1] = zIndex_matrix[2][1]; <br>zIndex_matrix[2][1] = zIndex_matrix_tmp; <br>zIndex_matrix_tmp = zIndex_matrix[1][1]; <br>zIndex_matrix[1][1] = zIndex_matrix_behind; <br>zIndex_matrix_behind = zIndex_matrix_tmp; <br>} else if((xI >= 3 && xI = -1 && xI var zIndex_matrix_tmp = zIndex_matrix[0][1]; <br>zIndex_matrix[0][1] = zIndex_matrix_behind; <br>zIndex_matrix_behind = zIndex_matrix[2][1]; <br>zIndex_matrix[2][1] = zIndex_matrix[1][1]; <br>zIndex_matrix[1][1] = zIndex_matrix_tmp; <br>} <br>if((yI > 0 && yI -4 && yI var zIndex_matrix_tmp = zIndex_matrix[1][ 0]; <br>zIndex_matrix[1][0] = zIndex_matrix_behind; <br>zIndex_matrix_behind = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix[1][1]; <br>zIndex_matrix[1][1] = zIndex_matrix_tmp; <br>} else if((yI > 1 && yI -3 && yI var zIndex_matrix_tmp = zIndex_matrix[1][0] ; <br>zIndex_matrix[1][0] = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix_tmp; <br>zIndex_matrix_tmp = zIndex_matrix[1][1]; <br>zIndex_matrix[1][1] = zIndex_matrix_behind; <br>zIndex_matrix_behind = zIndex_matrix_tmp; <br>} else if((yI > 2 && yI -2 && yI var zIndex_matrix_tmp = zIndex_matrix[1][0] ; <br>zIndex_matrix[1][0] = zIndex_matrix[1][1]; <br>zIndex_matrix[1][1] = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix_behind; <br>zIndex_matrix_behind = zIndex_matrix_tmp; <br>} else if((yI > 3 && yI -1 && yI } <br><br>if((zI > 0 && zI -4 && zI var zIndex_matrix_tmp = zIndex_matrix[0][1]; <br>zIndex_matrix[0][1] = zIndex_matrix[1][0]; <br>zIndex_matrix[1][0] = zIndex_matrix[2][1]; <br>zIndex_matrix[2][1] = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix_tmp; <br>} else if((zI > 1 && zI -3 && zI var zIndex_matrix_tmp = zIndex_matrix[0][1] ; <br>zIndex_matrix[0][1] = zIndex_matrix[2][1]; <br>zIndex_matrix[2][1] = zIndex_matrix_tmp; <br>zIndex_matrix_tmp = zIndex_matrix[1][0]; <br>zIndex_matrix[1][0] = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix_tmp; <br>} else if((zI > 2 && zI -2 && zI var zIndex_matrix_tmp = zIndex_matrix[0][1] ; <br>zIndex_matrix[0][1] = zIndex_matrix[1][2]; <br>zIndex_matrix[1][2] = zIndex_matrix[2][1]; <br>zIndex_matrix[2][1] = zIndex_matrix[1][0]; <br>zIndex_matrix[1][0] = zIndex_matrix_tmp; <br>} else if((zI > 3 && zI <= 4) ||(zI > -1 && zI <= 0)) { <br />} <br />//赋值zIndex <br />eval(zIndex_matrix[0][1] "=" zIndex_top_default); <br />eval(zIndex_matrix[1][0] "=" zIndex_left_default); <br />eval(zIndex_matrix[1][1] "=" zIndex_front_default); <br />eval(zIndex_matrix[1][2] "=" zIndex_right_default); <br />eval(zIndex_matrix[2][1] "=" zIndex_bottom_default); <br />eval(zIndex_matrix_behind "=" zIndex_behind_default); <br />//front <br />var transform_rotate_front = "perspective(500px) rotateX(" rotateX_front <br />"deg) rotateY(" rotateY_front <br />"deg) rotateZ(" rotateZ_front "deg)"; <br />div_front.style.webkitTransform = transform_rotate_front; <br />div_front.style.zIndex = zIndex_front; <br />//behind <br />var transform_rotate_behind = "perspective(500px) rotateX(" rotateX_behind <br />"deg) rotateY(" rotateY_behind <br />"deg) rotateZ(" rotateZ_behind "deg)"; <br />div_behind.style.webkitTransform = transform_rotate_behind; <br />div_behind.style.zIndex = zIndex_behind; <br />//left <br />var transform_rotate_left = "perspective(500px) rotateX(" rotateX_left <br />"deg) rotateZ(" rotateZ_left <br />"deg) rotateY(" rotateY_left "deg)"; <br />div_left.style.webkitTransform = transform_rotate_left; <br />div_left.style.zIndex = zIndex_left; <br />//right <br />var transform_rotate_right = "perspective(500px) rotateX(" rotateX_right <br />"deg) rotateZ(" rotateZ_right <br />"deg) rotateY(" rotateY_right "deg)"; <br />div_right.style.webkitTransform = transform_rotate_right; <br />div_right.style.zIndex = zIndex_right; <br />//top <br />var transform_rotate_top = "perspective(500px) rotateX(" rotateX_top <br />"deg) rotateZ(" rotateZ_top <br />"deg) rotateY(" rotateY_top "deg)"; <br />div_top.style.webkitTransform = transform_rotate_top; <br />div_top.style.zIndex = zIndex_top; <br />//bottom <br />var transform_rotate_bottom = "perspective(500px) rotateX(" rotateX_bottom <br />"deg) rotateZ(" rotateZ_bottom <br />"deg) rotateY(" rotateY_bottom "deg)"; <br />div_bottom.style.webkitTransform = transform_rotate_bottom; <br />div_bottom.style.zIndex = zIndex_bottom; <br />}; <br />//重置长方体的长、宽、高 <br />this.resize = function(new_long, new_width, new_height) <br />{ <br />long = new_long; <br />width = new_width; <br />height = new_height; <br />this.refresh(); <br />}; <br />//重置长方体的位置 <br />this.move = function(new_left,new_top) { <br />top = new_top; <br />left = new_left; <br />this.refresh(); <br />}; <br />} <br /><br />function transform() { <br />cuboid.resize(parseInt(document.getElementById("long").value), <br />parseInt(document.getElementById("width").value), <br />parseInt(document.getElementById("height").value)); <br />cuboid.move(parseInt(document.getElementById("left").value), <br />parseInt(document.getElementById("top").value)); <br />cuboid.rotate(parseInt(document.getElementById("rotatex").value), <br />parseInt(document.getElementById("rotatey").value), <br />parseInt(document.getElementById("rotatez").value)); <br />//cuboid.refresh(); <br />} <br /></script>

left:px

top:px

long:px

width:px

height:px

rotateX: deg

rotateY: deg

rotateZ: deg





<script> <br>var cuboid = new cuboidModel(parseInt(document.getElementById("left").value), <br>parseInt(document.getElementById("top").value), <br>parseInt(document.getElementById("long").value), <br>parseInt(document.getElementById("width").value), <br>parseInt(document.getElementById("height").value)); <br>cuboid.init(); <br></script>
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CSS を使用して要素の背景の回転アニメーション効果を実現する方法 CSS を使用して要素の背景の回転アニメーション効果を実現する方法 Nov 21, 2023 am 09:05 AM

CSS を使用して要素の回転背景画像アニメーション効果を実装する方法 背景画像アニメーション効果は、Web ページの視覚的な魅力とユーザー エクスペリエンスを向上させることができます。この記事では、CSS を使用して要素の背景の回転アニメーション効果を実現する方法を紹介し、具体的なコード例を示します。まず、背景画像を用意します。太陽や扇風機など、好きな画像を使用できます。画像を「bg.png」という名前で保存します。次に、HTML ファイルを作成し、ファイルに div 要素を追加して、次のように設定します。

Vue で画像を圧縮してフォーマットするにはどうすればよいですか? Vue で画像を圧縮してフォーマットするにはどうすればよいですか? Aug 25, 2023 pm 11:06 PM

Vue で画像を圧縮してフォーマットするにはどうすればよいですか?フロントエンド開発では、画像を圧縮してフォーマットする必要が生じることがよくあります。特にモバイル開発では、ページの読み込み速度を向上させ、ユーザーのトラフィックを節約するために、画像を圧縮してフォーマットすることが重要です。 Vue フレームワークでは、いくつかのツール ライブラリを使用して画像を圧縮およびフォーマットできます。 compressor.js ライブラリを使用した圧縮 compressor.js は画像を圧縮するための JavaS です。

CSS 3D ビュー プロパティの解釈: 変換と遠近法 CSS 3D ビュー プロパティの解釈: 変換と遠近法 Oct 24, 2023 am 08:11 AM

CSS3D ビュー プロパティの解釈: 変換とパースペクティブ、特定のコード サンプルが必要です はじめに: 現代の Web デザインでは、3D 効果は非常に人気のある要素になっています。 CSS の変換プロパティと遠近法プロパティを使用すると、Web ページに 3D 視覚効果を簡単に追加して、Web ページをより鮮やかで魅力的なものにすることができます。この記事では、これら 2 つのプロパティについて説明し、具体的なコード例を示します。 1. 変換属性:transf

Vue で画像アニメーションとグラデーション効果を実装するにはどうすればよいですか? Vue で画像アニメーションとグラデーション効果を実装するにはどうすればよいですか? Aug 18, 2023 pm 06:00 PM

Vue で画像アニメーションとグラデーション効果を実装するにはどうすればよいですか? Vue は、アニメーションやグラデーション効果を簡単に実装できるユーザー インターフェイスを構築するための進歩的なフレームワークです。この記事では、Vue を使用して画像アニメーションとグラデーション効果を実装する方法を紹介し、いくつかのコード例を示します。 1. Vue のトランジション効果を使用して画像アニメーションを実装する Vue にはトランジション効果の組み込み命令が用意されているため、HTML 要素にアニメーション効果を簡単に追加できます。トランジション効果を使用する場合、画像要素をラップし、要素にトランジション命令を追加できます。例

CSS 回転プロパティの探索: 変換と回転 CSS 回転プロパティの探索: 変換と回転 Oct 21, 2023 am 09:46 AM

CSS 回転プロパティの探索: 変換と回転 はじめに: 最新の Web デザインでは、ページの魅力とユーザー エクスペリエンスを向上させるために、要素に特殊効果を追加する必要がよくあります。その中でも、要素の回転は、ユニークな視覚効果を作成するのに役立つ一般的な効果です。 CSSでは、transform属性とその回転属性rotateを使用して要素の回転を実現できます。この記事では、これら 2 つのプロパティの使用法を説明し、コードを提供します。

CSS 円形レイアウト プロパティの詳細な説明: border-radius とtransform CSS 円形レイアウト プロパティの詳細な説明: border-radius とtransform Oct 21, 2023 am 11:46 AM

CSS の円形レイアウト プロパティの詳細説明: border-radius とtransform 1. はじめに Web デザインでは、ボタンやアバターなどの円形の要素を作成するために円形レイアウトがよく使用されます。円形レイアウトを実装するための 2 つの重要な CSS プロパティは、border-radius と transform です。この記事では、border-radius プロパティと transform プロパティを使用してリング レイアウトを作成する方法を詳しく紹介し、具体的なコード例を示します。 2.ボーダーラ

純粋な CSS を通じて画像の立方体の回転効果を実現する方法とテクニック 純粋な CSS を通じて画像の立方体の回転効果を実現する方法とテクニック Oct 21, 2023 am 09:36 AM

純粋な CSS を使用して画像の立方体の回転効果を実現する方法とテクニック。現代の Web デザインでは、いくつかのクールな効果を追加することが非常に重要であり、CSS を使用して立方体の回転効果を実現することは、非常に興味深くやりがいのある作業です。この記事では、純粋な CSS を使用して画像の立方体の回転効果を実現する方法とテクニックを紹介し、いくつかの具体的なコード例を示します。まず、基本的な HTML 構造が必要です。この構造は、コンテナー要素と 6 つのフェイス要素で構成され、それぞれに画像が含まれています。 &lt;d

3D 動的顔認識は何を認識しますか? 3D 動的顔認識は何を認識しますか? Dec 11, 2020 am 11:19 AM

3次元動的顔認識は人の骨格輪郭を認識することであり、3次元動的顔認識は、目、鼻先、口角、眉毛などの入力顔画像に基づいて3次元の顔モデリングを実現します。コンポーネントの輪郭点などにより、主要な顔の特徴点が自動的に特定されます。

See all articles