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>
相关文章
|
5天前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
31 13
|
14天前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
32 3
|
1月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
1月前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
126 1
|
1月前
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
47 3
|
27天前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
17 0
|
1月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
103 2
下一篇
DataWorks