纯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 相关文章推荐
Flash+XML滚动新闻代码 无图片 附源码下载
Nov 22 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
Apr 05 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
bootstrap实现每隔5秒自动轮播效果
Dec 20 Javascript
JS实现的DIV块来回滚动效果示例
Feb 07 Javascript
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
在vue中更换字体,本地存储字体非引用在线字体库的方法
Sep 28 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 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
ADODB类使用
2006/11/25 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
php bootstrap实现简单登录
2016/03/08 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
js编写简易的计算器
2020/07/29 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
python动态文本进度条的实例代码
2020/01/22 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
C#面试问题
2016/07/29 面试题
怎样有效的进行自我评价
2013/10/06 职场文书
化学学院毕业生自荐信范文
2013/12/17 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
《草原》教学反思
2014/02/15 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
会议主持词
2014/03/17 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
担保贷款承诺书
2015/04/30 职场文书
2015年教师节广播稿
2015/08/19 职场文书
python实现学生信息管理系统(面向对象)
2022/06/05 Python