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>
相关文章
|
19天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
7天前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
3天前
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
9 3
|
7天前
|
前端开发 JavaScript UED
如何使用 JavaScript 动态修改 CSS 变量的值?
【10月更文挑战第28天】使用JavaScript动态修改CSS变量的值可以为页面带来更丰富的交互效果和动态样式变化,根据不同的应用场景和需求,可以选择合适的方法来实现CSS变量的动态修改,从而提高页面的灵活性和用户体验。
|
13天前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
64 6
|
2月前
|
前端开发 JavaScript
HTML+JavaScript+CSS DIY 分隔条splitter
HTML+JavaScript+CSS DIY 分隔条splitter
|
2月前
|
JavaScript 前端开发
JavaScript HTML DOM - 改变CSS
JavaScript HTML DOM - 改变CSS
25 4
用CSS+JavaScript打造网页中的选项卡
用CSS+JavaScript打造网页中的选项卡
|
2月前
|
JavaScript 前端开发
JS配合CSS3实现动画和拖动小星星小Demo
本文通过代码示例展示了如何使用JavaScript和CSS3实现动画效果和拖动小星星的交互效果,包括文字掉落动画和鼠标拖动产生小星星动画的实现方法。
43 0
JS配合CSS3实现动画和拖动小星星小Demo
|
1月前
|
前端开发 JavaScript
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战