[原]一步一步自己制作弹出框

说到javascript弹出框的制作,将其实现步骤分开,其实很容易。
下面,将拆分页面弹出框的制作步骤。
首先,准备编辑工具(废话),其实,您可以使用notepad..嘿嘿。
弹出框的组成结构:
  1.一个页面遮罩层。
  2.一个div容器,用来包含整个弹出框的布局。
  3.弹出框的菜单头(在弹出框的顶部,一般用来放置关闭按钮等)
  4.弹出页面的iframe,将其src设置为需要链接的url.

弹出层组成结构讲解完毕,开始实现弹出层对象。
首先,先实现常见的公共函数

ContractedBlock.gifExpandedBlockStart.gif代码
//获取页面指定ID的对象
var $$=function(id)
{
return typeof id=="string"?document.getElementById(id):id;
}
//获取页面指定tagName的对象
var $E=function(tagName)
{
return document.getElementsByTagName(tagName)[0];
}
//创建对象 通过原型的继承
function New(aClass,aParams)
{
function new_()
{
aClass.initialize.apply(
this,aParams);
}
new_.prototype
=aClass;
return new new_();
}

 

 

好了  公共函数实现完毕,进入最关键的对象的创建了。
还是一步步来吧,首先,实现创建遮罩层的函数

ContractedBlock.gifExpandedBlockStart.gif代码
var makeMask=function()
{
var mask=$$("overlay_div");
if(mask==null)
{
mask
=document.createElement("div");//遮罩层div
mask.setAttribute("id","overlay_div");//设置id为overlay_div
mask.className="light_overlay";
//设置高度和宽度
mask.style.height=window.screen.availHeight>document.body.scrollHeight?

window.screen.availHeight:document.body.scrollHeight;
mask.style.width
=window.screen.availWidth>document.body.scrollWidth?

window.screen.availWidth:document.body.scrollWidth;
$E(
"body").appendChild(mask);
}
return mask;
}

 

 

遮罩层创建完毕
就开始创建一个div容器 并将设置容器的内部html代码

ContractedBlock.gifExpandedBlockStart.gif代码
var makeContent=function(_width,_height,_url)
{
var container=$$("container_div");
if(container==null)
{
container
=document.createElement("div");
container.setAttribute(
"id","container_div");
container.style.height
=_height;
container.style.width
=_width;
var v_left=document.body.clientWidth/2-_width/2;
var v_top=document.body.scrollTop+document.body.clientHeight/2-_height/2;
//设置容器距离顶部和左边的宽度。
container.style.top=v_top;
container.style.left
=v_left;
container.className
="light_container";
//在容器内部添加一个菜单头和一个指向给定url的iframe
container.innerHTML="<div class='light_header'><a class='light_close'

οnclick='closeDialog()'>关闭</a></div><iframe frameborder='0' scrolling='no'

style='border:0;width:100%;height:98%;' src='
"+_url+"'></iframe>"
$E(
"body").appendChild(container);
}
return container;
}

 

 

 

给出关闭弹出层的函数,就是将建立的两个层隐藏就可以了。

function closeDialog(result)
{
$$(
"container_div").style.display="none";
$$(
"overlay_div").style.display="none";
}

 

 

最后一步 就是显示弹出层对象了。我们需要将前面两函数联合起来

ContractedBlock.gifExpandedBlockStart.gif代码
var displayLayer=function(width,height,url,display)
{
this._mask=makeMask();
this._container=makeContent(width,height,url);
this._mask.style.display=display==""?"none":display;
this._container.style.display=display==""?"none":display;
}

 

 

好了 基本的框架已经搭建出来了 现在给出css样式代码

ContractedBlock.gifExpandedBlockStart.gif代码
.light_overlay{
display
:none;
position
:absolute;
top
:0;
left
:0;
width
:100%;
height
:100%;
z-index
:1000;
background-color
:#333;
-moz-opacity
: 0.8;
opacity
:.80;
filter
: alpha(opacity=80);
}
.light_container
{
position
:absolute;
display
:none;
z-index
:1001;
border
: 1px solid #B8B8B8;
background-color
: white;
}
.light_header
{
background
:#D3F9F0;
text-align
:right;
}
.light_close
{
height
:28px;
cursor
:pointer;
font-size
:12px;
line-height
:28px;
margin-right
:4px;
}

 

 

然后我们直接调用
displayLayer(400,300,'show.html',"block");函数就可以显示弹出层了。

其实,我们可以将弹出层看成一个对象,达到javascrpt对象的封装,利于复用.
函数已经有了,我们只需要将函数整合就可以了,代码如下:

ContractedBlock.gifExpandedBlockStart.gif代码
var LightBox=
{
initialize:
function(url,width,height)
{
this._url=url;
this._width=width;
this._height=height;
this._mask=this.makeMask();
this._container=this.makeContent();
},
makeMask:
function()
{
var mask=$$("overlay_div");
if(mask==null)
{
mask
=document.createElement("div");
mask.setAttribute(
"id","overlay_div");
mask.className
="light_overlay";
mask.style.height
=window.screen.availHeight>document.body.scrollHeight?

window.screen.availHeight:document.body.scrollHeight;
mask.style.width
=window.screen.availWidth>document.body.scrollWidth?

window.screen.availWidth:document.body.scrollWidth;
$E(
"body").appendChild(mask);
}
return mask;
},
makeContent:
function()
{
var container=$$("container_div");
if(container==null)
{
container
=document.createElement("div");
container.setAttribute(
"id","container_div");
container.style.height
=this._height;
container.style.width
=this._width;
var v_left=document.body.clientWidth/2-this._width/2;
var v_top=document.body.scrollTop+document.body.clientHeight/2-this._height/2;
container.style.top
=v_top;
container.style.left
=v_left;
container.className
="light_container";
container.innerHTML
="<div class='light_header'><a class='light_close'

οnclick='closeDialog()'>关闭</a></div><iframe frameborder='0' scrolling='no'

style='border:0;width:100%;height:98%;' src='
"+this._url+"'></iframe>"
$E(
"body").appendChild(container);
}
return container;
},
displayLayer:
function(display)
{
this._mask.style.display=display==""?"none":display;
this._container.style.display=display==""?"none":display;
}
}

 

 

当我们需要使用弹出框的时候就可以直接New一个对象
如下:

    //创建对象
    var lightbox_example=New(LightBox,[url,width,height]);

    //显示弹出层
    lightbox_example.displayLayer("block");

 

您可以点击此处 下载代码

转载于:https://www.cnblogs.com/trampt/archive/2010/08/10/1796780.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那些你从未见过的神奇物理化学实验,今天全给你整理了!

全世界只有3.14 % 的人关注了爆炸吧知识1.电荷吸引水流2.比空气重的六氟化硫六氟化硫&#xff08;SF6&#xff09;&#xff0c;法国两位化学家Moissan和Lebeau于1900年合成的人造惰性气体&#xff0c;具有良好的电气绝缘性能及优异的灭弧性能&#xff0c;是一种优于空气和油之间…

ASP.NET Core使用Middleware有条件地允许访问路由

问题有时&#xff0c;我们可能在Web API中包含一些具有调试功能的请求。比如我们上次的文章中“晕了&#xff01;这个配置值从哪来的&#xff1f;”使用的获取配置值的功能&#xff1a;endpoints.MapGet("/test2/{key:alpha}", async context > {var key context…

如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

Virtualbox 无缝整合linux和windows双系统

一直以来&#xff0c;为了使用公司规定的内部通信工具RTX, 而不得不在ubuntu上安装一个virtualbox以运行RTX, 但是由于是运行在虚拟机里面&#xff0c;所以经常不能及时的回复同时的消息&#xff0c;而造成沟通的延迟。 所以就想着&#xff0c;能不能及时的在ubuntu上面看到…

聊一聊对外API接口的存活检查可以怎么做

背景 公司内部的API接口一般会分为两大类&#xff0c;一类是直接暴露在公网可以访问的&#xff0c;一类是只能在局域网内访问的。暴露在公网的一般就是业务网关以及一些和第三方公司有着某些合作&#xff0c;从而进行数据交互的接口。检查API接口是否存活&#xff0c;第一反应应…

各种机械原理动态图,看完脑洞大开,绝对涨姿势!

全世界只有3.14 % 的人关注了爆炸吧知识1.钥匙开锁2.撬锁3.汽车换挡4.手枪上膛发射5.炮弹发射原理6.手雷爆炸7.洗衣机8.缝纫机9.心脏10. 近视眼手术&#xff1a;原理其实很简单&#xff0c;就是把角膜削成一个“隐形眼镜”。11.零钱分类12.吹号转载来源&#xff1a;物理好教师部…

CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)...

装饰模式(Decorator Pattern)&#xff1a; 动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活。 模式角色与结构&#xff1a; 示例代码&#xff1a; using System; using System.Collections.Generic; using Syste…

ShardingCore 如何呈现“完美”分表

这篇文章是我针对efcore的分表的简单介绍,如果您有以下需求那么可以自己选择是否使用本框架,本框架将一直持续更新下去&#xff0c;并且免费开源为.net生态做贡献,如果您觉得不错那么请帮忙点个star谢谢&#xff0c;框架地址[sharding-core](https://github.com/xuejmnet/shard…

使用javascript oop开发滑动(slide) 菜单控件

这里使用原生的javascript&#xff0c;用面向对象的方式创建一个容易维护使用方便的滑动菜单&#xff0c;调用方式如下&#xff1a;var$sliding document.getElementById("silding");vars1 newSliding();s1.commands $sliding.getElementsByTagName("dt");…

他毕业于北师大,编写了我国首套数学教材,陈景润华罗庚都崇拜他

全世界只有3.14 % 的人关注了爆炸吧知识要说起我国著名的数学家&#xff0c;很多人会想到陈景润、华罗庚等人&#xff0c;这些大数学家为我国数学研究做出了卓越贡献&#xff0c;也深深影响了很多人。那么&#xff0c;像陈景润、华罗庚这些大数学家&#xff0c;他们学习数学有受…

用多媒体库 Bass.dll 播放 mp3 [8] - 实时显示左右声道的峰值

为什么80%的码农都做不了架构师&#xff1f;>>> 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, ComCtrls;typeTForm1 class(TForm)OpenDialog1: TOpe…

最近看了两本低代码的书

月初写了一篇《你真的了解低代码平台吗&#xff1f;》&#xff0c;介绍了下我对低代码产品的一些认识&#xff0c;随后有朋友送了我两本华章出版的关于低代码的书&#xff1a;明道云的《零代码实战》和微软的《实战低代码》&#xff0c;目前市面上也就这两本关于低代码的书。因…

如何逼疯一名数学系学生?

全世界只有3.14 % 的人关注了爆炸吧知识今天在知乎竟看到这样一个问题但看在关注人数如此之多超模君就放下成见稍微透露一下我们的“底线”到底要怎样做才能激怒数学系学生数学沾边法顾名思义只要和数学沾边就可以开怼在菜市场算菜钱时在提问后的0.5秒迅速补上致命一刀经过彩票…

WinAPI: 钩子回调函数之 MouseProc

为什么80%的码农都做不了架构师&#xff1f;>>> MouseProc(nCode: Integer; {}wParam: WPARAM; {}lParam: LPARAM {} ): LRESULT; {}//待续...转载于:https://my.oschina.net/hermer/blog/320962

内推!字节、阿里、网易火热招聘中,内推优筛简历,快人一步拿offer,真香!(送内推码)...

全世界只有3.14 % 的人关注了爆炸吧知识“金三银四”可谓招聘的黄金期。一方面&#xff0c;校园春招正如火如荼的进行中&#xff0c;另一方面&#xff0c;各大企业也纷纷启动了暑假实习招聘。对于2020届的同学来说&#xff0c;务必要利用好“应届生”这个身份&#xff0c;把握住…

如何将10进制转成16进制,又如何将16进制数转成10进制,C#和VB代码?

方法1&#xff1a; int d10; d.ToString("x") //或把x改为&#xff38;&#xff0c;&#xff0c;&#xff0c;就变成了&#xff11;&#xff16;位的字符串了&#xff0e; int xConvert.ToInt32(d.ToString("x"),16);&#xff0f;&a…

本科4篇顶会论文如何做到?清华特奖高天宇干货分享:我是这样写论文、做实验、与导师相处...

全世界只有3.14 % 的人关注了爆炸吧知识本科生&#xff0c;距离“科研”有多远&#xff1f;有人还处在“小朋友你是否有很多问号”的状态&#xff0c;但也有人本科就连发顶会文章&#xff0c;光环闪瞎众人。其中可有什么秘诀&#xff1f;清华本科特奖获得者、清华计算机大四学生…

java final 修改_“无法改变的设计”——浅谈Java中的final关键字

在Java中&#xff0c;final关键字可以用来修饰类、变量(包括成员变量和局部变量)、方法&#xff0c;下面从这三个方面分别说明。final方法当一个方法被final修饰时&#xff0c;表明这个方法不能被子类重写。下面程序试图重写final方法&#xff0c;将会引发编译错误。public cla…

一致性 hash 算法( consistent hashing )

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出&#xff0c;目前在cache 系统中应用越来越广泛&#xff1b; 1 基本场景 比如你有 N 个 cache 服务器&#xff08;后面简称 cache &#xff09;&#xff0c;那么如何将一个对象 obje…

复工之后,如何让自己的时间更值钱

全世界只有3.14 % 的人关注了爆炸吧知识时间最不偏私给任何人都是二十四小时时间也最偏私给任何人都不是二十四小时而如何让自己的时间更值钱以下公众号或许能给你一些启示赶快扫码关注吧&#xff01;RSS精选ID&#xff1a;KindleNewsRSS精选是一个专注于时间管理iOS相关及Kind…