JS实现3D图片旋转展示效果代码


Posted in Javascript onSeptember 22, 2015

本文实例讲述了JS实现3D图片旋转展示效果代码。分享给大家供大家参考。具体如下:

这是一段JavaScript代码,围绕成3D模型样式的JavaScript图片旋转展示代码,这里为了演示方便,将图片替换成了数字,预留出了图片的位置,这样速度快些,会HTML的朋友都知道用时候该怎么做。本图片旋转需要手功控制,每点击一下,图片旋转一次,很方便。

运行效果截图如下:

JS实现3D图片旋转展示效果代码

在线演示地址如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>图片旋转展示</title>
<style>
#show{position:relative;margin:20px auto;width:800px;border:1px solid #999999;}
.item{position:absolute;height:40px;width:60px;background:#999999;border:1px solid #eeeeee;cursor:pointer;}
</style>
<script>
var len;
var showerObj;
var listObj;
var showerWidth=800;
var showerHeight=400;
var r;
var cR=0;
var ccR=0;
var timer=0;
window.onload=function(){
 showerObj=document.getElementById("show");
 listObj=showerObj.getElementsByTagName("div");
 len=listObj.length;
 r=Math.PI/180*360/len;
 for(var i=0;i<len;i++){
  var item=listObj[i];
  item.style.top=showerHeight/2+Math.sin(r*i)*showerWidth/2-20+"px";
  item.style.left=showerWidth/2+Math.cos(r*i)*showerWidth/2-30+"px";
  item.rotate=(r*i+2*Math.PI)%(2*Math.PI);
  item.onclick=function(){
   cR=Math.PI/2-this.rotate;
   timer || (timer=setInterval(rotate,10));
  }
 }
 var rX=showerObj.offsetLeft+showerWidth/2;
 var ry=showerObj.offsetTop+showerHeight/2;
 var rotate=function(){
  ccR=(ccR+2*Math.PI)%(2*Math.PI);
  if(cR-ccR<0) cR=cR+2*Math.PI;
  if(cR-ccR<Math.PI){
   ccR=ccR+(cR-ccR)/19;
  }else{
   ccR=ccR-(2*Math.PI+ccR-cR)/19;
  }
  if(Math.abs((cR+2*Math.PI)%(2*Math.PI)-(ccR+2*Math.PI)%(2*Math.PI))<Math.PI/720){
   ccR=cR;
   clearInterval(timer);
   timer=0;
  }
  for(var i=0;i<len;i++){
   var item=listObj[i];
   var w,h;
   var sinR=Math.sin(r*i+ccR);
   var cosR=Math.cos(r*i+ccR);
   w=60+0.6*60*sinR;
   h=(40+0.6*40*sinR);
   item.style.cssText +=";width:"+w+"px;height:"+h+"px;top:"+parseInt(showerHeight/2+sinR*showerWidth/2/3-w/2)+"px;left:"+parseInt(showerWidth/2+cosR*showerWidth/2-h/2)+"px;z-index:"+parseInt(showerHeight/2+sinR*showerWidth/2/3-w/2)+";";
  }
 }
 document.getElementById("l").onclick=function(){
  cR=(cR+r+2*Math.PI)%(2*Math.PI);
  timer || (timer=setInterval(rotate,10));
 }
 document.getElementById("r").onclick=function(){
  cR=(cR-r+2*Math.PI)%(2*Math.PI);
  timer || (timer=setInterval(rotate,10));
 }
 rotate();
}
</script>
</head>
<body>
<input id="l" type="button" value="left" >
<input id="r" type="button" value="right" >
<div id="show">
 <div class="item">1</div>
 <div class="item">2</div>
 <div class="item">3</div>
 <div class="item">4</div>
 <div class="item">5</div>
 <div class="item">6</div>
 <div class="item">7</div>
 <div class="item">8</div>
 <div class="item">9</div>
 <div class="item">0</div>
 <div class="item">a</div>
 <div class="item">b</div>
 <div class="item">1</div>
 <div class="item">2</div>
 <div class="item">3</div>
</div>
</body>
</html>

希望本文所述对大家的JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript操纵Cookie实现购物车程序
Feb 15 Javascript
ext form 表单提交数据的方法小结
Aug 08 Javascript
img标签中onerror用法
Aug 13 Javascript
ext checkboxgroup 回填数据解决
Aug 21 Javascript
使用ExtJS技术实现的拖动树结点
Aug 05 Javascript
Js放到HTML文件中的哪个位置有什么区别
Aug 21 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
jquery悬浮提示框完整实例
Jan 13 Javascript
JavaScript解析任意形式的json树型结构展示
Jul 23 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
Oct 23 Javascript
详解.vue文件中style标签的几个标识符
Jul 17 Javascript
使用jQuery实现掷骰子游戏
Oct 24 jQuery
JS+CSS实现带小三角指引的滑动门效果
Sep 22 #Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 #Javascript
JavaScript脚本判断蜘蛛来源的方法
Sep 22 #Javascript
jQuery实现的经典滑动门效果
Sep 22 #Javascript
jquery实现的简单二级菜单效果代码
Sep 22 #Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 #Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 #Javascript
You might like
Php header()函数语法及使用代码
2013/11/04 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
Vue.js对象转换实例
2017/06/07 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
出国签证在职证明
2014/01/16 职场文书
岗位职责说明书
2014/05/07 职场文书
男性健康日的活动方案
2014/08/18 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
同意报考公务员证明
2015/06/17 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript