纯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 相关文章推荐
extjs 学习笔记(一) 一些基础知识
Oct 13 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
JavaScript的Vue.js库入门学习教程
May 23 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
js实现滑动到页面底部自动加载更多功能
Feb 15 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 jQuery
angular2中Http请求原理与用法详解
Jan 11 Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 Javascript
Vue之Mixins(混入)的使用方法
Sep 24 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
JS中一些高效的魔法运算符总结
May 06 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
编译问题
2006/10/09 PHP
SSI指令
2006/11/25 PHP
PHP6 mysql连接方式说明
2009/02/09 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
wxPython事件驱动实例详解
2014/09/28 Python
Python and、or以及and-or语法总结
2015/04/14 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
理解python正则表达式
2016/01/15 Python
python pandas修改列属性的方法详解
2018/06/09 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
学期自我评价
2014/01/27 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
学校安全管理责任书
2014/07/23 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
2014年采购员工作总结
2014/11/18 职场文书
社区党务工作总结2015
2015/05/19 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL