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 相关文章推荐
农历与西历对照
Sep 06 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
jquery获得同源iframe内body下标签的值的方法
Sep 25 Javascript
javascript中caller和callee详解
Aug 10 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
element上传组件循环引用及简单时间倒计时的实现
Oct 01 Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
Aug 10 Javascript
JS中如何优雅的使用async await详解
Oct 05 Javascript
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
移动端滑动插件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
yii框架源码分析之创建controller代码
2011/06/28 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
详解Python中第三方库Faker
2020/09/25 Python
浅析Python中字符串的intern机制
2020/10/03 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
优秀的自荐信要注意哪些
2014/01/03 职场文书
生产部岗位职责范文
2014/02/07 职场文书
党员实事承诺书
2014/03/26 职场文书
委托书范文
2014/04/02 职场文书
卖车协议书范例
2014/09/16 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
python Polars库的使用简介
2021/04/21 Python