自定义alert,并添加回调函数

需求:一些自定义的alert只是简单的页面效果,不能做到中断js,有了回调函数后,自定义的弹出窗点击之后,就能执行回调函数了。在一些登录场景很有用,登陆失败后,alert弹出失败信息,之后跳转到指定页面。

弹出窗效果

在这里插入图片描述

js代码

   //重写alert
   window.alert = alert;
   function alert(data, callback) { //回调函数
       var alert_bg = document.createElement('div');
       alert_box = document.createElement('div'),
           alert_text = document.createElement('div'),
           alert_btn = document.createElement('div'),
           textNode = document.createTextNode(data ? data : ''),
           btnText = document.createTextNode('确 定');

       // 控制样式
       css(alert_bg, {
           'position': 'fixed',
           'top': '0',
           'left': '0',
           'right': '0',
           'bottom': '0',
           'background-color': 'rgba(0, 0, 0, 0.1)',
           'z-index': '999999999'
       });

       css(alert_box, {
           'width': '270px',
           'max-width': '90%',
           'font-size': '16px',
           'text-align': 'center',
           'background-color': '#fff',
           'border-radius': '15px',
           'position': 'absolute',
           'top': '50%',
           'left': '50%',
           'transform': 'translate(-50%, -50%)'
       });

       css(alert_text, {
           'padding': '10px 15px',
           'border-bottom': '1px solid #ddd'
       });

       css(alert_btn, {
           'padding': '10px 0',
           'color': '#007aff',
           'font-weight': '600',
           'cursor': 'pointer'
       });

       // 内部结构套入
       alert_text.appendChild(textNode);
       alert_btn.appendChild(btnText);
       alert_box.appendChild(alert_text);
       alert_box.appendChild(alert_btn);
       alert_bg.appendChild(alert_box);

       // 整体显示到页面内
       document.getElementsByTagName('body')[0].appendChild(alert_bg);

       // 确定绑定点击事件删除标签
       alert_btn.onclick = function() {
           alert_bg.parentNode.removeChild(alert_bg);
           if (typeof callback === 'function') {
               callback(); //回调
           }
       }
   }

   function css(targetObj, cssObj) {
       var str = targetObj.getAttribute("style") ? targetObj.getAttribute('style') : '';
       for (var i in cssObj) {
           str += i + ':' + cssObj[i] + ';';
       }
       targetObj.style.cssText = str;
   }
   
   //使用alert
   alert("我是弹出窗,没有回调函数");
   alert("我是弹出窗,点击确定后才跳转页面", function(){
       window.location.href = "https://www.baidu.com";
   });
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木一番

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值