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 相关文章推荐
FormValid0.5版本发布,带ajax自定义验证例子
Aug 17 Javascript
javascript 兼容鼠标滚轮事件
Apr 07 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 Javascript
简易js代码实现计算器操作
Apr 15 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
Feb 02 Javascript
javascript实现网页背景烟花效果的方法
Aug 06 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
4 种滚动吸顶实现方式的比较
Apr 09 Javascript
vuex管理状态仓库使用详解
Jul 29 Javascript
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
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
MySQL中create table语句的基本语法是
2007/01/15 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
python中sets模块的用法实例
2014/09/30 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
管理建议书范文
2014/05/13 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
2014年领班工作总结
2014/11/25 职场文书
继承权公证书范本
2015/01/23 职场文书
单位政审意见范文
2015/06/04 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
2016国庆促销广告语
2016/01/28 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书