本文给大家分享的是纯 js 实现的类似 flash 里的图片环绕旋转效果,非常炫酷,有需要的小伙伴可以参考下。
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
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>
来源: