css3D动画知识点,css3+js实现立方体照片墙以及鼠标拖动旋转及呼吸灯效果案例

        1. perspective设置透视点,可以设置为任意值,但通常推荐设置为600-1000之间
        2.位移(translate)
            transform: translateX(n)
            让元素沿着x轴移动
                设置正数: 从左向右
                设置负数: 从右向左
            transform: translateY(n)
            让元素沿着Y轴移动
                设置正数: 从上向下
                设置负数: 从下向上
            transform: translateZ(n) - 新效果 配合perspective使用
            让元素沿着Z轴移动
                设置正数: 朝向我们视线移动(靠近我们)
                设置负数: 背向移动(远离我们)
        3. 旋转(rotate)
            rotateX(angle)
                方向判断利用左手原则
            rotateY(angle)
                方向判断利用左手原则
            rotateZ(angle)
                方向判断利用左手原则
        4.缩放(scale)
            scaleX()
                沿着x轴放大或缩小
            scaleY()
                沿着y轴放大或缩小
            scaleZ()
                沿着Z轴放到或缩小
        5.倾斜(skew)
            skewX()
                沿着x轴倾斜,x轴方向的两条边平行
            skewY()
                沿着y轴倾斜,y轴方向的两条边平行
        6.子元素保留3D转换
            transform-style: flat;
            transform-style: preserve-3d;
            flat 不保留3d转换,默认值
            preserve-3d; 子元素保留3d转换,如果不设置这个属性,内部元素不会存在3D的遮挡关系(伪3D)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            list-style: none;
            margin: 0;
            padding: 0;
        }

        body {
            /* 设置透视点 */
            perspective: 1000px;
        }

        #cube {
            width: 200px;
            height: 200px;
            margin: 200px auto;
            position: relative;
            /* 保留3D效果 */
            transform-style: preserve-3d;
            /* transition: all 1s linear; */
        }

        .page {
            width: 200px;
            height: 200px;
            position: absolute;
            top: 0;
            left: 0;
            /* 设置透明度 */
            opacity: 0.6;
            box-shadow: 0 0 10px rgb(100, 99, 99);

        }

        /* .cube:hover {
            transform: rotate3d(20, 0, 0, 360deg);
        } */

        .nood_front {
            background: no-repeat url('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1596018188816&di=be74054e8c2d9d315128036c1a802b38&imgtype=0&src=http%3A%2F%2Fp3.ssl.cdn.btime.com%2Ft0118a91e715c7643a5.jpg%3Fsize%3D580x385');
            background-size: 100% 100%;
            transform: translateZ(100px);
            animation:nood_front 1s infinite linear alternate;
        }

        .nood_back {
            background: no-repeat url('https://img.solves.com.cn/p/2019/07-03/1785c0c80d7fd2512c01f344e6855b6b.jpg');
            background-size: 100% 100%;
            transform: translateZ(-100px) rotateY(180deg);
            animation:nood_back 1s infinite linear alternate;
        }

        .nood_left {
            background: no-repeat url('http://static.oschina.net/uploads/img/201403/25072156_eWdU.jpg');
            background-size: 100% 100%;
            transform: translateX(-100px) rotateY(90deg);
            animation:nood_left 1s infinite linear alternate;
        }

        .nood_right {
            background: no-repeat url('https://www.seoxiehui.cn/data/attachment/portal/201805/30/132252x1q5fjm3s3nn3j4u.jpg');
            background-size: 100% 100%;
            transform: translateX(100px) rotateY(-90deg);
            animation:nood_right 1s infinite linear alternate;
        }

        .nood_top {
            background: no-repeat url('https://bkimg.cdn.bcebos.com/pic/4afbfbedab64034f29596c8ba6c379310b551da2?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg');
            background-size: 100% 100%;
            transform: translateY(-100px) rotateX(90deg);
            animation:nood_top 1s infinite linear alternate;
        }

        .nood_bottom {
            background: no-repeat url('https://img.solves.com.cn/p/2019/07-03/10b42b891b5bb368c7e814fdf3c741bc.jpg');
            background-size: 100% 100%;
            transform: translateY(100px) rotateX(-90deg);
            animation:nood_bottom 1s infinite linear alternate;
        }


        @keyframes nood_front {
            from {
                transform: translateZ(100px);
            }
            to {
                transform: translateZ(200px);
            }
        }

        @keyframes nood_back {
            from {
                transform: translateZ(-100px) rotateY(180deg);
            }
            to {
                transform: translateZ(-200px) rotateY(180deg);
            }
        }

        @keyframes nood_left {
            from {
                transform: translateX(-100px) rotateY(90deg);
            }
            to {
                transform: translateX(-200px) rotateY(90deg);
            }
        }

        @keyframes nood_right {
            from {
                transform: translateX(100px) rotateY(-90deg);
            }
            to {
                transform: translateX(200px) rotateY(-90deg);
            }
        }

        @keyframes nood_top {
            from {
                transform: translateY(-100px) rotateX(90deg);
            }
            to {
                transform: translateY(-200px) rotateX(90deg);
            }
        }

        @keyframes nood_bottom {
            from {
                transform: translateY(100px) rotateX(-90deg);
            }
            to {
                transform: translateY(200px) rotateX(-90deg);
            }
        }
    </style>
</head> 

<body>
    <!-- <p>
            1. perspective设置透视点,可以设置为任意值,但通常推荐设置为600-1000之间
            2.位移(translate)
                transform: translateX(n)
                让元素沿着x轴移动
                    设置正数: 从左向右
                    设置负数: 从右向左
                transform: translateY(n)
                让元素沿着Y轴移动
                    设置正数: 从上向下
                    设置负数: 从下向上
                transform: translateZ(n) - 新效果 配合perspective使用
                    让元素沿着Z轴移动
                        设置正数: 朝向我们视线移动(靠近我们)
                        设置负数: 背向移动(远离我们)
            3. 旋转(rotate)
                rotateX(angle)
                    方向判断利用左手原则
                rotateY(angle)
                    方向判断利用左手原则
                rotateZ(angle)
                    方向判断利用左手原则
            4.缩放(scale)
                scaleX()
                    沿着x轴放大或缩小
                scaleY()
                    沿着y轴放大或缩小
                scaleZ()
                    沿着Z轴放到或缩小
            5.倾斜(skew)
                skewX()
                    沿着x轴倾斜,x轴方向的两条边平行
                skewY()
                    沿着y轴倾斜,y轴方向的两条边平行
            6.子元素保留3D转换
                transform-style: flat;
                transform-style: preserve-3d;
                flat 不保留3d转换,默认值
                preserve-3d; 子元素保留3d转换,如果不设置这个属性,内部元素不会存在3D的遮挡关系(伪3D)
    </p> -->

    <div id="cube">
        <div class="page nood_front"></div>
        <div class="page nood_back"></div>
        <div class="page nood_left"></div>
        <div class="page nood_right"></div>
        <div class="page nood_top"></div>
        <div class="page nood_bottom"></div>
    </div>
</body>
<script>
    document.onmousedown = function (event) {
        var that = document.getElementById('cube');
        var reg = /\-?[0-9]+\.?[0-9]*/g;
        var bf = that.style.transform || '0,0';
        var arr = bf.match(reg);
        var bfX = Number(arr[0]);
        var bfY = Number(arr[1]);
        var startX = event.pageX;
        var startY = event.pageY;
        document.onmousemove = function (event) {
            var disX = event.pageX - startX;
            var disY = event.pageY - startY;
            var y = (disX + bfY) % 360;
            var x = -(disY + bfX) % 360;
            that.style.webkitTransform = "rotateX(" + x + "deg) rotateY(" + y + "deg) rotateZ(0deg)";
        };

        document.onmouseup = function (event) {
            document.onmousemove = null;
            document.onmouseup = null;
        };
        return false;
    }
</script>

</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在iOS上使用CSS实现3D立方体旋转可以通过使用CSS3的transform属性和perspective属性来实现。以下是一个简单的例子: HTML代码: ``` <div class="cube"> <div class="side">1</div> <div class="side">2</div> <div class="side">3</div> <div class="side">4</div> <div class="side">5</div> <div class="side">6</div> </div> ``` CSS代码: ``` .cube { width: 100px; height: 100px; position: relative; transform-style: preserve-3d; transition: transform 1s; perspective: 800px; } .side { position: absolute; width: 100px; height: 100px; line-height: 100px; text-align: center; font-size: 48px; color: white; background: black; opacity: 0.8; border: 2px solid white; } .side:nth-child(1) { transform: rotateY(0deg) translateZ(50px); } .side:nth-child(2) { transform: rotateY(90deg) translateZ(50px); } .side:nth-child(3) { transform: rotateY(180deg) translateZ(50px); } .side:nth-child(4) { transform: rotateY(-90deg) translateZ(50px); } .side:nth-child(5) { transform: rotateX(90deg) translateZ(50px); } .side:nth-child(6) { transform: rotateX(-90deg) translateZ(50px); } .cube:hover { transform: rotateX(360deg) rotateY(360deg); } ``` 在这个例子中,我们使用了一个包含6个面的div元素,并使用transform属性将其转换为3D立方体。然后,我们使用nth-child选择器来为每个面设置不同的旋转角度。最后,我们使用hover伪类选择器来实现鼠标悬停时的动画效果。 注意:该代码只能在支持CSS3的浏览器上运行,如Chrome、Safari等。在移动端设备上也可以使用该代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值