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 eval函数深入认识
Feb 21 Javascript
jquery如何判断表格同一列不同行input数据是否重复
May 14 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
es6 symbol的实现方法示例
Apr 02 Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 Javascript
微信小程序实现消息框弹出动画
Apr 18 Javascript
Vue3.x源码调试的实现方法
Oct 13 Javascript
JavaScript中交换值的10种方法总结
Aug 18 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 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
图书管理程序(三)
2006/10/09 PHP
YII中assets的使用示例
2014/07/31 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
Python中itertools模块用法详解
2014/09/25 Python
Python中多线程及程序锁浅析
2015/01/21 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
详解Python中的正则表达式
2018/07/08 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
python 实现多线程下载视频的代码
2019/11/15 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
网上开店必备创业计划书
2014/01/26 职场文书
纠纷协议书
2014/04/16 职场文书
企业晚会策划方案
2014/05/29 职场文书
收入证明怎么写
2015/06/12 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB