本文实例讲述了JS实用的动画弹出层效果的方法。分享给大家供大家参考。具体实现方法如下:
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <title>动画弹出层</title> <style> .list{ position:relative;; background:#eee; border:1px #ccc solid; margin:10px; height:30px; width:100px; cursor :pointer ; } .listShow{ position:relative; background:#eff; border:1px #ddd solid; margin:10px; height:30px; width:100px; cursor :pointer ; } .comment{ position:absolute; left:0; display:none; position:absolute; border:1px #ccc solid; background:#fee; width:200px; height:200px; overflow:hidden; z-index:100; } </style> </head> <body> <div class=\"\" id=\"show\"> 0 </div> <div class=\"list\" id=\"list1\">1 <div class=\"comment\" id=\"comment1\">内容显示111<br/> </div> <div class=\"list\" id=\"list2\">2 <div class=\"comment\" id=\"comment2\">内容显示222</div> </div> <div class=\"list\" id=\"list3\">3 <div class=\"comment\" id=\"comment3\">内容显示333</div> </div> </body> </html> <script> var zindex=0; function $id(id){ return document.getElementById(id); } var Bind = function(object,fun){ var args = Array.prototype.slice.call(arguments).slice(2); return function(){ return fun.apply(object,args); } } function addEventHandler(oTarget, sEventType, fnHandler){ if(oTarget.addEventListener){ oTarget.addEventListener(sEventType, fnHandler, false); } else if(oTarget.attachEvent){ oTarget.attachEvent(\'on\' + sEventType, fnHandler); } else{oTarget[\'on\' + sEventType] = fnHandler;} } var Shower=function(){ this.list=null; this.comment=null; this.moveLeft=80; this.moveTop=20; this.height=150; this.width=250; this.time=800; this.init=function(lisObj,comObj){ this.list=lisObj; this.comment=comObj; var _this=this; this._fnMove=Bind(this,this.move); (function(){ var obj=_this; addEventHandler(obj.list,\"click\",obj._fnMove); })(); }; this.move=function(){ var _this=this; var w=0; var h=0; var height=0; //弹出div的高 var width=0; //弹出div的宽 var t=0; var startTime = new Date().getTime();//开始执行的时间 if(!_this.comment.style.display||_this.comment.style.display==\"none\"){ _this.comment.style.display=\"block\"; _this.comment.style.height=0+\"px\"; _this.comment.style.width=0+\"px\"; _this.list.style.zIndex=++zindex; _this.list.className=\"listShow\"; var comment=_this.comment.innerHTML; _this.comment.innerHTML=\"\"; //去掉显示内容 var timer=setInterval(function(){ var newTime = new Date().getTime(); var timestamp = newTime - startTime; _this.comment.style.left=Math.ceil(w)+\"px\"; _this.comment.style.top=Math.ceil(h)+\"px\"; _this.comment.style.height=height+\"px\"; _this.comment.style.width=width+\"px\"; t++; var change=(Math.pow((timestamp/_this.time-1), 3) +1); //根据运行时间得到基础变化量 w=_this.moveLeft*change; h=_this.moveTop*change; height=_this.height*change; width=_this.width*change; $id(\"show\").innerHTML=w; if(w>_this.moveLeft){ clearInterval(timer); _this.comment.style.left=_this.moveLeft+\"px\"; _this.comment.style.top=_this.moveTop+\"px\"; _this.comment.style.height=_this.height+\"px\"; _this.comment.style.width=_this.width+\"px\"; _this.comment.innerHTML=comment; //回复显示内容 } },1,_this.comment); }else{ _this.hidden(); } } this.hidden=function(){ var _this=this; var flag=1; var hiddenTimer=setInterval(function(){ if(flag==1){ _this.comment.style.height=parseInt(_this.comment.style.height)-10+\"px\"; }else{ _this.comment.style.width=parseInt(_this.comment.style.width)-15+\"px\"; _this.comment.style.left=parseInt(_this.comment.style.left)+5+\"px\"; } if(flag==1 && parseInt(_this.comment.style.height)<10){ flag=-flag; } if(parseInt(_this.comment.style.width)<20){ clearInterval(hiddenTimer); _this.comment.style.left=\"0px\"; _this.comment.style.top=\"0px\"; _this.comment.style.height=\"0px\"; _this.comment.style.width=\"0px\"; _this.comment.style.display=\"none\"; if(_this.list.style.zIndex==zindex){ zindex--; }; _this.list.style.zIndex=0; _this.list.className=\"list\"; } },1) } } window.onload=function(){ //建立各个菜单对象 var shower1=new Shower(); shower1.init($id(\"list1\"),$id(\"comment1\")); var shower2=new Shower(); shower2.init($id(\"list2\"),$id(\"comment2\")); var shower3=new Shower(); shower3.init($id(\"list3\"),$id(\"comment3\")); } </script>
效果如下图所示:
希望本文所述对大家的javascript程序设计有所帮助。
本文地址:https://www.stayed.cn/item/22139
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我