使用js闭包封装一个原生的模态框
现在都是用的是人家封装的框架什么的,但是对于底层的了解也是必须的,不然就无法提升,下面分享一个2 years ago 自己封装的一个提示框
样式很简单(适用于任何分辨率)



具体代码如下
/**
* 该js 用于数据加载时给予模态框提示,以增加用户体验
* @since 1.0.1
* @param $ jQuery
* @author dex
* 初创:2017.8.16
* 更改:2017.11.18
* 使用方法:
* $.layer.openMask("正在登陆... ");//显示模态框
* $.layer.setMaskTitle("改变提示语!");//更改提示语
* $.layer.closeMask();//关闭模态框
* $.layer.loading();//打开\关闭加载模态框
*
* $.layer.loading(); // 数据加载框
* $.layer.alert("网络异常!");// 自动关闭提示框
*
* 注意 【background: 'transparent url(./layer/img/loading.gif) no-repeat',】 这路径需要按自己放置目录更改
*/
(function ($) {
var layer = {
_init:function(message){//初始化layer
var _html ='<div id="dialog_box"></div><div id="load_box"><span id="load_msg">'
+ message + '</span></div>';
//必须先将_html添加到body,再设置Css样式
$("body").append(_html); GenerateCss();
},
_open:function(message){//显示layer
layer._init(message);
},
_change:function(message){//更改layer
$("#load_msg").html(message);
///定时关闭遮罩...
window.setTimeout(function(){
layer._close();
}, 3000);
},
_close:function(){//关闭layer
if($("#dialog_box").length > 0)
$("#dialog_box,#load_box").remove();
},
_action:function(message){//执行动作
//根据页面是否存在dialog_box来决定调用哪一个方法
if($("#dialog_box").length > 0){
layer._change(message);
}else{
layer._open(message);
}
}
};
//生成css
var GenerateCss = function(){
$("#dialog_box").css({ width: 'auto', height: 'auto', zIndex: '99999', position: 'fixed',
filter: 'Alpha(opacity=60)', backgroundColor: 'White', top: '0', left: '0', opacity: '0.4'
});
$("#load_box").css({ zIndex: '999999', position: 'fixed',
backgroundColor: 'black', borderRadius: '8px',textAlign:'center',opacity: '0.6'
});
$("#load_msg").css({ display: 'block', fontSize: '14px', color: 'White',
padding: '10px 15px',
borderRadius: '15px 15px 0 0'
});
var _widht = document.documentElement.clientWidth; //屏幕宽
var _height = document.documentElement.clientHeight; //屏幕高
var boxWidth = $("#load_box").width();
var boxHeight = $("#load_box").height();
//让提示框居中
$("#load_box").css({ top: (_height - boxHeight) / 2 + "px", left: (_widht - boxWidth) / 2 + "px" });
};
var overridMsg = function(message){
message = $.extend({msg:"加载中..."},{msg:message});
layer._action(message.msg);
};
$.extend({
layer: {
setMaskTitle: function (title) {
overridMsg(title);
},
openMask: function (title) {
overridMsg(title);
},
closeMask: function () {
layer._close();
},
loading:function(){
layerLoading._action();
},
alert: function() {// 打开一个默认模态提示框,默认持续 1 秒之后关闭,单位毫秒
var title = arguments[0]?arguments[0]:"";
var timeout = arguments[1]?arguments[1]:1000;
overridMsg(title);
setTimeout(function(){layer._close();}, timeout);
}
}
});
var layerLoading = {
_init:function(){//初始化layer
var _html ='<div id="loading_box"></div><div id="loading_inner"></div>';
//必须先将_html添加到body,再设置Css样式
$("body").append(_html); GenerateCssOfLoading();
},
_open:function(){//显示layer
layerLoading._init();
},
_close:function(){//关闭layer
$("#loading_box,#loading_inner").remove();
},
_action:function(){//执行动作
//根据页面是否存在dialog_box来决定调用哪一个方法
if($("#loading_box").length > 0){
layerLoading._close();
}else{
layerLoading._open();
}
}
};
//生成css
var GenerateCssOfLoading = function(){
$("#loading_box").css({ width: '100%', height: '100%', zIndex: '99999', position: 'fixed',
filter: 'Alpha(opacity=60)', backgroundColor: 'White', top: '0', left: '0', opacity: '0.4'
});
$("#loading_inner").css({ width:32,height:32, zIndex: '999999', position: 'fixed',
background: 'transparent url(./layer/img/loading.gif) no-repeat',
textAlign:'center'
});
var _widht = document.documentElement.clientWidth; //屏幕宽
var _height = document.documentElement.clientHeight; //屏幕高
var boxWidth = $("#loading_inner").width();
var boxHeight = $("#loading_inner").height();
//让提示框居中
$("#loading_inner").css({ top: (_height - boxHeight) / 2 + "px", left: (_widht - boxWidth) / 2 + "px" });
};
})(window.jQuery);
资源下载 https://download.csdn.net/download/qq_34817440/11599784
使用js闭包封装一个原生的模态框的更多相关文章
- 使用jq把js代码封装一个自己的插件
为什么要把js功能封装成插件呢?我觉得有以下几点吧 1.最基本的原因就是便于代码复用. 2.便于维护和管理. 3.提升自身的能力. 4.避免各个相同功能组件的干扰,以及一些作用域会相互影响的问题. j ...
- js中封装一个自己的简单数学对象
封装一个数学对象求最大值最小值 <script> var myMath={ PI:3.1415926, max:function(){ var max=arguments[0];//注意a ...
- JavaScript封装一个MyAlert弹出框
平时我们想要显示一些提示信息时会用到alert方法,alert是全局的一个方法,会短暂的中断程序,我们主要用来显示提示客户信息.但是这个方法有一定的局限性,而且本身样式也不够美观.于是我封装了一个实用 ...
- vue封装一个简单的div框选时间的组件
记录一下我前段时间封装的一个vue组件吧.技术需要积累,有时间我把我之前写的还不错的组件都开源出来.并尝试vue和react 两种方式的组件封装.今天简单写下鼠标框选div选中效果的封装吧. div框 ...
- 用js写出一个漂亮的单选框选中效果
一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...
- js学习之--Bootstrap Modals(模态框)
http://www.runoob.com/bootstrap/bootstrap-v2-modal-plugin.html http://outofmemory.cn/bootstrap/tutor ...
- [js高手之路]javascript腾讯面试题学习封装一个简易的异步队列
这道js的面试题,是这样的,页面上有一个按钮,一个ul,点击按钮的时候,每隔1秒钟向ul的后面追加一个li, 一共追加10个,li的内容从0开始技术( 0, 1, 2, ....9 ),首先我们用闭包 ...
- JS /CSS 实现模态框(注册和登录组件)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- js闭包vs Java内部类
前言: 昨天写了一个关于Java内部的博客,在内部类的最后一点中谈到了Java闭包的概念,他是这样定义闭包的:闭包是一个可调用的对象,它记录了一些信息,这些信息来自创建它的作用域.结合Java的内部类 ...
- MVC中调用模态框之后导致JS失效
今天在工作中碰到一个页面调用模态框之后,页面原来的JS失效的问题,由于前台经验较少,折腾了一天... 问题描述是这样,在页面,有两个下拉列表框A和B,做了下拉列表框联动,有一个button按钮会调用模 ...
随机推荐
- ISCC 2022 RE
ISCC 2022 RE 练武题 Amy's Code v9=[0]*20 v9[0] = 149 v9[1] = 169 v9[2] = 137 v9[3] = 134 v9[4] = 212 v9 ...
- Tars-Java网络编程源码分析
作者:vivo 互联网服务器团队- Jin Kai 本文从Java NIO网络编程的基础知识讲到了Tars框架使用NIO进行网络编程的源码分析. 一.Tars框架基本介绍 Tars是腾讯开源的支持多语 ...
- MySQL 高级查询截取分析
慢日志分析流程如下:[1]观察(至少跑一天),看看生产慢 SQL 情况.[2]开启慢查询日志,设置阈值,比如对超过5秒的 SQL 语句进行抓取.[3]explain+慢 SQL 分析.[4]show ...
- golang pprof监控系列(2) —— memory,block,mutex 使用
golang pprof监控系列(2) -- memory,block,mutex 使用 大家好,我是蓝胖子. profile的中文被翻译轮廓,对于计算机程序而言,抛开业务逻辑不谈,它的轮廓是是啥呢? ...
- VUE3.x之Proxy 我们为什么要使用Proxy
Object.defineProperty 劫持数据 只是对对象的属性进行劫持 无法监听新增属性和删除属性 需要使用 vue.set, vue.delete 深层对象的劫持需要一次性递归 劫持数组时需 ...
- ECC(SM2) 简介及 C# 和 js 实现【加密知多少系列】
〇.简介 椭圆曲线密码学(Elliptic curve cryptography:ECC),一种建立公开密钥加密的演算法,基于椭圆曲线数学.利用有限域上椭圆曲线的点构成的 Abel 群离散对数难解性, ...
- [智能制造] 如何利用生产软件(MES)进行生产信息收集?
1 如何保证生产管理软件所收集信息的准确性? 1.1 当前制造企业使用MES系统收集信息的现状 原以为使用了MES生产管理系统后,会得到稽核员的肯定. 但没想到,在实际的稽核过程中,稽核员还是发现目前 ...
- Ununtu服务器安装Nginx与PHP
Ununtu服务器安装Nginx与PHP 1. 安装Nginx: 1.1 sudo apt update sudo apt install nginx 验证结果,使用命令: sudo systemct ...
- 解决CKEditor中img标签自动添加style样式的问题-禁止自动设置width和height 帝国cms编辑器图片自动加宽高
在使用CKEditor的过程中发现,每次上传或添加图片的时候,总会自动给img标签添加width和height的style内联样式.由于网站本身对图片有进行自适应处理(添加了自适应的CSS),所以im ...
- 开心档之MySQL WHERE 子句
MySQL WHERE 子句 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 ...