纯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 相关文章推荐
自己动手开发jQuery插件教程
Aug 25 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
iframe的onreadystatechange事件在firefox下的使用
Apr 16 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
Apr 06 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
js格式化输入框内金额、银行卡号
Feb 01 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
微信小程序仿朋友圈发布动态功能
Jul 15 Javascript
js 执行上下文和作用域的相关总结
Feb 08 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
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python的多重继承的理解
2017/08/06 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
毕业生个人求职的自我评价
2013/10/28 职场文书
项目经理岗位职责
2013/11/11 职场文书
物业招聘计划书
2014/01/10 职场文书
家长通知书教师评语
2014/04/17 职场文书
机械专业技术员求职信
2014/06/14 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
亮剑观后感
2015/06/05 职场文书
庆祝教师节主持词
2015/07/06 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
导游词之任弼时故居
2020/01/07 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
python如何查找列表中元素的位置
2022/05/30 Python