js实现可旋转的立方体模型


Posted in Javascript onOctober 16, 2016

这是一个简单的立方体应用,他是很多立方旋转变换的基础,例如实现3D轮播图的实现等。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>可旋转立方体效果</title>
  <style type="text/css">
    *{padding: 0; margin: 0}
    img{border: 0}
    ul li{list-style: none}
    ul{width: 200px; height: 200px; margin: 100px auto;
    position: relative; -webkit-transform-style: preserve-3d ;
      /* perspective: 100px;*/
    }
    /*绕中心旋转,坐标轴会随旋转而旋转*/
    li{width:200px;height:200px;position:absolute;text-align:center;line-height:200px;font-size:80px;font-weight:bold;color:#fff;}
    /*构造六个面*/
    li:nth-child(1){background:rgba(255,0,0,1);-webkit-transform:rotateX(90deg)  translateZ(100px);}
    li:nth-child(2){background:rgba(0,255,255,1);-webkit-transform:rotateX(270deg) translateZ(100px);}
    li:nth-child(3){background:rgba(255,0,255,1);-webkit-transform:rotateY(90deg) translateZ(100px);}
    li:nth-child(4){background:rgba(0,255,0,1);-webkit-transform:rotateY(270deg) translateZ(100px);}
    li:nth-child(5){background:rgba(200,200,0,1);-webkit-transform:translateZ(-100px);}
    li:nth-child(6){background:rgba(0,0,255,1);-webkit-transform: translateZ(100px) ;}
    .button{
      width: 200px; margin: 20px auto;
      position: relative;
      cursor: pointer;
    }
    input{
      width: 50px; height: 30px;
      position: absolute;
      cursor: pointer;
    }
    /*按钮的绝对定位*/
    input:nth-child(1){left: 100px; top: 0}
    input:nth-child(2){left:200px;top:50px;}
    input:nth-child(3){left:0px;top:50px;}
    input:nth-child(4){left:100px;top:100px;}
    input:nth-child(5){left:100px;top:50px;}
  </style>
  <script type="text/javascript">
    window.onload = function () {
      var x = 0, y = 0;
      var ul = document.getElementById('ul');
      var inputs = document.getElementsByTagName('input');
      for (var i = 0; i<inputs.length; i++){
        inputs[i].onclick = run;
      }
      function run() {
        /*渐变*/
        ul.style.webkitTransition = '-webkit-transform 3s linear';
        ul.style.oTransition = '-o-transform 3s linear';
        ul.style.transition = 'transform 3s linear';
        /*旋转的规则,就是x,y方向的deg改变*/
        if(inputs[0]==this){x+=90;}
        if(inputs[1]==this){y+=90;}
        if(inputs[2]==this){y-=90;}
        if(inputs[3]==this){x-=90;}
        if (inputs[4] == this){
          x = 0; y = 0;
          ul.style.webkitTransition = '-webkit-transform .1s linear';
          ul.style.oTransition = '-o-transform .1s linear';
          ul.style.transition = 'transform .1s linear';
        }
        ul.style.webkitTransform = 'rotateX(' + x + 'deg) rotateY(' + y + 'deg)';
        ul.style.oTransform = 'rotateX(' + x + 'deg) rotateY(' + y + 'deg)';
        ul.style.transform = 'rotateX(' + x + 'deg) rotateY(' + y + 'deg)';
      }
      document.addEventListener('keydown', function(e){
        ul.style.webkitTransition='-webkit-transform 3s linear';
        switch(e.keyCode){
          case 37:  y -= 90;  //左箭头
            break;
          case 38:  x += 90;  //上箭头
            break;
          case 39:  y += 90;  //下箭头
            break;
          case 40:  x -= 90;  //右箭头
            break;
          case 13:  x=0; y=0;  //回车 (当回车时,迅速转回初始状态)
            ul.style.webkitTransition='-webkit-transform 0.1s linear';
            break;
        }
        ul.style.webkitTransform = "rotateX("+x+"deg) rotateY("+y+"deg)"; //变换效果(沿X轴和Y轴旋转)
      }, false);document.addEventListener("keydown", function (e) {
        ul.style.webkitTransition = '-webkit-transform 3s linear';
        ul.style.oTransition = '-o-transform 3s linear';
        ul.style.transition = 'transform 3s linear';
        switch(e.keyCode){
          case 37:
        }
      })
      /* function run(){
        ul.style.webkitTransition='-webkit-transform 3s linear'; //设置立方体变换的属性、持续时间、动画类型
        if(inputs[0]==this){x+=90;}
        if(inputs[1]==this){y+=90;}
        if(inputs[2]==this){y-=90;}
        if(inputs[3]==this){x-=90;}
        if(inputs[4]==this){x=0;y=0; ul.style.webkitTransition='-webkit-transform 0.1s linear';}  //当点击重置按钮时,迅速转回到初始状态。
        ul.style.webkitTransform = "rotateX("+x+"deg) rotateY("+y+"deg)";  //变换效果(沿X轴和Y轴旋转)
      }*/
    }
  </script>
</head>
<body>
<ul id="ul">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
</ul>
<div class="container">
</div>
<div class="button">
  <input type="button" value="上">
  <input type="button" value="右">
  <input type="button" value="左">
  <input type="button" value="下">
  <input type="button" value="重置">
</div>

</body>
</html>
Javascript 相关文章推荐
JavaScript中的变量作用域介绍
Dec 31 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 Javascript
JS表格组件神器bootstrap table详解(强化版)
May 26 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
javaScript+turn.js实现图书翻页效果实例代码
Feb 16 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
实现div滚动条默认最底部以及默认最右边的示例代码
Nov 15 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 Javascript
解决layer图标icon不加载的问题
Sep 04 Javascript
vue实现分页加载效果
Dec 24 Javascript
如何使用vue slot创建一个模态框的实例代码
May 24 Javascript
JavaScript中变量提升和函数提升的详解
Aug 07 Javascript
移动端滑动插件Swipe教程
Oct 16 #Javascript
类似于QQ的右滑删除效果的实现方法
Oct 16 #Javascript
js实现点击图片自动提交action的简单方法
Oct 16 #Javascript
jQuery监听文件上传实现进度条效果的方法
Oct 16 #Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 #Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 #Javascript
JS实现动态增加和删除li标签行的实例代码
Oct 16 #Javascript
You might like
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
详解json在php中的应用
2018/09/30 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python 基础知识之字符串处理
2017/01/06 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
信访工作者先进事迹
2014/01/17 职场文书
教研活动总结
2014/04/28 职场文书
12岁生日演讲稿
2014/05/14 职场文书
篝火晚会策划方案
2014/05/16 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
创业计划书之酒吧
2019/12/02 职场文书