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 数组以及json元素的添加删除
Jun 26 Javascript
jquery.post用法关于type设置问题补充
Jan 03 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
JavaScript AOP编程实例
Jun 16 Javascript
Javascript编程之继承实例汇总
Nov 28 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
thinkjs之页面跳转同步异步操作
Feb 05 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 Javascript
ionic环境配置及问题详解
Jun 27 Javascript
使用jQuery实现购物车
Oct 29 jQuery
JavaScript实现浏览器网页自动滚动并点击的示例代码
Dec 05 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
smarty的保留变量问题
2008/10/23 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
详解vue渲染函数render的使用
2017/12/12 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python进程通信之匿名管道实例讲解
2015/04/11 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
说一说Python logging
2016/04/15 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
python 获取url中的参数列表实例
2018/12/18 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
Python字节单位转换实例
2019/12/05 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
会计专业的自荐信
2013/12/12 职场文书
假面舞会策划方案
2014/05/29 职场文书
警告通知
2015/04/25 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android