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+xml技术实现分页浏览
Jul 27 Javascript
关于JavaScript中的关联数组分析
Apr 09 Javascript
JavaScript事件类型中UI事件详解
Jan 14 Javascript
简单实现轮播图效果的实例
Jul 15 Javascript
Node.js中用D3.js的方法示例
Jan 16 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
JavaScript中的高级函数
Jan 04 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 Javascript
详解React之key的使用和实践
Sep 29 Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
vue 详情跳转至列表页实现列表页缓存
Mar 27 Javascript
微信小程序组件生命周期的踩坑记录
Mar 03 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
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
php验证码生成代码
2015/11/11 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Python中super函数的用法
2017/11/17 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
街道务虚会发言材料
2014/10/20 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL