JS简易弹出层手机版
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS简易弹出层手机版相关的知识,希望对你有一定的参考价值。
简单说明
手机弹出层模枋了WEIUI.弹出层原理还是依照bootstrap
去掉了PC端的ESC关闭.点击背景层时也不默认关闭.
模板样子
CSS样式
/*弹出时给body加上这个,关闭时去掉*/ .overhide { overflow: hidden; } /*关键样式 遮罩层的*/ .msgboxshadow { position: fixed; /*固定定位*/ left: 0; top: 0; right: 0; bottom: 0; opacity: .5; /*背景透明度.这里没有兼容样式*/ background-color: #000; /*背景色*/ z-index: 10000; /*层级数仅小于内容弹出框*/ } /*关键样式 弹出框最外层*/ .msgboxbg { display: none; position: fixed; /*固定定位*/ left: 0; top: 0; right: 0; bottom: 0; overflow-x: hidden; overflow-y: auto; z-index: 10001; /*比遮罩层大1,要显示在遮罩层上面*/ } /*内容层默认样式:效果是水平垂直固定定位居中*/ .msgboxcontent { position: fixed; border-radius: 3px; background-color: #fff; box-shadow: 2px 2px 40px #000000; top: 50%; left: 50%; width: 75%; max-width:320px; /*这三句话固定定位水平居中*/ -ms-transform: translate(-50%,-50%); -webkit-transform: translate(-50%,-50%); -moz-transform: translate(-50%,-50%); transform: translate(-50%,-50%); /**/ overflow-x: hidden; overflow-y: auto; } /*模板样式*/ /**共用S*/ /*****标题区*/ .titlearea { box-sizing: border-box; font-size: 18px; color: #444; } /*****内容区*/ .contentarea { box-sizing: border-box; padding: 10px 15px 15px 15px; text-indent: 5px; font-size: 16px; color: #666; } /*****按钮区*/ .btnarea { box-sizing: border-box; font-size: 0; } /*****按钮*/ .btnleft, .btnright { box-sizing: border-box; display: inline-block; -moz-user-select: none; -ms-user-select: none; -webkit-user-select: none; user-select: none; /**/ height: 42px; line-height: 42px; font-size: 18px; color: #333; } .btnleft:active, .btnright:active { background-color: #eee; color: #000; } /*共用E*/ /*ios模板S*/ .ios.titlearea { text-align: center; padding: 25px 0 5px 0; } .ios.contentarea { line-height: 1.3; } .ios.btnarea { border-top: 1px solid #ddd; } .ios.btnleft, .ios.btnright { width: 50%; text-align: center; } .ios.btnleft { border-right: 1px solid #ddd; } .ios.btnleft:active, .ios.btnright:active { } /*IOS模板E*/ /*安卓模板S*/ .adr.titlearea { padding: 25px 0 5px 15px; } .adr.contentarea { line-height: 1.3; } .adr.btnarea{ text-align:right; padding-right:30px; } .adr.btnleft, .adr.btnright { text-align: center; padding:0 5px; } .adr.btnleft { margin: 0 10px; } .adr.btnright { margin:0 5px; } /*安卓模板E*/ /*模板3 S*/ .tmp3.contentarea { text-align:center; font-size:18px; } .tmp3.btnarea{ border-top:1px solid #eee; text-align:center; } .tmp3.btnleft { width:100%; text-align: center; } /*模板3 E*/ /*模板4 S*/ .tmp4.option{ padding:5px 0; height:32px; line-height:32px; border-bottom:1px solid #ddd; } .tmp4.option:last-child{ border:none; } .tmp4.option:active{ background-color:#ddd; } .tmp4.btnarea { border-top: 1px solid #eee; text-align: center; } .tmp4.btnleft { width: 100%; text-align: center; } /*模板4 E*/ /*模板5 S*/ .tmp5.titlearea { text-align: center; padding: 20px 0 10px 0; } .tmp5.contentarea { height:160px; overflow-y:auto; } .tmp5.option { padding: 5px 0; height: 32px; line-height: 32px; border-bottom: 1px solid #ddd; text-align: center; } .tmp5.option:last-child { border: none; } .tmp5.option:active { background-color: #ddd; } .tmp5.btnarea { border-top: 1px solid #eee; text-align: center; } .tmp5.btnleft { width: 100%; text-align: center; } /*模板5 E*/ /*模板6S*/ .tmp6.titlearea { padding: 15px 0 5px 20px; } .tmp6.contentarea { } .tmp6input { display: block; width: 100%; height: 28px; line-height: 28px; border: 1px solid #ccc; border-radius: 2px; color: #333; font-size: 14px; text-indent: 5px; } .tmp6input:focus { box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(102, 175, 233, 0.6); border-color: #66afe9; outline: 0 none; } .tmp6.btnarea { text-align: right; padding-right: 30px; } .tmp6.btnleft, .tmp6.btnright { text-align: center; padding: 0 5px; } .tmp6.btnleft { margin: 0 10px; } .tmp6.btnright { margin: 0 5px; } /*模板6E*/
模板
<script type="text/html" id="tmp_ios"> <div class="msgboxbg" id="$id"> <div class="msgboxcontent"> <div class="ios titlearea"><strong>模仿IOS弹出框</strong></div> <div class="ios contentarea">自定义内容区,内容描述应简洁明了直达要领!</div> <div class="ios btnarea"> <span class="ios btnleft" role="btncancel">取消</span> <span class="ios btnright" role="btnok">确定</span> </div> </div> </div> </script> <script type="text/html" id="tmp_android"> <div class="msgboxbg" id="$id"> <div class="msgboxcontent"> <div class="adr titlearea"><strong>模仿安卓弹出框</strong></div> <div class="adr contentarea">自定义内容区,内容描述应简洁明了直达要领!</div> <div class="adr btnarea"> <span class="adr btnleft" role="btncancel">取消</span> <span class="adr btnright" role="btnok">确定</span> </div> </div> </div> </script> <script type="text/html" id="tmp_3"> <div class="msgboxbg" id="$id"> <div class="msgboxcontent"> <div class="tmp3 contentarea">模板3,无标题,内容只一行!</div> <div class="tmp3 btnarea"> <span class="tmp3 btnleft" role="btncancel">取消</span> </div> </div> </div> </script> <script type="text/html" id="tmp_4"> <div class="msgboxbg" id="$id"> <div class="msgboxcontent"> <div class="tmp4 contentarea"> <div class="tmp4 option">模板4,选择项目1</div> <div class="tmp4 option">模板4,选择项目2</div> <div class="tmp4 option">模板4,选择项目3</div> <div class="tmp4 option">模板4,选择项目4</div> </div> <div class="tmp4 btnarea"> <span class="tmp4 btnleft" role="btncancel">取消</span> </div> </div> </div> </script> <script type="text/html" id="tmp_5"> <div class="msgboxbg" id="$id"> <div class="msgboxcontent"> <div class="tmp5 titlearea"><strong>选择月份</strong></div> <div class="tmp5 contentarea"> </div> <div class="tmp5 btnarea"> <span class="tmp5 btnleft" role="btncancel">取消</span> </div> </div> </div> </script> <script type="text/html" id="tmp_6"> <div class="msgboxbg" id="$id"> <div class="msgboxcontent"> <div class="tmp6 titlearea"><strong>输入手机号</strong></div> <div class="tmp6 contentarea"> <input class="tmp6input" type="tel" maxlength="11"/> </div> <div class="tmp6 btnarea"> <span class="tmp6 btnleft" role="btncancel">取消</span> <span class="tmp6 btnright" role="btnok">确定</span> </div> </div> </div> </script>
JS方法
// *模板脚本*/// // // IOS模板S function showios() { var cfg = { okEvent: function () { msgBox.close(); }, cancelEvent: function () { msgBox.close(); } }; msgBox.show(‘tmp_ios‘,cfg); } // // 安卓模板 function showandroid() { var cfg = { okEvent: function () { msgBox.close(); }, cancelEvent: function () { msgBox.close(); } }; msgBox.show(‘tmp_android‘, cfg); } // // 模板3 function showtmp3(msg) { var cfg = { cancelEvent: function () { msgBox.close(); }, beforeEvent: function (sbjq) { if(msg) sbjq.find(‘.contentarea‘).eq(0).html(msg); } }; msgBox.show(‘tmp_3‘, cfg); } function showtmp4() { var cfg = { Bgclose:true, cancelEvent: function () { msgBox.close(); }, beforeEvent: function () { $(‘.tmp4.option‘).on(‘click‘, function () { alert($(this).html()); }) } }; msgBox.show(‘tmp_4‘, cfg);} function showtmp5() { var cfg = { Bgclose: true, cancelEvent: function () { msgBox.close(); }, beforeEvent: function (sbjq) { var months = [‘一‘, ‘二‘, ‘三‘, ‘四‘, ‘五‘, ‘六‘, ‘七‘, ‘八‘, ‘九‘, ‘十‘, ‘十一‘, ‘十二‘]; var options = ‘‘; for (var i = 0; i < months.length; i++) { options += ‘<div class="tmp5 option">‘ + months[i] + ‘月</div>‘; } sbjq.find(‘.contentarea‘).eq(0).html(options); // $(‘.tmp5.option‘).on(‘click‘, function() { alert($(this).html()); }) } }; msgBox.show(‘tmp_5‘, cfg); } function showtmp6() { var cfg = { okEvent: function(sbjq) { var input = sbjq.find(‘.tmp6input‘).eq(0).val(); alert(input); msgBox.close(); }, cancelEvent: function() { msgBox.close(); }, }; msgBox.show(‘tmp_6‘, cfg);} // IOS模板E
弹出层类
/*--msgbox函数对象,相当于弄了一个类,方法都在这个函数(类)上,是静态的--*/ function msgBox() { } /*****************************************/ /******************* PROPERTY ******/ /****************************************/ // public 点击背景关闭?(bool) msgBox.Bgclose = false; // public 弹出和关闭动画时间(豪秒) msgBox.AniTime = 200; // 弹出层显示之前执行 msgBox.beforeEvent = null; // public 弹出层关闭之后事执行 msgBox.closedEvent = null; // public 确定按钮 [role = btnok] msgBox.okEvent = null; // public 取消(关闭)按钮 [role = btncancel] msgBox.cancelEvent = null; // 当前弹出层元素的ID(string) msgBox.CurrentDomId = null; /******************************************/ /******************* FUNCTION *******/ /*****************************************/ // 显示弹出层(主要方法) tmp_id=弹出层DOM模板所在的脚本标记ID , cfg=配置JSON msgBox.show = function (tmp_id, cfg) { // 取出模板HTML,加上ID属性,然后添加到body中,但不显示 msgBox.CurrentDomId = tmp_id + ‘_DOM‘; var dom = $(‘#‘ + tmp_id).html(); dom = dom.replace(‘$id‘, msgBox.CurrentDomId); $(‘#‘ + msgBox.CurrentDomId).remove(); $(‘body‘).append(dom); // var showboxJQ = $(‘#‘ + msgBox.CurrentDomId); // 将配置设置到属性 msgBox.config(cfg); // window的宽度与高度 //var windowWidth = window.innerWidth; //var windowHeight = window.innerHeight; // 文档宽度与高度 //var scrollTop = $(document).scrollTop(); //var scrollLeft = $(document).scrollLeft(); // 添加遮罩 先将body的滚动条设无,这样遮罩范围就限于当前窗口大小.遮罩和弹出层还须是固定定位 $(‘body‘).addClass(‘overhide‘); $(‘body .msgboxshadow‘).remove(); $(‘body‘).append(‘<div class="msgboxshadow"></div>‘); // 要获得焦点,需要设定这个属性tabindex showboxJQ.attr(‘tabindex‘, -1); // 显示之前事件 if (typeof msgBox.beforeEvent === ‘function‘) msgBox.beforeEvent(showboxJQ); // 显示内容层 showboxJQ.fadeIn(msgBox.AniTime).focus(); } // 用于配置属性的方法,参数是JSON对象 传入 def 则恢复到默认配置 msgBox.config = function (cfg) { if (cfg) { // 属性设定 for (var n in cfg) { if (msgBox[n] !== undefined) msgBox[n] = cfg[n]; } } // 事件绑定 msgBox.bindEvent(); } // 将属性重置,事件清空.但不清除当前弹出层JQ对象 不应在外部调用此法 关闭时会调用此方法 msgBox.reset = function () { msgBox.Bgclose = false; // 点击背景关闭 msgBox.beforeEvent = null; msgBox.closedEvent = null; // 窗口关闭后执行 msgBox.okEvent = null; // 确定按钮 [role = btnok] msgBox.cancelEvent = null;// 取消(关闭)按钮 [role = btncancel] msgBox.AniTime = 200;// 动画时间 msgBox.CurrentDomId = null; } // 该方法用于绑定事件:有默认事件如: 按ESC关闭,点击背景关闭.也有指定的事件,如确定 取消 // 不应在外部调用此方法,所有属性和事件应在CFG方法中传入,CFG会调用此方法 msgBox.bindEvent = function () { var showboxJQ = $(‘#‘ + msgBox.CurrentDomId); // 默认事件绑定 点击背景关闭 if (msgBox.Bgclose === true) showboxJQ.on(‘click‘, function (event) { if (event.target.id === msgBox.CurrentDomId) { msgBox.close(); } }); // 事件 但role约定为btnok(确定) btncancel(取消) if (typeof msgBox.okEvent === ‘function‘) showboxJQ.find("[role = btnok]").one("click", function () { msgBox.okEvent(showboxJQ); }) if (typeof msgBox.cancelEvent === ‘function‘) showboxJQ.find("[role = btncancel]").one("click", function () { msgBox.cancelEvent(showboxJQ); }) } // public 关闭对话框(确认和取消事件中如果要关闭对话框应调用此方法) msgBox.close = function () { var showboxJQ = $(‘#‘ + msgBox.CurrentDomId); // 清除弹出层 showboxJQ.fadeOut(msgBox.AniTime, function () { showboxJQ.remove(); // 还原文档的滚动条,清除遮罩层 $(‘body‘).removeClass(‘overhide‘); $(‘body .msgboxshadow‘).remove(); }); // 执行关闭后事件 if (typeof msgBox.closedEvent === ‘function‘) msgBox.closedEvent(); // 重置属性 msgBox.reset(); }
以上是关于JS简易弹出层手机版的主要内容,如果未能解决你的问题,请参考以下文章