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 继承详解(三)
Jul 13 Javascript
javascript抖动元素的小例子
Oct 28 Javascript
js替代copy(示例代码)
Nov 27 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
Nov 17 Javascript
在JavaScript中使用对数Math.log()方法的教程
Jun 15 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
ionic选择多张图片上传的示例代码
Oct 10 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
简单使用webpack打包文件的实现
Oct 29 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
php生成html文件方法总结
2014/12/01 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
Python requests库用法实例详解
2018/08/14 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
金山毒霸系列的笔试题
2013/04/13 面试题
自荐信范文
2013/12/10 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers