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


Posted in Javascript onApril 12, 2015

CSS:

<style type="text/css">
#show{position:relative;margin:20px auto;width:800px;}
.item{position:absolute;height:40px;width:60px;background:#999999;border:1px solid #eeeeee;cursor:pointer;}</style>

Html:

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>

JS

<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>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
jquery图形密码实现方法
Mar 11 Javascript
理解AngularJs指令
Dec 10 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
使用webpack搭建vue项目及注意事项
Jun 10 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
weui上传多图片,压缩,base64编码的示例代码
Jun 22 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 Javascript
用vue写一个日历
Nov 02 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
jQuery插件slick实现响应式移动端幻灯片图片切换特效
Apr 12 #Javascript
jQuery表单美化插件jqTransform使用详解
Apr 12 #Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
Apr 12 #Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 #Javascript
JavaScript 面向对象与原型
Apr 10 #Javascript
javascript基本包装类型介绍
Apr 10 #Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
Apr 10 #Javascript
You might like
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
php str_pad 函数使用详解
2009/01/13 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP实现的购物车类实例
2015/06/17 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
python更改已存在excel文件的方法
2018/05/03 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
户外拓展活动方案
2014/02/11 职场文书
团队激励口号
2014/06/06 职场文书
公司周年庆典标语
2014/10/07 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书