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>
<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 相关文章推荐
jQuery timers计时器简单应用说明
Oct 28 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
jquery实现文本框数量加减功能的例子分享
May 10 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 Javascript
简单对比分析JavaScript中的apply,call与this的使用
Dec 04 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 Javascript
基于Vue2.0的分页组件
Mar 16 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
详解js获取video任意时间的画面截图
Apr 17 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 #Javascript
关于延迟加载JavaScript
May 05 #Javascript
Javascript闭包(Closure)详解
May 05 #Javascript
javascript实现仿IE顶部的可关闭警告条
May 05 #Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 #Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 #Javascript
jquery实现图片随机排列的方法
May 04 #Javascript
You might like
PHP魔术方法的使用示例
2015/06/23 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
异步加载script的代码
2011/01/12 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python爬虫实例详解
2018/06/19 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
求职信需要的五点内容
2014/02/01 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
Python Matplotlib绘制动画的代码详解
2022/05/30 Python
JS实现九宫格拼图游戏
2022/06/28 Javascript