js和css3实现动态魔方的效果

简介: js和css3实现动态魔方的效果

实现效果


静态效果



动态效果



实现代码


思路


1.构建静态魔方


首先设置css属性transform-style为preserve-3d,让元素位于3d空间中。然后使用css3中的平移和旋转对每个面分别操作来构建出立体魔方,最后使用js来给每个面设置背景图(注意:魔方用到的6张图片都存放在img目录下,并且需要统一命名为a0,a1…a5,方便遍历)。


2.动态魔方


使用css3的animation设置动画。


完整代码

<!DOCTYPE html>
<html>
<head>
  <title>魔方</title>
  <meta charset="utf-8">
  <style type="text/css">
    *{
      margin: 0;
      padding: 0;
    }
    body{
      width: 100%;
      height: 100%;
      background: radial-gradient(#fff, red); 
    }
    .container{
      width:300px;
      height:300px;
      margin:200px auto;
      perspective:20000px;
    }
    .box{
      width:300px;
      height:300px;
      border:1px solid transparent;
      box-sizing: border-box;
      position:relative;
      transform-style:preserve-3d;
      /*transform:rotateX(30deg) rotateY(30deg);*/
      animation: rotate 10s linear infinite;
    }
    @keyframes rotate{
      100%{
        transform:rotatex(360deg) rotatey(360deg) rotatez(360deg);
      }
    }
    .box-page{
      width: 300px;
      height: 300px;
      position:absolute;
      box-sizing: border-box;
      transform-style:preserve-3d;
    }
    .top{
      transform: translateZ(150px);
    }
    .bottom{
      transform: translateZ(-150px) rotateX(180deg);
    }
    .right{
      transform: translateX(150px) rotateY(90deg);
    }
    .left{
      transform: translateX(-150px) rotateY(-90deg);
    }
    .after{
      transform: translateY(-150px) rotateX(90deg);
    }
    .before{
      transform: translateY(150px) rotateX(-90deg);
    }
    .box-page div:first-child,.box-page div:nth-child(3),.box-page div:nth-child(5),.box-page div:nth-child(7),.box-page div:nth-child(9){
      transform: rotateY(0deg);
        animation: rotatey 6s linear infinite;
    }
    @keyframes rotatey{
      20%{
        transform: rotateY(0deg);
        background-size: 300px 300px;
      }
      40%{
        /*background-image: url("img/img.jpg");*/
        transform: rotateY(540deg);
        background-size: 100px 100px;
      }
      60%{
        /*background-image: url("img/img.jpg");*/
        transform: rotateY(540deg);
        background-size: 100px 100px;
      }
      80%{
        transform: rotateY(0deg);
        background-size:300px 300px;
      }
    }
    .box-page div:nth-child(2),.box-page div:nth-child(4),.box-page div:nth-child(6),.box-page div:nth-child(8){
      transform:rotateX(0deg);
        animation: rotatex 6s linear infinite;
    }
    @keyframes rotatex{
      20%{
        transform: rotateX(0deg);
        background-size: 300px 300px;
      }
      40%{
        /*background-image: url("img/img.jpg");*/
        transform: rotateX(540deg);
        background-size: 100px 100px;
      }
      60%{
        /*background-image: url("img/img.jpg");*/
        transform: rotateX(540deg);
        background-size: 100px 100px;
      }
      80%{
        transform: rotateX(0deg);
        background-size: 300px 300px;
      }
    }
  </style>
</head>
<body>
<div class="container">
  <div class="box">
    <div class="top box-page"></div>
    <div class="bottom box-page"></div>
    <div class="left box-page"></div>
    <div class="right box-page"></div>
    <div class="before box-page"></div>
    <div class="after box-page"></div>
  </div>
</div>
<script type="text/javascript">
  var arr = document.querySelectorAll(".box>div");
  for(var n = 0;n<arr.length;n++){
    for(var i=0;i<3;i++){
      for(var j=0;j<3;j++){
        var divs = document.createElement("div");
        divs.style.cssText = "width:100px;height:100px;border: 1px solid #fff;position:absolute;box-sizing:border-box;background-image:url(img/a"+n+".jpg);background-size: 300px 300px;";
        arr[n].appendChild(divs);
        // 改变每一个div的位置
        divs.style.left = 100*j+"px";
        divs.style.top = 100*i+"px";
        // 改变背景图相应的位置
        divs.style.backgroundPositionX = -j*100+"px";
        divs.style.backgroundPositionY = -i*100+"px";   
      }
    }
  }
</script>
</body>
</html>
相关文章
|
8天前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
26 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
1月前
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
123 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
29天前
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
53 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
1月前
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
79 33
|
2月前
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
116 24
|
2月前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
58 13
|
2月前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
59 3
|
3月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
34 0
|
5月前
|
JavaScript 前端开发
JS配合CSS3实现动画和拖动小星星小Demo
本文通过代码示例展示了如何使用JavaScript和CSS3实现动画效果和拖动小星星的交互效果,包括文字掉落动画和鼠标拖动产生小星星动画的实现方法。
79 0
|
9月前
|
JavaScript
JS+CSS3点击粒子烟花动画js特效
JS+CSS3点击粒子烟花动画js特效
64 0
JS+CSS3点击粒子烟花动画js特效

热门文章

最新文章