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 异常处理使用总结
Jun 21 Javascript
javascript onmouseout 解决办法
Jul 17 Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
浅谈JavaScript function函数种类
Dec 29 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
May 11 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
Vue ElementUI之Form表单验证遇到的问题
Aug 21 Javascript
Js中async/await的执行顺序详解
Sep 22 Javascript
jqueryUI tab标签页代码分享
Oct 09 jQuery
vue使用ajax获取后台数据进行显示的示例
Aug 09 Javascript
小程序外卖订单界面的示例代码
Dec 30 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将数组存储为文本文件方法汇总
2015/10/28 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
前台接待的工作职责
2013/11/21 职场文书
四年级科学教学反思
2014/02/10 职场文书
校园活动宣传方案
2014/03/28 职场文书
2014年大学生四年规划书范文
2014/04/03 职场文书
会计演讲稿范文
2014/05/23 职场文书
博士生导师推荐信
2014/07/08 职场文书
2015个人半年总结范文
2015/03/09 职场文书
遗失证明范文
2015/06/19 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Redis中一个String类型引发的惨案
2021/07/25 Redis
CentOS安装Nginx并部署vue
2022/04/12 Servers