前言
- 项目当中经常使用到弹出表单,需要弹出表单的页面都要写一些DOM,或者引用第三方UI来满足需求。拿来的固然很香,但是要提升自己总要去不断的学习和总结。
实现思路
用JS去创建DOM,哪里需要用到这个表单,直接使用方法即可,使用完之后记得销毁DOM。
动态的值为:form表单的 ID,ACTION 每个input 的 NAME TYPE 等 提交之后的回调函数
确定完思路之后直接上代码
具体实现
1.弹框咱们都需要一个遮罩层和标题和表单内容
2.设置DOM的属性
3.设置动态的文本
4.绑定关闭事件和提交事件
// 创建元素
var publicMask = document.createElement('div');
var formCon = document.createElement('div');
var formConTop = document.createElement('div');
var formConBot = document.createElement('div');
var formBox = document.createElement('form');
//设置属性
publicMask.id = "publicMask";
formCon.id = "formCon";
formConTop.className = "formConTop";
formConBot.className = "formConBot";
//设置动态的文本
formConTop.innerHTML='<p class="title">'+conList.biaoti+'</p><a class="close"><i class="fa fa-close"></i></a>';
var FromCon = '<form action='+conList.formAction+' id='+conList.formId+ ' method="post">';
var htmlCon = '';
for (var i=0;i<conList.data.inputList.length;i++){
htmlCon+='<div class="formConBotC"><span>'+conList.data.inputList[i].wenzi+'</span><input name='+conList.data.inputList[i].name+' value="" /></div>';
}
//把创建的DOM添加到body
formConBot.innerHTML=FromCon+htmlCon+'<a class="subFormFB">提交</a>';
formBox.append(formConBot);
formCon.append(formConTop);
formCon.append(formBox);
document.body.append(formCon);
document.body.append(publicMask);
// 事件
// 关闭FORM弹框和蒙版
document.getElementsByClassName("close")[0].addEventListener('click',function(){
document.body.removeChild(document.querySelector('#publicMask'));
document.body.removeChild(document.querySelector('#formCon'));
});
//点击提交方法
document.getElementsByClassName("subFormFB")[0].addEventListener('click',function(){
// 如果回调函数存在且类型是function
if ( typeof cb =='function' ){
if(cb()==true){
document.body.removeChild(document.querySelector('#publicMask'));
document.body.removeChild(document.querySelector('#formCon'));
}
}
});
完整代码和样式
样式
<style>
#publicMask{background-color:rgba(0,0,0,0.5);position:fixed;left:0;top:0; bottom: 0;right: 0;z-index:998;}
#formCon{position: fixed;left: 50%;top: 50%;-moz-transform: translate(-50%,-50%);-webkit-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); transform: translate(-50%,-50%); width: 410px;min-height: 200px;background-color: #fff;border-radius: 10px; z-index:999;}
#formCon .formConTop{height: 50px;line-height: 50px;border-bottom: 1px solid #ece8e8;position: relative;}
#formCon .formConTop .title{font-size: 16px;font-weight: bold;font-size: 16px;font-weight: bold;text-align: left;padding-left: 15px;}
#formCon .formConTop a{height: 100%;width: 50px;position: absolute;right: 0;top:0;text-align: center;}
#formCon .formConTop i{font-size: 25px;color: #f85e5e;}
#formCon .formConTop i::before {content: "\2716";}
#formCon .formConBot{width: 80%;margin: 0 auto;padding: 20px 0 30px;}
#formCon .formConBot .formConBotC{height: 50px;line-height: 50px;margin-bottom: 20px;}
#formCon .formConBot .formConBotC span{display: inline-block;width: 80px;font-size: 15px;text-align: justify;text-align-last: justify;}
#formCon .formConBot .formConBotC input{width: 240px;border: 1px solid #989898; height: 40px;border-radius: 5px;padding: 0 10px;font-size: 15px;}
#formCon .subFormFB{width: 100px;height: 30px;border-radius: 5px;display: block;margin: 0 auto;background: #690000;color: #fff;font-size: 15px;text-align: center;line-height: 30px;}
</style>
代码
注:conList参数在使用的时候有详细介绍
/**
*
* 弹框form表单封装 2020.05.26
*
* conList 数据
*
* cb 回调函数,点击提交处理业务
*
* **/
function formbiaodan(conList,cb) {
// 创建元素
var publicMask = document.createElement('div');
var formCon = document.createElement('div');
var formConTop = document.createElement('div');
var formConBot = document.createElement('div');
var formBox = document.createElement('form');
//设置属性
publicMask.id = "publicMask";
formCon.id = "formCon";
formConTop.className = "formConTop";
formConBot.className = "formConBot";
//设置动态的文本
formConTop.innerHTML='<p class="title">'+conList.biaoti+'</p><a class="close"><i class="fa fa-close"></i></a>';
var FromCon = '<form action='+conList.formAction+' id='+conList.formId+ ' method="post">';
var htmlCon = '';
for (var i=0;i<conList.data.inputList.length;i++){
htmlCon+='<div class="formConBotC"><span>'+conList.data.inputList[i].wenzi+'</span><input name='+conList.data.inputList[i].name+' value="" /></div>';
}
//把创建的DOM添加到body
formConBot.innerHTML=FromCon+htmlCon+'<a class="subFormFB">提交</a>';
formBox.append(formConBot);
formCon.append(formConTop);
formCon.append(formBox);
document.body.append(formCon);
document.body.append(publicMask);
// 事件
// 关闭FORM弹框和蒙版
document.getElementsByClassName("close")[0].addEventListener('click',function(){
//用户点击关闭,清除弹框DOM
document.body.removeChild(document.querySelector('#publicMask'));
document.body.removeChild(document.querySelector('#formCon'));
});
//点击提交方法
document.getElementsByClassName("subFormFB")[0].addEventListener('click',function(){
// 如果回调函数存在且类型是function
if ( typeof cb =='function' ){
if(cb()==true){
//处理完业务逻辑之后如果返回true,,清除弹框DOM
document.body.removeChild(document.querySelector('#publicMask'));
document.body.removeChild(document.querySelector('#formCon'));
}
}
});
}
页面使用方法
//根据设置动态文本来自定义当前页面所需要的数据
var conListshuju = {
"biaoti": "输入信息",
"formAction": "111",
"formId": "111",
"data": {
"inputList": [
{
"type" : "type",
"name" : "name",
"wenzi": "姓名:"
},
{
"type" : "type",
"name" : "name",
"wenzi": "手机号:"
}
]
}
}
//页面触发弹框调用方法
//调用方法,传入自定义的值
formbiaodan (conListshuju,function(){
//cb
//当用户点击提交之后可以写业务逻辑
return true;
});
信息框
//msg 提示信息 t 几秒消失默认3000ms
function pubTishi(msg,t){
if(t==null || t==undefined || t==''){
t=300000000000000000000;
}
var div = document.createElement('div');
div.id="pubTishi"
div.style.cssText="position: fixed;left: 50%;top: 50%;-moz-transform: translate(-50%,-50%);-webkit-transform: translate(-50%,-50%); -o-transform:translate(-50%,-50%); transform: translate(-50%,-50%);background: rgba(0,0,0,0.8);color: #fff;color: rgb(255, 255, 255);padding: 10px 40px;border-radius: 10px;"
msg='<span>msg</span>';
div.innerHTML=msg;
document.body.append(div);
setTimeout(function(){
document.body.removeChild(document.querySelector('#pubTishi'));
}, t )
}
//使用直接调用此方法就行
pubTishi('提交成功')
结语
有什么不足的地方,欢迎大家留言指正,哈哈。
网友评论