使用CSS过渡和Javascript创建一个移动的3D框
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用CSS过渡和Javascript创建一个移动的3D框,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3616字,纯文字阅读大概需要6分钟。
内容图文
![使用CSS过渡和Javascript创建一个移动的3D框](/upload/InfoBanner/zyjiaocheng/816/1895ba278ed74f98a6a65c5a29eb6ddc.jpg)
我一直在玩CSS尝试创建一个3D框,你可以用香草javascript选择面部.
它只是更改框div的className,并使用transition属性在位置之间平滑过渡.
这是一个显示工作示例http://jsfiddle.net/synthet1c/VdDmA/1/的jsfiddle
它目前看起来很酷,但它的表现并不像我想要的那样……有没有人知道如何在盒子过渡时保持盒子稳固?目前,如果脸部从360度变为90度,脸部将以错误的方向旋转270度.我明白为什么它这样做却无法解决它.
我添加了所有的浏览器前缀,但只在firefox上使用过它.
欢呼任何建议,
安德鲁
#right,#back,#left,#front
{
身高:150px;
宽度:150px;
位置:绝对;
边界:1px solid rgba(200,200,200,0.7);
background-color:rgba(0,0,255,0.5);
保证金:0px;
}
.right{
transform: rotateY(90deg) translatez(75px) translatex(-75px);
transition: all 4s;
}
.back{
transform: rotateY(180deg) translatez(0px) translatex(0px);
transition: all 4s;
}
.left{
transform: rotateY(270deg) translatez(75px) translatex(70px);
transition: all 4s;
}
.front{
transform: rotateY(0deg) translatez(150px) translatex(0px);
transition: all 4s;
}
var id = function(elem){
var theId = document.getElementById(elem);
return theId;
}
function button1(){
id('front').className = 'front';
id('right').className = 'right';
id('back').className = 'back';
id('left').className = 'left';
}
function button2(){
id('front').className = 'right';
id('right').className = 'back';
id('back').className = 'left';
id('left').className = 'front';
}
function button3(){
id('front').className = 'back';
id('right').className = 'left';
id('back').className = 'front';
id('left').className = 'right';
}
function button4(){
id('front').className = 'left';
id('right').className = 'front';
id('back').className = 'right';
id('left').className = 'back';
}
解决方法:
它实际上非常简单.你只需要检查是否差异,让我们称之为差异,在你当前所处的角度和你想要达到的角度之间的绝对值是否超过180°,如果是,你旋转360° °减去绝对值的dif,旋转方向由dif的符号给出.
我还对CSS进行了一些更改,如果你想了解更多关于如何创建逼真的立方体的信息,请访问you can check my (really) detailed answer to a similar question.
HTML:
<div class='buttons'>
<button class='btn'>Front</button>
<button class='btn'>Left</button>
<button class='btn'>Back</button>
<button class='btn'>Right</button>
</div>
<div class='house'>
<div class='face front'>Front</div>
<div class='face back'>Back</div>
<div class='face right'>Right</div>
<div class='face left'>Left</div>
</div>
相关CSS:
body /* or parent of .house */ { perspective: 45em; }
.house { position: relative; transform-style: preserve-3d; transition: 1s; }
.house, .face { width: 10em; height: 10em; }
.face {
box-sizing: border-box;
position: absolute;
padding: 1em;
}
.front { transform: translateZ(5em); background: rgba(255, 165, 0, .75); }
.back {
transform: rotateY(180deg) translateZ(5em);
background: rgba(30, 144, 255, .75);
}
.right {
transform: rotateY(90deg) translateZ(5em);
background: rgba(220, 20, 60, .75);
}
.left {
transform: rotateY(-90deg) translateZ(5em);
background: rgba(127, 255, 0, .75);
}
JavaScript的:
(function(){
var btnsEl = document.querySelector('.buttons'), currentAngle = 0;
btnsEl.addEventListener('click', function(e){
var b = e.target.innerHTML.toLowerCase(),
house = document.querySelector('.house'),
btns = {'front': 0, 'left': 90, 'back': 180, 'right': -90},
dif = btns[b] - currentAngle%360;
if(!e.target.classList.contains('btn') || dif === 0) return;
currentAngle += (Math.abs(dif) > 180) ?
(Math.abs(dif) - 360)*Math.abs(dif)/dif :
dif;
house.style['-webkit-transform'] = 'rotateY(' + currentAngle + 'deg)';
house.style['transform'] = 'rotateY(' + currentAngle + 'deg)';
}, false);
}());
此外,您可以使用纯CSS执行旋转3D框.但是,> 180°旋转问题只能通过JavaScript解决.
内容总结
以上是互联网集市为您收集整理的使用CSS过渡和Javascript创建一个移动的3D框全部内容,希望文章能够帮你解决使用CSS过渡和Javascript创建一个移动的3D框所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。