Home Web Front-end H5 Tutorial HTML5 transform three-dimensional cube achieves 360-degree three-dimensional rotation effect without dead ends_html5 tutorial skills

HTML5 transform three-dimensional cube achieves 360-degree three-dimensional rotation effect without dead ends_html5 tutorial skills

May 16, 2016 pm 03:47 PM
transform three dimensional cube

In order to better grasp the essence of transform, we decided to complete a three-dimensional cube model, which can achieve a 360-degree three-dimensional rotation effect without dead ends.

However, it is difficult to determine the view order of each face when rotating, and it is not yet perfectly solved. I hope someone can answer it!

The source code is contributed directly:

Copy the code
The code is as follows:


<script> <br>/**<br>* This version has the following problems: <br>* There is a problem with the zIndex calculation of three-dimensional rotation <br>* It also lacks a variety of models, common ones include: lines, surfaces, cones, spheres, ellipsoids, etc. <br>*/ <br>function cuboidModel(left_init,top_init,long_init,width_init,height_init) <br>{ <br>// //////////////////////////////////////// <br>//Initialize private variables<br>/ //////////////////////////////////////// <br>//Initialize the cuboid position and size<br>var left = left_init; <br>var top = top_init; <br>var long = long_init; <br>var width = width_init; <br>var height = height_init; <br>//Initialize the transformation angle, the default is 0 <br>var rotateX = 0; <br>var rotateY = 0; <br>var rotateZ = 0; <br>var zIndex = 0; <br>//Div object that defines the six sides of the cuboid <br>var div_front ; <br>var div_behind; <br>var div_left; <br>var div_right; <br>var div_top; <br>var div_bottom; <br><br>///////////// //////////////////////////// <br>//Initialize cuboid<br>///////////// //////////////////////////// <br>//Construct six faces based on the initial position. <br>this.init = function() { <br>//Create front div <br>div_front = document.createElement("div"); <br>div_front.className = "cuboid_side_div"; <br>div_front.innerHTML = "div front"; <br>div_front.style.backgroundColor="#f1b2b2"; <br>document.body.appendChild(div_front); <br>//Create behind div <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>//Create left div <br>div_left = document.createElement("div"); <br>div_left.className = "cuboid_side_div"; <br>div_left.innerHTML = "div left"; <br>div_left.style.backgroundColor="#64a3c3"; <br>document.body.appendChild(div_left); <br>//Create right div <br>div_right = document.createElement("div"); <br>div_right .className = "cuboid_side_div"; <br>div_right.innerHTML = "div right"; <br>div_right.style.backgroundColor="#78e797"; <br>document.body.appendChild(div_right); <br>// Create top div <br>div_top = document.createElement("div"); <br>div_top.className = "cuboid_side_div"; <br>div_top.innerHTML = "div top"; <br>div_top.style.backgroundColor=" #e7db78"; <br>document.body.appendChild(div_top); <br>//Create bottom div <br>div_bottom = document.createElement("div"); <br>div_bottom.className = "cuboid_side_div"; <br>div_bottom.innerHTML = "div bottom"; <br>div_bottom.style.backgroundColor="#e79c78"; <br>document.body.appendChild(div_bottom); <br>this.refresh(); <br>} ; <br>//Redraw<br>this.refresh = function() <br>{ <br>//Define div_front style <br>div_front.style.left = left "px"; <br>div_front.style .top = top "px"; <br>div_front.style.width = long "px"; <br>div_front.style.height = height "px"; <br>div_front.style.webkitTransformOrigin = "50% 50% " ((-1)*width / 2) "px"; <br>//Define div_behind style<br>div_behind.style.left = left "px"; <br>div_behind.style.top = 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>//Define div_left style <br>div_left.style.left = left ((long - height) / 2) "px"; <br>div_left.style.top = top ((height - width) / 2) "px"; <br>div_left.style.width = height "px"; <br>div_left.style.height = width "px"; <br>div_left.style.webkitTransformOrigin = "50% 50% " ((-1) * long /2 ) "px"; <br>//Define div_right style<br>div_right.style.left = div_left.style.left; <br>div_right.style .top = 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>//Define div_top style<br>div_top.style.left = left "px"; <br>div_top.style.top = top ((height - width)/ 2) "px"; <br>div_top.style.width = long "px"; <br>div_top.style.height = width "px"; <br>div_top.style.webkitTransformOrigin = "50% 50% " ((-1) * height /2 ) "px"; <br>//Define div_bottom style <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>//Rotate the cube<br>this.rotate = function(x,y,z) { <br>rotateX = x; <br>rotateY = y; <br>rotateZ = z; <br>var rotateX_front = rotateX; <br>var rotateY_front = rotateY; <br>var rotateZ_front = rotateZ; <br>//判断各个面旋转角度 <br>var rotateX_behind = rotateX_front 180; <br>var rotateY_behind = rotateY_front * (-1); <br>var rotateZ_behind = rotateZ_front * (-1); <br>var rotateX_top = rotateX_front 90; <br>var rotateY_top = rotateZ_front; <br>var rotateZ_top = rotateY_front * (-1); <br>var rotateX_bottom = rotateX_front-90; <br>var rotateY_bottom = rotateZ_front * (-1); <br>var rotateZ_bottom = rotateY_front; <br>var rotateX_left = rotateX_front 90; <br>var rotateY_left = rotateZ_front - 90; <br>var rotateZ_left = rotateY_front * (-1); <br>var rotateX_right = rotateX_front 90; <br>var rotateY_right = rotateZ_front 90; <br>var rotateZ_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 = new Array(); <br>for(var i = 0; i < 3;i ) { <br />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 < 1) ||(xI >= -4 && xI < -3)) { <br />} else if((xI >= 1 && xI < 2) ||(xI >= -3 && xI < -2)) { <br />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 < 3) ||(xI >= -2 && xI < -1)) { <br />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 < 4) ||(xI >= -1 && xI < 0)) { <br />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 <= 1) ||(yI > -4 && yI <= -3)) { <br />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 <= 2) ||(yI > -3 && yI <= -2)) { <br />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 <= 3) ||(yI > -2 && yI <= -1)) { <br />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 <= 4) ||(yI > -1 && yI <= 0)) { <br />} <br /><br />if((zI > 0 && zI <= 1) ||(zI > -4 && zI <= -3)) { <br />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 <= 2) ||(zI > -3 && zI <= -2)) { <br />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 <= 3) ||(zI > -2 && zI <= -1)) { <br />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>
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use CSS to achieve the rotating background animation effect of elements How to use CSS to achieve the rotating background animation effect of elements Nov 21, 2023 am 09:05 AM

How to use CSS to implement rotating background image animation effects of elements. Background image animation effects can increase the visual appeal and user experience of web pages. This article will introduce how to use CSS to achieve the rotating background animation effect of elements, and provide specific code examples. First, we need to prepare a background image, which can be any picture you like, such as a picture of the sun or an electric fan. Save the image and name it "bg.png". Next, create an HTML file and add a div element in the file, setting it to

How to compress and format images in Vue? How to compress and format images in Vue? Aug 25, 2023 pm 11:06 PM

How to compress and format images in Vue? In front-end development, we often encounter the need to compress and format images. Especially in mobile development, in order to improve page loading speed and save user traffic, it is critical to compress and format images. In the Vue framework, we can use some tool libraries to compress and format images. Compression using the compressor.js library compressor.js is a JavaS for compressing images

Interpretation of CSS 3D view properties: transform and perspective Interpretation of CSS 3D view properties: transform and perspective Oct 24, 2023 am 08:11 AM

Interpretation of CSS3D view properties: transform and perspective, specific code examples are required Introduction: In modern web design, 3D effects have become a very popular element. Through the transform and perspective properties of CSS, we can easily add 3D visual effects to web pages to make them more vivid and attractive. This article will explain these two properties and provide specific code examples. 1. transform attribute: transf

How to implement image animation and gradient effects in Vue? How to implement image animation and gradient effects in Vue? Aug 18, 2023 pm 06:00 PM

How to implement image animation and gradient effects in Vue? Vue is a progressive framework for building user interfaces that makes it easy to implement animations and gradient effects. In this article, we will introduce how to use Vue to implement image animation and gradient effects, and provide some code examples. 1. Use Vue’s transition effects to implement image animation. Vue provides built-in instructions for transition effects, making it easy to add animation effects to HTML elements. When using transition effects, you can wrap picture elements and add transition instructions on the elements. Example

Exploring CSS rotation properties: transform and rotate Exploring CSS rotation properties: transform and rotate Oct 21, 2023 am 09:46 AM

Exploration of CSS rotation properties: transform and rotate Introduction: In modern web design, we often need to add some special effects to elements to increase the attractiveness and user experience of the page. Among them, the rotation of elements is a common effect that can help us create unique visual effects. In CSS, we can use the transform attribute and its rotation attribute rotate to achieve the rotation of the element. This article explores the use of these two properties and provides code

Methods and techniques on how to achieve the cube rotation effect of images through pure CSS Methods and techniques on how to achieve the cube rotation effect of images through pure CSS Oct 21, 2023 am 09:36 AM

Methods and techniques on how to achieve the cube rotation effect of images through pure CSS. In modern web design, it is very important to add some cool effects, and using CSS to achieve the cube rotation effect is a very interesting and challenging task. This article will introduce a method and technique to achieve the cube rotation effect of images through pure CSS, and provide some specific code examples. First, we need a basic HTML structure, consisting of a container element and six face elements, each of which contains an image. &lt;d

Detailed explanation of CSS circular layout properties: border-radius and transform Detailed explanation of CSS circular layout properties: border-radius and transform Oct 21, 2023 am 11:46 AM

Detailed explanation of CSS circular layout properties: border-radius and transform 1. Introduction In web design, circular layout is often used to create circular elements, such as buttons, avatars, etc. The two key CSS properties for implementing a circular layout are border-radius and transform. This article will introduce in detail how to use the border-radius and transform properties to create a ring layout, and provide specific code examples. 2. border-ra

What does 3D dynamic face recognition recognize? What does 3D dynamic face recognition recognize? Dec 11, 2020 am 11:19 AM

Three-dimensional dynamic face recognition is to recognize the skeletal outline of a person; three-dimensional dynamic face recognition realizes three-dimensional face modeling. Face modeling is based on the input face image, such as eyes, nose tip, mouth corners, eyebrows and various aspects of the face. Component contour points, etc., automatically locate key facial feature points.

See all articles