JS实现旋转的魔方

  • js

<script>
    window.onload = function () {
        let cube = document.querySelector('.cube')
        let timer = null
        let x = 0; y = 0;
        function rotate() {
            cube.style.transform = 'rotateX(' + x + 'deg)' + '' + 'rotateY(' + y + 'deg)';
            x += 30
            y += 45
        }
        function stop() {
            clearInterval(timer)
        }
        clearInterval(timer);
        timer = setInterval(() => {
            rotate();
        }, 1000);

       //考虑兼容性
        var hiddenProperty = 'hidden' in document ? 'hidden' :
            'webkitHidden' in document ? 'webkitHidden' :
                'mozHidden' in document ? 'mozHidden' :
                    null;
        var visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');
        var onVisibilityChange = function () {
            if (!document[hiddenProperty]) {
                timer = setInterval(() => {
                    rotate();
                }, 1000);
                console.log(hiddenProperty);
            } else {
                clearInterval(timer)
            }
        }
       //不考虑兼容性
        document.addEventListener(visibilityChangeEvent, onVisibilityChange);
        // document.addEventListener("visibilitychange", function () {
        //     if (!document.hidden) {   //处于当前页面
                     rotate();
        //         timer = setInterval(() => {
        //             rotate();
        //         }, 1000);
        //         console.log('active');
        //     } else {
        //         clearInterval(timer);
        //         console.log('hidden');
        //     }
        // });
    }
</script>
  • html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div class="cube" onclick="stop()">
        <div class="front">front</div>
        <div class="back">back</div>
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="top">top</div>
        <div class="bottom">bottom</div>
    </div>
</body>
</html>
  • css


<style>
    .cube {
        width: 400px;
        height: 400px;
        transition: all 3s;
        margin: 300px auto;
        /* 作用于所有3d转换的子元素 设置给父级 */
        /* perspective: 1000px; */
        /* transform: rotateX(30deg) rotateY(45deg); */
        /* 平面到立方  默认值:平面flat*/
        transform-style: preserve-3d;

        position: relative;
    }
    .front,
    .back,
    .left,
    .right,
    .top,
    .bottom {
        width: 100%;
        height: 100%;
        text-align: center;
        line-height: 400px;
        position: absolute;
        opacity: 0.9;
        left: 0;
        top: 0;
    }
    .front {
        background-color: palevioletred;
        background-image: url('http://img1.gtimg.com/tj/pics/hv1/117/208/2153/140051982.jpg');
        transform: translateZ(200px);
    }

    .back {
        background-color: yellow;
        transform: translateZ(-200px);
        background-image: url('https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=841408372,3004217725&fm=11&gp=0.jpg');
    }
    .left {
        background-color: pink;
        background-image: url('https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2388632836,3966607624&fm=26&gp=0.jpg');
        transform: rotateY(90deg) translateZ(-200px)
    }
    .right {
        background-color: yellowgreen;
        background-image: url('https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=192610795,467565159&fm=26&gp=0.jpg');
        transform: rotateY(90deg) translateZ(200px)
    }
    .top {
        background-color: skyblue;
        background-image: url("https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2936477803,4198185787&fm=15&gp=0.jpg");
        transform: rotateX(90deg) translateZ(200px)
    }
    .bottom {
        background-color: orange;
        background-image: url('http://img0.pclady.com.cn/pclady/1611/02/1612285_jyz.jpg');
        transform: rotateX(90deg) translateZ(-200px)
    }
</style>

转载于:https://www.cnblogs.com/wwj007/p/11251485.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现旋转魔方相册,可以考虑以下步骤: 1. 创建一个容器,用于放置魔方相册。 2. 将魔方相册拆分成 6 个面。每个面都是一个独立的图片或者容器。 3. 使用 CSS3 3D 变换(transform3d)和过渡(transition)属性,将每个面沿着魔方的边缘进行旋转。 4. 使用 JavaScript 监听用户的交互事件,例如鼠标点击、拖动等,根据用户的操作改变魔方相册的状态,从而实现旋转和翻转等效果。 下面是一个简单示例代码,实现了一个基本的旋转魔方相册: HTML 代码: ```html <div class="cube"> <div class="cube__item cube__item--front"></div> <div class="cube__item cube__item--back"></div> <div class="cube__item cube__item--right"></div> <div class="cube__item cube__item--left"></div> <div class="cube__item cube__item--top"></div> <div class="cube__item cube__item--bottom"></div> </div> ``` CSS 代码: ```css .cube { position: relative; width: 200px; height: 200px; transform-style: preserve-3d; transition: transform 1s; } .cube__item { position: absolute; width: 200px; height: 200px; background-size: cover; border: 1px solid white; } .cube__item--front { transform: translateZ(100px); background-image: url(front.jpg); } .cube__item--back { transform: translateZ(-100px) rotateY(180deg); background-image: url(back.jpg); } .cube__item--right { transform: rotateY(-90deg) translateZ(100px); background-image: url(right.jpg); } .cube__item--left { transform: rotateY(90deg) translateZ(100px); background-image: url(left.jpg); } .cube__item--top { transform: rotateX(90deg) translateZ(100px); background-image: url(top.jpg); } .cube__item--bottom { transform: rotateX(-90deg) translateZ(100px); background-image: url(bottom.jpg); } .cube:hover { transform: rotateX(360deg) rotateY(360deg); } ``` JavaScript 代码: ```javascript const cube = document.querySelector('.cube'); let isDragging = false; let startX, startY, currentX, currentY; cube.addEventListener('mousedown', (e) => { isDragging = true; startX = e.pageX; startY = e.pageY; }); cube.addEventListener('mousemove', (e) => { if (!isDragging) return; currentX = e.pageX; currentY = e.pageY; const dx = currentX - startX; const dy = currentY - startY; cube.style.transform = `rotateX(${dy * -0.2}deg) rotateY(${dx * 0.2}deg)`; }); cube.addEventListener('mouseup', () => { isDragging = false; }); ``` 这段 JavaScript 代码实现了鼠标拖动旋转魔方相册的功能。当用户按下鼠标左键时,记录下当前的坐标。当用户移动鼠标时,计算出鼠标移动的距离,根据距离改变魔方相册的旋转角度。当用户松开鼠标时,停止旋转

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值