JS实用的动画弹出层效果实例


Posted in Javascript onMay 05, 2015

本文实例讲述了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>

效果如下图所示:

JS实用的动画弹出层效果实例

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
Mar 05 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
jQuery Ajax使用实例
Apr 16 Javascript
详解JavaScript中循环控制语句的用法
Jun 03 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
May 25 Javascript
jQuery为DOM动态追加事件的方法
Feb 16 Javascript
vue-cli+webpack记事本项目创建
Apr 01 Javascript
vue+iview写个弹框的示例代码
Dec 05 Javascript
对vue中v-on绑定自定事件的实例讲解
Sep 06 Javascript
js日期范围初始化得到前一个月日期的方法
May 05 #Javascript
javascript实现捕捉键盘上按下的键
May 05 #Javascript
js中this用法实例详解
May 05 #Javascript
javascript中返回顶部按钮的实现
May 05 #Javascript
JS简单实现动画弹出层效果
May 05 #Javascript
教你使用javascript简单写一个页面模板引擎
May 05 #Javascript
关于延迟加载JavaScript
May 05 #Javascript
You might like
PHP中GET变量的使用
2006/10/09 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
python基于递归解决背包问题详解
2019/07/03 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
java关于string最常出现的面试题整理
2021/01/18 Python
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
给女儿的表扬信
2014/01/18 职场文书
法制宣传实施方案
2014/03/13 职场文书
投资建议书模板
2014/05/12 职场文书
安全宣传标语口号
2014/06/06 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
改造DE1103三步曲
2022/04/07 无线电
Go获取两个时区的时间差
2022/04/20 Golang
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技