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获取FCK编辑器信息的具体方法
Jul 12 Javascript
js获取URL的参数的方法(getQueryString)示例
Sep 29 Javascript
原生js编写autoComplete插件
Apr 13 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
js基础之DOM中元素对象的属性方法详解
Oct 28 Javascript
AngularJS实现动态编译添加到dom中的方法
Nov 04 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
Mar 09 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
Jan 04 Javascript
使用post方法实现json往返传输数据的方法
Mar 30 Javascript
JavaScript内置对象math,global功能与用法实例分析
Jun 10 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 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
E路文章系统PHP
2006/12/11 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
js实现select下拉框选择
2020/01/11 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python编程中的for循环语句学习教程
2015/10/14 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
跟单业务员岗位职责
2014/03/08 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技