【JavaScript】纯粹javascript无任何插件的兼容IE6的模态框modal

模态框这东西在很多前端框架里面也是存在的,但是很多前端框架,如Bootstrap,AmazeUI,Jquery对IE6的兼容性极其糟糕,因此如果自己手写一个纯粹javascript无任何插件的的模态框,不仅能够兼容IE6,对其它浏览器很有很大的兼容性,同时,也好改。

一、基本目标

比如如下的模态框,怎么用在纯粹html+css+javascript,在无任何前端插件的情况下实现呢?

可以看到效果图,是在IETester的IE6模式中进行的,没有任何问题。

我还在这个模态框里面镶嵌了一个表单。反正你想怎么整就怎么整。当然,还要可移动什么的就算了,你根本就没有必要写这么多特效,搞多了,你的客户也不会赏析你的,浪费表情。

二、基本思想

这东西其实一点不难,网上的代码写得太糟糕罢了。

如图,其实关键是你在打开模态框的那瞬间,把早已隐藏好的定位为position:absolute的模态框显示出来。

之后在javascript的添加一个大小为整个浏览器窗口大小的,灰色透明的div,bodyMask。

IE6是支持透明的。透明样式,兼容全浏览器的css写法如下:

.opacity{
	filter:alpha(opacity=40);
	opacity:0.4;
}

之后,在模态框的“关闭”按钮,就是把bodyMask用javascript中remove节点的方式remove掉,同时隐藏这个模态框。Javascript对DOM的操作,具体见《【JavaScript】网页节点的增删改查》(点击打开链接)。

三、制作过程

有了上面的基本思想,则可以开工了。

1、HTML布局

其HTML布局如下,可以看到bodyMask这个灰色遮罩div,在HTML根本没有出现。一会儿在javascript显示。

其实模态框也可以在javascript中添加,但是这样太不好维护了吧?还是藏在HTML部分!

<!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>jsModal</title>
</head>

<body>
	<!--原网页的内容-->
    <h1>纯粹javascript无任何插件的兼容IE6的模态框</h1>
    <p>ssssssssssssssssssssss</p>
    <p>ssssssssssssssssssssss</p>
    <!--除了这个打开模态框的按钮,是调用下面的openNewDiv()函数,其余没有任何特别-->
    <button onclick="openNewDiv()">打开模态框,登录一ji!</button>
    <p>ssssssssssssssssssssss</p>
    <p>ssssssssssssssssssssss</p>
    <p>ssssssssssssssssssssss</p>

    <!--这里是已经藏在网页中的模态框-->
    <!--除了宽度,背景颜色,边框这三个属性,其余的显示、定位、层次属性都是必须的。z-index层次属性,只在position:absolute的情况下有效。-->
    <div id="modalDiv" style="display:none;position:absolute;z-index:2;width:300px;background-color:#FFFFFF;border:3px solid #0066cc;">
    	<!--这里仅仅是为模态框的内容好看一点,这个style属性不是必须的-->
        <div style="text-align:center; padding:5px">
        	<!--你想在模态框中布置什么,就再这里大书特书吧!-->
            用户名:<input type="text"/><br />
            密码:<input type="text"/><br />
            <input type="submit" value="提交"/><button onclick="dismissModal()">关闭</button><br />
        </div>
    </div>

</body>
</html>

2、核心脚本

关键是这里的核心脚本

<script>
function openNewDiv() {
	//这里取出当前窗口的长与宽。兼容各个浏览器,有滚动条没有滚动条的情况。
	//你在我的模态框出现的时候,又调整窗口,可能取不到调整窗口之后的大小,那我没办法了,我没理由开个函数去不停地轮询你是否调整窗口吧?
	if(document.documentElement.scrollWidth<document.documentElement.clientWidth+document.documentElement.scrollLeft){
		var windowWidth=document.documentElement.clientWidth+document.documentElement.scrollLeft;
	}
	else{
		var windowWidth=document.documentElement.scrollWidth;
	}
	if(document.documentElement.scrollHeight<document.documentElement.clientHeight+document.documentElement.scrollTop){
		var windowHeight=document.documentElement.clientHeight+document.documentElement.scrollTop;
	}
	else{
		var windowHeight=document.documentElement.scrollHeight;
	}
	//先把模态框显示出来,再利用offsetWidth与offsetHeight取其长与宽
	//offsetWidth与offsetHeight是可见区域的大小,尽管modalDiv没有设置height样式,但同样可以利用这种方式取其高
	document.getElementById("modalDiv").style.display="block";
	var modalDivWidth=document.getElementById("modalDiv").offsetWidth;
	var modalDivHeight=document.getElementById("modalDiv").offsetHeight;
	//这里定位modalDiv主要是为了使其居中
	document.getElementById("modalDiv").style.left=(windowWidth-modalDivWidth)/2+"px";
	document.getElementById("modalDiv").style.top=(windowHeight-modalDivHeight)/2+"px";

	//modalDiv的动作搞完了,搞那个灰色遮罩div,先创建一个节点。
	var bodyMask=document.createElement("div");
	bodyMask.id="bodyMask";
	bodyMask.style.position="absolute";
	//如果你的网页中还有其它zIndex,那么,这个只应该大于其它zindex,同时上面的模态框的zindex,应该比这个zindex大1
	bodyMask.style.zIndex="1";
	//这个灰色遮罩层的长与宽就是当前窗口的长与宽。
	bodyMask.style.width=windowWidth+"px";
	bodyMask.style.height=windowHeight+"px";
	bodyMask.style.top="0px";
	bodyMask.style.left="0px";
	bodyMask.style.background="#000";
	//设置其透明度为40%
	bodyMask.style.filter="alpha(opacity=40)";
	bodyMask.style.opacity="0.40";
	//在body节点下添加这个div
	document.body.appendChild(bodyMask);
}
//关闭模态框就两步,使模态框隐藏同时移除bodyMask
function dismissModal() {
	document.getElementById("modalDiv").style.display="none";
	document.body.removeChild(document.getElementById("bodyMask"));
}
</script>

至此,整个兼容IE6的模态框就写完了,谁说不用框架写不出好网页的?用框架才越来越写不出好网页!

时间: 2024-10-26 08:32:35

【JavaScript】纯粹javascript无任何插件的兼容IE6的模态框modal的相关文章

Bootstrap历练实例:模态框(Modal)插件

模态框(Modal)是覆盖在父窗体上的子窗体.通常,其目的是显示来自一个单独源的内容,可以在不离开父窗体的情况下进行一些交互,子窗体提供一些交互或信息. <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Bootstrap历练实例:模态框(Modal)插

【JavaScript】利用文件碎片DocumentFragment改进兼容IE6可调可控的图片滑块

上次在<[JavaScript]兼容IE6可调可控的图片滑块>(点击打开链接)的算法写得很不好,如果你要做N个图片的图片滑块,每次显示X张图片,则要一次性地多加载X-1张图片,还要用一种显示框移动的方法去实现.更可怕的是,还要理所当然地认为就是这样的.虽然这个违背常人思维方式在网上广泛流传,而且好像还是公式一样,就只有一种实现方法,其实不是的,明显可以利用文件碎片DocumentFragment去实现图片滑块,如果你要N个图片的图片滑块,就加载N个图片,这才是正常的.关键利用文件碎片,实现20

flexslider轮播器插件【兼容IE6】

Flexslider是一款基于的jQuery内容滚动插件.它能让你轻松的创建内容滚动的效果,具有非常高的可定制性.开发者可以使用Flexslider轻松创建各种图片轮播效果.焦点图效果.图文混排滚动效果. 查看演示    下载源码 Flexslider具有以下特性: 支持滑动和淡入淡出效果. 支持水平.垂直方向滑动. 支持键盘方向键控制. 支持触控滑动. 支持图文混排,支持各种html元素. 自适应屏幕尺寸. 可控制滑动单元个数. 更多选项设置和回调函数. HTML 首先在页面head部位载入j

【php】利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6

MVC只是一种设计模式而已,一度被认为Model 1,也就是服务器语句与HTML语句杂糅的php,其实不用任何框架,仅仅利用原生态的JavaScript Ajax也可以对其进行MVC设计.由于什么都没有用,因此对IE6的兼容性是非常强的.还是<[php]数据库的增删改查和php与javascript之间的交互>(点击打开链接)那个页面的,对数据库增删改查的内容,希望各位能推广到整个网站. 一.基本目标 整个网页实现效果如下,用户输入完表单马上就有效果. 二.基本思想 首先,在test数据库中有

【JavaScript】利用sort()函数与文件碎片实现表格的前端排序,兼容IE6原生态

表格排序在网页的应用也很多,尤其是一些信息系统输出一个密密麻麻的表格给人看,客户肯定会提出表格排序的要求.很多人定式思维地认为表格的排序一定要通过数据库后端进行交互,使用带order by asc/desc的语句去实现,然后再利用ajax似乎很完美似得.其实根本就不用与数据库打交道.在前端给出任意一个表格,都能够利用sort()函数与文件碎片实现表格的前端排序.在jquery里面是有一个advanceTable的插件做这件事,但是这个插件相当不好的是什么呢?与平常的插件一样,代码写得天花龙凤,没

使用bootstrap的插件实现模态框效果方法步骤详解

本文和大家分享的主要是使用bootstrap 库的模态框插件 modal.js 来实现模态框效果相关内容,同时也使大家进一步熟悉 bootstrap 的插件使用,一起来看看吧,希望对大家学习bootstrap有所帮助. 一. bootstrap 的 js 插件的简单介绍 1.引入 我们在使用 bootstrap 库时,引入的文件 bootstrap.js 或者 bootstrap.min.js 就是 bootstrap的插件文件,这两种文件都集成了 bootstrap 的所有插件,区别在于 *.

Bootstrap 模态框(Modal)插件

http://www.runoob.com/bootstrap/bootstrap-modal-plugin.html 模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 modal.js.或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstrap.min.js. 用法 您可以切换模态

使用bootstrap的插件实现模态框效果

在上一篇文章中,我们使用 js+css 实现了模态框效果,在理解了模态框的基本实现方法和实现效果后,我们就要寻找更快捷的方法,又快又好的来完成模态框开发需求,从而节约时间,提高效率.一个好的轮子,不仅能大幅减轻工作量,而且能让我们的代码更简明和优雅. 今天我们选择使用著名的 bootstrap 库的模态框插件 modal.js 来实现模态框效果,同时也使大家进一步熟悉 bootstrap 的插件使用. 一. bootstrap 的 js 插件的简单介绍 1.引入 我们在使用 bootstrap

【JavaScript】利用onmousemove与onmouseout事件制作兼容IE6纯javascript无插件原生态的下拉菜单dropdown

下拉菜单dropdown在很多前端框架里面都有,直接拿来用就可以的,但是框架内的下拉菜单不好改,也很可能会有兼容性问题. 其实这东西完全可以利用HTML+CSS+Javascript去实现的. 效果如下: 其基本制作思想如下: 首先是HTML与CSS的布局,先布置一个table,这个table里面有两行,一行放下拉按钮,一行放下拉菜单,占据整个宽度的100%,单元格之间的行距为0. 因为共5个元素每列占20%. 这里不用div的float去布局,是因为这里使用table的话,这个下拉菜单组非常好