css33d变换之综合运用-3dbox

homehtml      2022-02-17     341

关键词:

先上效果图吧

技术图片

点击‘roll‘按钮,会出现旋转的动画

代码如下

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="JS/jquery-1.12.2.min.js"></script>
    <style type="text/css">
        div#camera{
            width: 500px;
            height: 500px;
            outline: 1px solid black;
            margin:100px auto;
            position: relative;
            perspective: 1000px;
        }
        div#camera>div{
            width: 400px;
            height: 400px;
            position: absolute;
            top:calc(50% - 200px);
            left:calc(50% - 200px);
            outline: 1px solid black;
            transition: all 1s linear;
            background-color: #fff;    
        }
        div#camera>div:nth-child(1){
            transform: rotateY(0deg) translateZ(200px);
            z-index: 99;
        }
        div#camera>div:nth-child(2){
            transform: rotateY(90deg) translateZ(200px);
        }        
        div#camera>div:nth-child(3){
            transform: rotateY(180deg) translateZ(200px);
        }
        div#camera>div:nth-child(4){
            transform: rotateY(270deg) translateZ(200px);
        }
        div#camera>div>img{
            width: 100%;
        }
        button{
            margin: 10px auto;
            display: block;
        }
    </style>
</head>
<body>
    <div id="camera">
        <div><img src="Img/102342_40949584.png"/></div>
        <div><img src="Img/102342_40949584.png"/></div>
        <div><img src="Img/102342_40949584.png"/></div>
        <div><img src="Img/102342_40949584.png"/></div>
    </div>
    <button value="roll">roll</button>
    <script type="text/javascript">
        $(document).ready(function() {
            (function() {
                var count=0, reversedCount=4; 
                var changeRotateY = function($ele, deg) {
                    var index = $ele.index()+1+count;
                    var deg = deg*index;
                    $ele[0].setAttribute(‘style‘,‘transform:rotateY(‘+deg+‘deg) translateZ(200px);‘)
                }
                $(‘button[value="roll"]‘).on(‘click‘, function() {
                    $(‘div#camera>div‘).each(function() {
                        changeRotateY($(this), 90);
                    });
                    // changeRotateY($(‘div#camera>div:nth-child(1)‘), 90);
                    // changeRotateY($(‘div#camera>div:nth-child(2)‘), 90);
                    // changeRotateY($(‘div#camera>div:nth-child(3)‘), 90);
                    // changeRotateY($(‘div#camera>div:nth-child(4)‘), 90);
                    count++; 
                    reversedCount--;
                    $(‘div#camera>div‘).eq(reversedCount%4).css({‘z-index‘:‘99‘}).siblings().css({‘z-index‘:‘0‘});
                    if(reversedCount==0){
                        reversedCount=4;
                    }
                });
            })();

            
        });
    </script>
</body>
</html>

稍微解析一下:

  • CSS部分用来生成静态的三维盒子,#camera下的四个子div分别旋转0°、90°、180°、270°后再以自身旋转后的坐标系为基准translateZ(200px), 相当于四个子div分别向前(也就是正对屏幕的方向)、向右、向后(也就是背向屏幕的方向)、向左移动了200px,由于div本身的尺寸就是400px*400px, 因此做此变换后四个div就围成了一个立体的盒子。此时从上往下看,效果图如下:

技术图片

  • 这里的transform的顺序很重要,如果是先rotateYtranslateZ, 那么translateZ是以rotate以后的坐标轴进行平移,这样才能达到前后左右平移的效果; 如果先translateZrotateY, 那么所有元素都会先平移,然后在一个位置上进行旋转了!

  • changeRotateY函数用来改变div的旋转角度,根据该元素的eq和传入的count值(按钮被点击的次数)来设置元素的rotateY的值。由于遇到了动态获取transform值的问题这里的函数灵活性不高,有点遗憾。 第一次点击的时候,count为0,index()为0的元素的rotateY会从0°增加到90°,index()为1的元素的rotateY会从90°增加到180°,and so on; 第二次点击,count为1, 上述值会各增加90°,完成无限旋转的效果;

  • 遇到的一个很大的问题就是转到后面的元素依旧会显示出来。 试过background-colorbackface-visibility:hidden都不怎么好用,尤其是backface-visibility, 转到90度的时候还是显示的,在90.01°时才会隐藏backface, 如果想用backface-visibility来隐藏后面元素的话得fine-tune, 还会引起稍微的错位问题,遂放弃;

  • 最后使用的是z-index来隐藏后面的元素, 动态设置转到最前面的元素的z-index为较大值。注意z-index属性不对positionstatic的元素起作用。 当然我们这里的div们都是absolute,所以就能应用得很好啦~

  • 要显示的元素的eq值分别为3、2、1、0,当然直接用递增的count变量+switch/if else语句也能做,但陡减可读性; 取而代之的是增加了一个递减的reversedCount变量,它来负责匹配每次要设置z-index的元素。

欢迎转载,请注明出处。

参考资料:玩轉 CSS 3D - 原理篇

css33d变换实例滚动的正方体

笔记:2D变换  transform    位移     translateX()translateY()  简写:translate(X值,Y值) 正值向右,负值向左 旋转rotate()     rotate(?deg)  括号中为角度值  正值是顺时针旋转,负值是... 查看详情

css33d酷炫立方体变换动画(代码片段)

我爱撸码,撸码使我感到快乐!大家好,我是Counter,本章微博主要利用了CSS3的一些新特性,主要用到关键帧来使3D图形运动起来,涉及到了一些抽象的思想,立体的想象。先给大家看看完成的效果,代码也不是很难,每行代码... 查看详情

css33d翻转动画

CSS3动画属性:transform(变换):大小、位置、颜色、变形等状态的变化transition(过渡):初始状态过渡到结束状态这个过程中产生的动画animation(动画):定义关键帧动画CSS3可以实现多种动画效果,下面说的是CSS3实现一个3D翻... 查看详情

css——background综合运用

搜索栏图标:<!DOCTYPEhtml><html><head><metacharset="utf-8"/><title></title><style>input{width:270px;height:28px;background:url(‘serch.jpg‘)no-repeatrightcenter;}< 查看详情

css3动画3dbox

先看个效果图1<!DOCTYPEhtml>2<html>3<head>4<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>5<title>旋转盒子</title>6<metacharset="utf-8"/>7<style> 查看详情

css3一些综合运用(备份前端网)(代码片段)

html代码多行省略号display:-webkit-box;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word;white-space:normal!important;-webkit-line-clamp:2;-webkit-box-orient:vertical;<!DOCTYPEhtml><htmllan 查看详情

css33dtransform变换

 、实际应用-图片的旋转木马效果您可以狠狠地点击这里:图片的旋转木马效果demo建议在足够新版本的FireFox浏览器或Safari浏览器下观看,Chrome可能需要居中定位查看,下图为效果缩略图:原理:那些看上去很酷酷的CSS33D效果... 查看详情

css之3d变换

3D变换的x,y,z轴是分别效果是:x轴旋转的话,就是头和脚进行转动y轴旋转的话,就是左右手进行转动z轴旋转的话,就是整个身体平铺在旋转。上面是针对旋转的意思去,但是对于其他的类似一样,就是这样子去理解x,y,z轴... 查看详情

css3dbox实现的一些注意事项

Test1.html1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Document</title>6<style>7*{8margin:0;9padding:0;10}11.wrap{12margin:50pxauto;13w 查看详情

css33d旋转动画菜单

在线演示本地下载 查看详情

综合运用之拖动模态框案例(代码片段)

在制作该案例之前,我们需要先做好准备工作!有句话怎么说来着?!没错!磨刀不误砍柴工!目录 Offset系列概念代码实操Offset知识点小结拖动模态框案例Javascript全部代码总结首先,我们要先复习一... 查看详情

css3之过渡及2d变换

transition过渡 transition-duration:;运动时间 transition-delay:;延迟时间 transition-timing-function:;运动形式           ease逐渐变慢(默认)           linear匀速           ease-in加速    ... 查看详情

css3之3d变换与关键帧

3d变换是在transform基础上实现的 transform-style:preserve-3d;建立3d空间 perspective:;景深(设置用户看的距离) perspective-origin:centercenter;(默认)景深基点(设置用户从哪个方向看) backface-visility隐藏背面 -transform:;在3d中新增了以下函数: rotateX()... 查看详情

css3之过渡及2d变换

transition-duration:;运动时间transition-delay:;延迟时间transition-timing-function:;运动形式          ease逐渐变慢(默认)          linear匀速          ease-in加速          ease-out减速    ... 查看详情

css之选择器的运用

CSS选择器和规则:在css声明块前添加一个选择器,用来指明将css声明应用在哪些元素上。如图所示:标签选择器标签选择器又叫元素选择器,换句话说,文档的元素就是最基本的选择器,使用元素名称直接选中元素即可。演示代... 查看详情

css之选择器的运用

CSS选择器和规则:在css声明块前添加一个选择器,用来指明将css声明应用在哪些元素上。如图所示:标签选择器标签选择器又叫元素选择器,换句话说,文档的元素就是最基本的选择器,使用元素名称直接选中元素即可。演示代... 查看详情

css3之过渡及2d变换

transition过渡transition-duration:;运动时间transition-delay:;延迟时间transition-timing-function:;运动形式          ease逐渐变慢(默认)          linear匀速          ease-in加速          ease-out减... 查看详情

javase案例04——io流综合运用案例案例(代码片段)

1需求将以下的打乱顺序的出师表重新进行排序,并输出到另一个文件!一、先帝创业未半而中道崩殂,五、然侍卫之臣不懈于内,六、忠志之士忘身于外者,二、今天下三分,九、诚宜开张圣听三、益州疲弊,八、欲报之于陛下也,七... 查看详情