纯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 escape,unescape解决中文乱码问题的方法
May 26 Javascript
js中substring和substr的定义和用法
May 05 Javascript
Node.js事件循环(Event Loop)和线程池详解
Jan 28 Javascript
jQuery通过写入cookie实现更换网页背景的方法
Apr 15 Javascript
前端jquery部分很精彩
May 03 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
全面解析多种Bootstrap图片轮播效果
May 27 Javascript
bootstrap实现每隔5秒自动轮播效果
Dec 20 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php给数组赋值的实例方法
2019/09/26 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
js的一些常用方法小结
2011/06/29 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
JS中定位 position 的使用实例代码
2017/08/06 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
python实现简单的socket server实例
2015/04/29 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
python 实现多维数组(array)排序
2020/02/28 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
什么是python的必选参数
2020/06/21 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
电气自动化专业职业规划范文
2014/02/16 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
安全第一课观后感
2015/06/18 职场文书
实验室安全管理制度
2015/08/05 职场文书
mysql部分操作
2021/04/05 MySQL
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python