热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

纯JavaScript实现完美渐变弹出层

前言:对于Web项目开发尤其是前台UI的设计而言,用户体验至关重要,因为它直接关系到项目的成败,简洁,平滑,优雅的设计永远能够受到用户的青睐。如题,本文将使用纯粹的脚本JavaScript实现渐变的弹出层,其想法也非常简单:利用IFrame实现遮盖,再借助一个DIV用于展现弹出层的内容,最后再使用其内置函数setInterval()和clearInterval()实现渐变

  前言:对于Web项目开发尤其是前台UI的设计而言,用户体验至关重要,因为它直接关系到项目的成败,简洁,平滑,优雅的设计永远能够受到用户的青睐。

如题,本文将使用纯粹的脚本Javascript实现渐变的弹出层,其想法也非常简单:利用IFrame实现遮盖,再借助一个DIV用于展现弹出层的内容,最后再使用其内置函数setInterval()和clearInterval()实现渐变,原理非常简单,只不过要注意对DOM对象/元素的精确控制。由于代码比较简单,在此就不再赘述。以下代码在IE6+,FF3.5+测试通过。

脚本Flyout.js:

代码
  1 // JScript File
  2 if (navigator.userAgent.toLowerCase().indexOf('msie'> -1) {
  3     window.isIE = true;
  4     window.isIE6 = navigator.appVersion.indexOf("MSIE 6.0;"> -1;
  5     window.isIE7 = navigator.appVersion.indexOf("MSIE 7.0;"> -1;
  6     window.isIE8 = navigator.appVersion.indexOf("MSIE 8.0;"> -1;
  7 }
  8 var $ = function(objID) { return document.getElementById(objID) };
  9 var _flyout;
 10 var _fadeTimer;
 11 function showflyout(divWidth, divHeight, paddingWidth) {
 12     var flyout = function() {
 13     }
 14     flyout.prototype = {
 15         clientWidth: document.documentElement.clientWidth,
 16         clientHeight: document.documentElement.clientHeight,
 17         scrollWidth: document.documentElement.scrollWidth,
 18         scrollHeight: document.documentElement.scrollHeight,
 19         iframeID: "envelopIframe",
 20         divID: "popupcontent",
 21         iframebgColor: "#888888",
 22         show: function(divContent) {
 23             //Create envelop iframe
 24             cssText = "position:absolute; z-index:100; background-color:#888888; border-width:0px; filter:alpha(opacity=0); opacity:0.0;";
 25             cssText += "left:0px;";
 26             cssText += "top:0px;";
 27             cssText += "width:" + this.scrollWidth + "px;";
 28             cssText += "height:" + this.scrollHeight + "px;";
 29             this.create("iframe"this.iframeID, cssText, "Cppl_IFrameSrc.htm""");
 30             _fadeTimer = setInterval(function() { fadeIframe("envelopIframe"0.0500.5true) }, 5);
 31             //Create flyout
 32             var cssText = "";
 33             cssText += "display:block; _position:absolute; position:fixed; z-index:101; border:solid 1px Gray; background-color:white;";
 34             cssText += "left:" + (this.clientWidth - divWidth - paddingWidth) / 2 + "px;";
 35             cssText += "top:" + (this.clientHeight - divHeight - paddingWidth) / 2 + "px;";
 36             cssText += "width:" + (divWidth + paddingWidth) + "px;";
 37             cssText += "height: " + (divHeight + paddingWidth) + "px;";
 38             this.create("div"this.divID, cssText, "", divContent);
 39         },
 40         create: function(type, id, csstext, iframesrc, innerhtml) {
 41             var obj = document.createElement(type);
 42             if (iframesrc.length > 0) {
 43                 obj.src = iframesrc;
 44             }
 45             obj.setAttribute("id", id);
 46             obj.style.cssText = csstext;
 47             if (innerhtml.length > 0) {
 48                 obj.innerHTML = innerhtml;
 49             }
 50             document.body.appendChild(obj);
 51             if (iframesrc.length > 0) {
 52                 if (window.isIE) {
 53                     window.envelopIframe.document.bgColor = this.iframebgColor;
 54                 }
 55             }
 56         },
 57         close: function() {
 58             var objIframe = document.getElementById(this.iframeID);
 59             var objDiv = document.getElementById(this.divID);
 60             if (objIframe && objDiv) {
 61                 document.body.removeChild(objIframe);
 62                 document.body.removeChild(objDiv);
 63             }
 64         },
 65         onresize: function() {
 66             var objIframe = document.getElementById(this.iframeID);
 67             var objDiv = document.getElementById(this.divID);
 68             if (objIframe && objDiv) {
 69                 objIframe.style.width = document.documentElement.scrollWidth + "px";
 70                 objIframe.style.height = document.documentElement.scrollHeight + "px";
 71                 objDiv.style.left = (document.documentElement.clientWidth - divWidth) / 2 + "px";
 72                 objDiv.style.top = (document.documentElement.clientHeight - divHeight) / 2 + "px";
 73             }
 74         },
 75         onscroll: function() {
 76             var objDiv = document.getElementById(this.divID);
 77             if (objDiv) {
 78                 objDiv.style.left = (document.documentElement.clientWidth - divWidth) / 2 + document.documentElement.scrollLeft + "px";
 79                 objDiv.style.top = (document.documentElement.clientHeight - divHeight) / 2 + document.documentElement.scrollTop + "px";
 80             }
 81         }
 82     };
 83     _flyout = new flyout();
 84     _flyout.show("This is a flyout."Javascript:closeflyout()\">Close Flyout
");
 85 }
 86 function closeflyout() {
 87     clearInterval(_fadeTimer);
 88     _fadeTimer = setInterval(function() { fadeIframe("envelopIframe"0.0500.5false) }, 5);
 89 }
 90 window.onresize = function() {
 91     if (_flyout) {
 92         _flyout.onresize();
 93     }
 94 };
 95 window.onscroll = function() {
 96     if (_flyout && isIE6) {
 97         _flyout.onscroll();
 98     }
 99 };
100 function fadeIframe(objId, speed, minOpacity, maxOpacity, flag) {
101     var dialog = $(objId);
102     if (dialog) {
103         var value;
104         if (flag) {
105             if (parseFloat(dialog.style.opacity) <= maxOpacity) {
106                 value = parseFloat(dialog.style.opacity) + speed;
107                 dialog.style.filter = 'alpha(opacity=' + value * 100 + ')';
108                 dialog.style.opacity = '' + value + '';
109             }
110             else {
111                 clearInterval(_fadeTimer);
112             }
113         }
114         else {
115             if (parseFloat(dialog.style.opacity) >= minOpacity) {
116                 value = parseFloat(dialog.style.opacity) - speed;
117                 dialog.style.filter = 'alpha(opacity=' + value * 100 + ')';
118                 dialog.style.opacity = '' + value + '';
119             }
120             else {
121                 clearInterval(_fadeTimer);
122                 if (_flyout) {
123                     _flyout.close();
124                 }
125             }
126         }
127     }
128 }

 

调用ASPX代码:

代码
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2 
 3 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 <html xmlns="http://www.w3.org/1999/xhtml">
 5 <head id="Head1" runat="server">
 6     <title>Flyout Sampletitle>
 7 
 8     <script type="text/Javascript" src="Flyout.js">script>
 9 
10 head>
11 <body>
12     <form id="form1" runat="server">
13     <div>
14         <div onclick="Javascript:showflyout(700, 300, 10);">
15             Click me to test
16         div>
17         <br />
18         <br />
19         <br />
20         <br />
21         <br />
22         <br />
23         <br />
24         <br />
25         <br />
26         <br />
27         <br />
28         <br />
29         <br />
30         <br />
31         <br />
32         <br />
33         <br />
34         <br />
35         <br />
36         <br />
37         <br />
38         <br />
39         <br />
40         <br />
41         <br />
42         <br />
43         <br />
44         <br />
45         <br />
46         <br />
47         <br />
48         <br />
49         <br />
50         <br />
51         <br />
52         <br />
53         <br />
54         <br />
55         <br />
56         <br />
57         <br />
58         <br />
59         <br />
60         <br />
61         <br />
62         <br />
63         <br />
64         <br />
65         <br />
66         <br />
67         <br />
68         <br />
69         <br />
70         <br />
71         <br />
72         <br />
73         <br />
74         <br />
75     div>
76     form>
77 body>
78 html>

 

最终效果图:

纯Javascript实现完美渐变弹出层

 


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 涉及的知识点-ViewGroup的测量与布局-View的测量与布局-滑动冲突的处理-VelocityTracker滑动速率跟踪-Scroller实现弹性滑动-屏幕宽高的获取等实现步 ... [详细]
  • 浅谈EditText控件的inputType类型
    其中大多数是用不到的,这里总结一下常用的几种键盘效果1、numberDecimal(可以带小数点的浮点格式)只可以输入0-9数字和小数点,即只浮点数2、number(数字格式 )只 ... [详细]
  • java.lang.Class.getDeclaredMethod()方法java.lang.Class.getDeclaredMethod()方法用法实例教程-方法返回一个Met ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
author-avatar
且羞且笑且动心细
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有