/**
* 产生长度为32的Guid字符串
*/
function getGuid32() {
var rt_str = String.fromCharCode(65 + Math.floor(Math.random() * 26));
for (i = 0; i < 31; ++i) {
var num = Math.floor(Math.random() * (26 + 26 + 10));
var ch_str;
if (num < 10) {
ch_str = num.toString();
}
else if (num < 10 + 26) {
ch_str = String.fromCharCode(65 + num - 10);
}
else {
ch_str = String.fromCharCode(97 + num - 10 - 26);
}
rt_str += ch_str;
}
return rt_str;
} /**
* 根据guid删除alert-div元素
* @param Id guid
*/
function delAlertDivById(Id) {
//等待layer自动处理好
setTimeout(function () {
var $alert_div = $(".alert-div[data-guid='" + Id + "']");
if ($alert_div.length == 0) {
clearInterval(id);
}
else {
$alert_div.remove();
}
}, 1200);
//上面这个延时数值很重要,因为layer没提供close的回调,所以只能如此等待
} /**
* 关闭弹层相关的清理工作
* @param that myAlert对象
*/
function closeWork(that) {
clearTimeout(that.autoCloseTimerId);
layer.close(that.winId);
delAlertDivById(that.uniqueId);
} /**
* 根据myAlert对象组件出jQuery弹窗对象
* @param that myAlert对象
*/
function buildPopup(that) {
var baseHtmlStr = "\
<div class='alert-div'>\
<div class='title'>\
<i class='fa icon'></i>\
<span class='text'></span>\
<i class='fa fa-close icon-close'></i>\
</div>\
<div class='content text-center'>\
<i class='fa fa-5x icon'></i>\
<span class='text1'></span>\
<span class='text2'></span>\
</div>\
<div class='control text-center'>\
<div class='btn btn-base'></div>\
</div>\
</div>\
";
var $baseJq = $(baseHtmlStr); $baseJq.attr("data-guid", that.uniqueId); $baseJq.children(".title").children(".icon").addClass(that.titleIcon);
$baseJq.children(".content").children(".icon").addClass(that.contentIcon);
$baseJq.children(".title").children(".text").text(that.title);
$baseJq.children(".content").children(".text1").text(that.text);
$baseJq.children(".content").children(".text2").text(that.summary);
$baseJq.children(".control").children(".btn-base").text(that.okBtnText); $baseJq.children(".title").children(".icon-close").click(that.canClose ? that.closeBtnFunction : function () { });
$baseJq.children(".control").children(".btn-base").click(that.okBtnFunction); return $baseJq;
} /**
* 根据配置对象对于myAlert对象进行配置
* @param dstObj 目标对象,myAlert对象
* @param cfgObj 配置对象
*/
function defaultConfig(dstObj, cfgObj) {
if (cfgObj == undefined) {
cfgObj = new Object();
} dstObj.uniqueId = cfgObj.uniqueId || getGuid32(); dstObj.title = cfgObj.title || "提示";
dstObj.text = cfgObj.text || "确认?";
dstObj.summary = cfgObj.summary || "确认请按下方按钮";
dstObj.okBtnText = cfgObj.okBtnText || "确认"; dstObj.titleIcon = cfgObj.titleIcon || "fa-info-circle";
dstObj.contentIcon = cfgObj.contentIcon || "fa-exclamation-circle"; if (cfgObj.canClose == undefined) {
dstObj.canClose = true;
}
else {
dstObj.canClose = cfgObj.canClose;
}
dstObj.autoCloseTimer = cfgObj.autoCloseTimer || -1; dstObj.okBtnFunction = cfgObj.okBtnFunction || function () {
closeWork(dstObj);
};
dstObj.closeBtnFunction = cfgObj.closeBtnFunction || function () {
closeWork(dstObj);
};
dstObj.autoCloseTimerId = -1;
dstObj.autoCloseFunction = cfgObj.autoCloseFunction || function () {
closeWork(dstObj);
}; //存储layer返回的弹层id
dstObj.winId = -1;
} /**
* myAlert对象构造函数
* @param cfgObj myAlert配置对象
*/
function myAlert(cfgObj) { defaultConfig(this, cfgObj); //弹出弹层方法
this.show = function () {
if ($(".alert-div[data-guid='" + this.uniqueId + "']").length > 0) {
return;
} var $baseJq = buildPopup(this); $("body").append($baseJq); /**
* 实际弹窗部分
*/
var $popup_dom = $baseJq;
this.winId = layer.open({
id: this.uniqueId,
type: 1,
closeBtn: 0,
title: false,
content: $popup_dom,
area: [$popup_dom.width(), $popup_dom.height()]
}); if (this.canClose) {
if (this.autoCloseTimer > -1) {
var that = this;
this.autoCloseTimerId = setTimeout(function () {
that.autoCloseFunction();
}, this.autoCloseTimer);
}
}
};
}
.layui-layer {
background-color: rgba(255, 255, 255, 0) !important;
} .alert-div {
position: relative;
width: 740px;
height: 480px;
border: 1px solid #f2af6f;
border-radius: 6px;
font-family: 'Microsoft YaHei UI';
margin: 0px;
padding: 0px;
background-color: white;
overflow-y: hidden;
overflow-x: hidden;
display: none;
} .alert-div .title {
background: linear-gradient(to bottom, #f2af6f 10%, #f3a02c 90%);
font-size: 48px;
height: 70px;
} .alert-div .title .icon {
margin: 0px 0px 10px 14px;
} .alert-div .title .text {
position: absolute;
top: 9px;
left: 67px;
font-size: 34px;
font-weight: bold;
} .alert-div .title .icon-close {
margin: 8px 12px 10px 14px;
float: right;
} .alert-div .content {
height: 270px;
padding-top: 50px;
} .alert-div .content .icon {
display: block;
} .alert-div .content .text1 {
color: black;
font-size: 38px;
margin-top: 40px;
display: block;
} .alert-div .content .text2 {
color: #444;
font-size: 24px;
margin-top: 10px;
display: block;
} .alert-div .control {
height: 140px;
} .alert-div .control .btn-base {
border: solid 1px #f2af6f;
border-radius: 6px;
font-size: 36px;
font-weight: bold;
padding-left: 40px;
padding-right: 40px;
margin-top: 35px;
background: linear-gradient(to bottom, #f2af6f 10%, #f3a02c 90%);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="Content/bootstrap.css" />
<link rel="stylesheet" href="Content/font-awesome.css" />
<link rel="stylesheet" href="layer/skin/default/layer.css" />
<link rel="stylesheet" href="Content/trml-myAlert.css" />
</head>
<body>
<div class="container" style="margin-top: 20px;">
<input type="button" class="btn btn-primary btn-test1" value="测试1" />
</div>
<script src="Scripts/jquery-3.1.1.js"></script>
<script src="Scripts/bootstrap.js"></script>
<script src="layer/layer.js"></script>
<script src="Scripts/trml-myAlert-jq.js"></script>
<script>
$(".btn-test1").click(function () {
var tstAlert = new myAlert({
uniqueId: "gushihao",
okBtnFunction: function () {
alert("哈哈");
closeWork(tstAlert);
},
autoCloseTimer: 10000,
autoCloseFunction: function () {
alert("我要自动关闭了!");
closeWork(tstAlert);
},
closeBtnFunction: function () {
alert("你点击了关闭按钮");
closeWork(tstAlert);
}
});
tstAlert.show();
});
</script>
</body>
</html>

基于layer简单的弹层封装的更多相关文章

  1. layer系列之弹层layer.prompt

    layer官网:https://www.layui.com/doc/modules/layer.html layer在线调试:http://layer.layui.com/ 如何使用layer.pro ...

  2. layer弹层基本参数初尝试

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 基于layer封装的异步加载分部视图弹出层

    背景:之前一直用的artdialog,但是样式不是很好看,后来偶然看到layer,觉得不错,但是对于.net mvc来说,不能像artdialog一样弹出分部视图是很难受的.所以下面的方法就解决了. ...

  4. layer:web弹出层解决方案

    layer:web弹出层解决方案 一.总结 一句话总结:http://layer.layui.com/ 1.layer中弹出层tips的使用(代码)是怎样的? 使用还是比较简单方便的 //tips层- ...

  5. 弹层组件-layer

    layer是Layui的一个弹层组建,功能强大,总之我很喜欢,下面介绍这个组件的基本用法. 首先如果只需要使用layer而不想使用Layui可以单独下载layer组件包,页面引入jquery1.8以上 ...

  6. Bootstrap~大叔封装的弹层

    回到目录 对于Bootstrap的弹层,插件有很多,今天主要用的是它自带的功能,通过bootstrap提供的模式窗口来实现的,而大叔主要对使用方法进行了封装,开发人员可以自己动态传入弹层的HTML内容 ...

  7. layer遮罩层 简单的遮罩层

    在这里提供一个简单layer遮罩层,想深入了解可以进入 layer官网 多多学习哦. 先看下HTML页面代码 <!DOCTYPE html> <html lang="en& ...

  8. layer实现关闭弹出层刷新父界面功能详解

    本文实例讲述了layer实现关闭弹出层刷新父界面功能.分享给大家供大家参考,具体如下: layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会 ...

  9. 基于Vue.js PC桌面端弹出框组件|vue自定义弹层组件|vue模态框

    vue.js构建的轻量级PC网页端交互式弹层组件VLayer. 前段时间有分享过一个vue移动端弹窗组件,今天给大家分享一个最近开发的vue pc端弹出层组件. VLayer 一款集Alert.Dia ...

随机推荐

  1. python的学习和使用

    1.python的官网:https://www.python.org/ Python简介: .Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. .Python 的设计具有 ...

  2. JDK1.7 Update14 HotSpot虚拟机GC收集器

    在测试服务器上使用如下命令可以查看当前使用的 GC收集器,当然不止这一个命令可以看到,还有其他一些方式 第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了 [csii@ ...

  3. VS2013 快捷键 与 RESHARPER 冲突(转)

    1.VS设置工具-->选项-->环境-->键盘-->重置 2.RESHARPER -->Options-->Environment → Keyboard & ...

  4. [TJOI2018]智力竞赛【网络流】

    题解: 这垃圾题意 问题二分之后等价于 可重复路径判断能否覆盖一张图 1.用floyd连边(来保证可重复) 然后拆点跑最大流 然后答案=n-最大流 但这样子做本来复杂度就比较高,边数增加了n倍 2.我 ...

  5. 精简版自定义 jquery

    function $(id) { var el = 'string' == typeof id ? document.getElementById(id) : id; el.on = function ...

  6. node.js版本管理

    Node安装 Node的安装需要依赖很多,如gcc等,首先我们需要将这些安装成功,用rpm命令查看下,果然我们并没有gcc等,所以要用yum进行安装(基于centos6.9版本): yum -y in ...

  7. Python 事件驱动与异步IO

    一.事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来出发相应的处理.另外两种常见的编程范式是(单线程)同步以及多线程编程. 1. ...

  8. BZOJ3437 小P的牧场 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8696321.html 题目传送门 - BZOJ3437 题意 给定两个序列$a,b$,现在划分$a$序列. 被划 ...

  9. Excel表列名称(给定一个正整数,返回它在 Excel 表中相对应的列名称。)

    例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ... 示例 1: 输入: 1 输出: "A ...

  10. Scala-Unit-1-概述及安装

    一.Scala简介 官网:www.scala-lang.org Scala语言很强大,它集成了面对对象和函数式编程的特点,并且运行在JVM(Java Virtual Machine)上,即必须安装jd ...