纯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数组的操作详解
Mar 27 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
基于jquery实现图片放大功能
May 07 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
javascript用rem来做响应式开发
Jan 13 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
JavaScript Array对象基本方法详解
Sep 03 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 Javascript
vue实现移动端返回顶部
Oct 12 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
PHP四种基本排序算法示例
2015/04/09 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
python生成excel的实例代码
2017/11/08 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python如何根据时间序列数据作图
2020/05/12 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
Yahoo-PHP面试题1
2016/07/20 面试题
大三自我鉴定范文
2013/10/05 职场文书
酒店副总岗位职责
2013/12/24 职场文书
博士学位自我鉴定范文
2013/12/26 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
给老婆的道歉信
2015/01/20 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript