在前端UI交互过程中,经常会碰到需要弹出对话框的情况。通过html+css+js来自定义对话框是一个不错的方法。
1. 在HTML中,定义一个DIV.
1.1 将Style设置为 display:none. 该对话框默认为不显示。
1.2 制作两个Div按钮。 btnairconfirm, btncancel. 为自定义确定,取消按钮。
1.3 给确定按钮绑定onclick事件。利用js函数实现事件。本例中为RedirectBusinessTravel。通过该函数可以将事件提交至MVC后台(C#代码的controller)。
<div class="popupHe2" style="display:none;">
<div class="cpopup"> <div class="title">温馨提示</div> <p>这是一个例子。您可以在这里写一些提示语。</p> <div class="btnairconfirm" οnclick="RedirectBusinessTravel('@Url.Action("FlightHomePage", "Home")')">确定</div> <div class="btncancel">取消</div> </div>
</div>
2. 在CSS中,定义样式。
2.1 popupHe2可定义为固定位置的样式。z-index:300保证其能够显示在上层。position设置为fixed实现遮罩的功能。
2.2 cpopup在popupHe2中利用百分比模式进行布局。z-index:200表示其在popupHe2的下层。
2.3 cpopup里面的标签title, p, btnairconfirm, btncancel相应进行布局。
.popupHe2 { position: fixed; left: 0; right: 0; top: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.72); z-index: 300; }
.cpopup { position: absolute; top: 50%; left: 10%; right: 10%; margin-top: -1.62rem; text-align: center; background-color: #fff; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; border-radius: 5px; padding: 0.2rem 0; z-index: 200; }
.cpopup .title { font-size: 0.32rem; line-height: 1; color: #333; }
.cpopup p { padding: 0.2rem 5% 0; font-size: 0.24rem; color: #666; line-height: 1.5; text-align: left; }
.cpopup .btnairconfirm { margin: 0.3rem auto auto; font-size: 0.28rem; line-height: 2.5; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; border-radius: 5px; border: 1px solid #0369a6; width: 1.5rem; background-color: #0369a6; color: #fff; } .cpopup .btncancel { margin: 0.3rem auto auto; font-size: 0.28rem; line-height: 2.5; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; border-radius: 5px; border: 1px solid #ccc; width: 1.5rem; background-color: #ccc; color: #fff; }
3. 利用JS + Ajax进行提交。
3.1 参数中的_url为对应的后台controller位置。首先利用AJAX将请求post到后台。
3.2 若成功,后台返回重定向URL, 则可以通过window.open打开新页面。至此,用户通过点击确认按钮,就实现了跳转打开新页面的需求。
<script> function RedirectBusinessTravel(_url) { $.ajax({ type: "POST", url: _url, async: false, dataType: 'json', contentType: 'application/x-www-form-urlencoded; charset=UTF-8', data: { }, success: function (msg) { if (msg.isSuccess == "1") { window.open(msg.url); } else alert(msg.errInfo); }, error: function (msg) { alert("系统繁忙,请稍后再试"); return false; } }); } </script>
4. 窗口的显示与隐藏
假设页面HTML中有一个机票按钮,class为airbook.
4.1 为airbook添加click事件。 当触发click时,将popupHe2的display属性改变,使其显示。
4.2 为btnairconfirm和btncancel添加事件。当触发click时,将popupHe2的display属性改变,使其隐藏。
<div class="enterlist Ltac pure-u-1-3"> <a class="airbook"> <div class="bookicon"><i class="icon-travel-air"></i></div> <div>机票</div> </a> </div>
<script> $('.airbook').click(function () { $('.popupHe2').css({ display: 'block' }); }) </script>
$('.btnairconfirm').click(function () { $('.popupHe2').css({ display: 'none' }); });
$('.btncancel').click(function () { $('.popupHe2').css({ display: 'none' }); });