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 相关文章推荐
js获取客户端外网ip的简单实例
Nov 21 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
对 jQuery 中 data 方法的误解分析
Jun 18 Javascript
Three.js基础部分学习
Jan 08 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
javascript流程控制语句集合
Sep 18 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
Aug 23 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
Jan 02 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
Apr 14 Javascript
swiperjs实现导航与tab页的联动
Dec 13 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数组中的重复值的实现代码
2011/07/17 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
Python数据结构之单链表详解
2017/09/12 Python
Django框架视图函数设计示例
2019/07/29 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
Python类super()及私有属性原理解析
2020/06/15 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
2014厂务公开实施方案
2014/02/17 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
演讲主持词
2014/03/18 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
雷锋观后感
2015/06/10 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers