纯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 相关文章推荐
Dom 学习总结以及实例的使用介绍
Apr 24 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
Mar 05 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
node.js入门实例helloworld详解
Dec 23 Javascript
js中数组插入、删除元素操作的方法
Feb 15 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
Mar 22 Javascript
Vue.directive 实现元素scroll逻辑复用
Nov 29 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
15分钟上手vue3.0(小结)
May 20 Javascript
vue完美实现el-table列宽自适应
May 08 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
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
python中的五种异常处理机制介绍
2014/09/02 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python3 处理JSON的实例详解
2017/10/29 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Python 支持向量机分类器的实现
2020/01/15 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
岗位职责的含义
2013/11/17 职场文书
我的小天地教学反思
2014/04/30 职场文书
阅兵口号
2014/06/19 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
校长个人总结
2015/03/03 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
针对吵架老公保证书
2015/05/08 职场文书
Python中的datetime包与time包包和模块详情
2022/02/28 Python