纯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实现随屏幕滚动的带缓冲效果的右下角广告代码
Sep 04 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
JavaScript实现DOM对象选择器
Sep 24 Javascript
解析AngularJS中get请求URL出现的跨域问题
Dec 01 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
JS实现图片预览的两种方式
Jun 27 Javascript
微信小程序当前时间时段选择器插件使用方法详解
Dec 28 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
Aug 31 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
Sep 12 Javascript
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
抓取YAHOO股票报价的类
2009/05/15 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
深入了解javascript中的prototype与继承
2013/04/14 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
Python访问纯真IP数据库脚本分享
2015/06/29 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
python中的itertools的使用详解
2020/01/13 Python
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
linux面试题参考答案(6)
2014/08/29 面试题
小学生自我鉴定
2013/10/12 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
保护环境标语
2014/06/09 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
机电一体化专业求职信
2014/07/22 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL