原生 js 模拟 alert 弹窗

复制头部的 js 代码到你的 js 文件的任何地方,调用Chef.alert方法传入相应的参数即可并没有什么功能,只是一个提示的作用,可能样式比 alert 的弹窗好看点,css是写在js里的,只要你会写 css 就可以自行修改样式.

Chef.alert 使用说明:

此方法有6个参数:
1,title 弹出框的标题
2,content 弹出框的提示文字也可以以字符串的形式传入任何html标签,
3,firm 弹出框按钮的文字
4,offset 弹出框距离顶部的位置,左右默认水平居中,
5,width 弹出框的宽度
6,shade 遮罩层的透明度

觉得没有用的参数可以不传
******
注意 :Chef.alert 只是一个提示的作用 没有任何操作

以下是代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        var Chef = {
            //body 的宽高
            ‘bodyH‘:document.documentElement.clientHeight || document.body.clientHeight || window.innerHeight,
            ‘bodyW‘:document.documentElement.clientWidth || document.body.clientWidth || window.innerWidth,
            //动态创建 style 标签添加样式
            ‘cssStyle‘:function (){
                            var doc=document;
                            var style=doc.createElement("style");
                            if(style.styleSheet){// IE
                                style.styleSheet.cssText = arguments[0];
                            }else{// w3c
                                var cssText = doc.createTextNode(arguments[0]);
                                style.appendChild(cssText);
                            }
                            var heads = doc.getElementsByTagName("head");
                            if(heads.length){
                                heads[0].appendChild(style);
                            }else{
                                doc.documentElement.appendChild(style);
                            }
                        },
            // 创建并显示遮罩层
            ‘createChef‘:function(){
                            if(document.body.getElementsByClassName(‘Chef_opacity‘).length == 1){
                                document.body.removeChild(document.body.getElementsByClassName(‘Chef_opacity‘)[0]);
                            }
                            var div = this.create(‘div‘);
                                div.style.width = this.bodyW + ‘px‘;
                                div.style.height = this.bodyH + ‘px‘;
                                div.className = ‘Chef_opacity‘;
                                document.body.appendChild(div);
                        },
        //alert 框
            ‘alert‘:function(){
                        // 显示遮罩层
                        this.createChef();
                        // 创建
                        var alertDiv = this.create(‘div‘),
                            alertH2 = this.create(‘h2‘),
                            alertX = this.create(‘span‘),
                            alertP = this.create(‘p‘),
                            alertBDiv = this.create(‘div‘),
                            alertFirm = this.create(‘button‘);
                        alertX.innerHTML = ‘X‘;
                        alertX.className = ‘Chef_X‘;
                        // 插号的click事件 什么都不做
                        alertX.onclick = function(){alertFirm.onclick();}
                        // 确定按钮的click事件 什么都不做
                        alertFirm.onclick = function(){
                            document.getElementsByClassName(‘Chef_opacity‘)[0].style.display = ‘none‘;
                            document.body.removeChild(alertDiv);
                        }

                        //样式以及内容
                        alertDiv.className = ‘Chef_alert‘;
                        if(arguments.length == 1){
                            document.getElementsByClassName(‘Chef_opacity‘)[0].style.background = ‘rgba(0,0,0,‘+arguments[0].shade+‘)‘    ;
                            alertDiv.style.top = arguments[0].offset;
                            if(arguments[0].width == undefined){
                                alertDiv.style.width = ‘260px‘;
                            }else{
                                alertDiv.style.width = arguments[0].width;
                                alertDiv.style.marginLeft = ‘-‘+parseInt(arguments[0].width)/2 + ‘px‘;
                            }
                            arguments[0].title == undefined ? alertH2.innerHTML = ‘来自网页的信息‘ : alertH2.innerHTML = arguments[0].title;
                            arguments[0].content == undefined ? alertP.innerHTML = ‘‘ : alertP.innerHTML = arguments[0].content;
                            arguments[0].firm == undefined ? alertFirm.innerHTML = ‘确定‘ : alertFirm.innerHTML = arguments[0].firm;
                        }else{// -- 默认提示信息
                            alertH2.innerHTML = ‘来自网页的信息‘;
                            alertFirm.innerHTML = ‘确定‘;
                        }
                        // 添加到页面
                        alertBDiv.appendChild(alertFirm);
                        alertH2.appendChild(alertX);
                        alertDiv.appendChild(alertH2);
                        alertDiv.appendChild(alertP);
                        alertDiv.appendChild(alertBDiv);
                        document.body.appendChild(alertDiv);
                    },
                //创建
            ‘create‘:function(){
                        return document.createElement(arguments[0]);
                    }
        };
        ;(function(Chef){
            var cssString = ‘                    *{padding:0;margin:0;}                    .Chef_opacity{display:block;background:rgba(0,0,0,0.4);position:fixed;top:0;z-index:99;}                    .Chef_alert{position:fixed;top:100px;background:white;border-top:3px solid #FF6636;width:260px;padding-bottom:5px;left:50%;margin-left:-130px;z-index:100;font-family:Microsoft YaHei;}                    .Chef_alert>h2{width:90%;margin:10px auto;margin-bottom:0;font-size:18px;}                    .Chef_alert>p{width:90%;margin:0 auto;padding:25px 0;border-bottom:1px solid #d8d8d8;}                    .Chef_alert>div{width:90%;height:60px;margin:0 auto;font-size:0;text-align: center;}                    .Chef_alert>div>button{width:50%;height:100%;border:0;outline:0;font-size:18px;color:#FE651F;background:white;font-family:Microsoft YaHei;cursor:pointer;}                    .Chef_X{float:right;font-size:13px;color:grey;cursor:pointer;font-weight:normal;}                ‘;
            Chef.cssStyle(cssString);
        })(Chef);
    </script>
</head>
<body>
    <button id=‘alertBtn‘>alert弹窗</button>
    <script>
    //获取对象添加事件
        document.getElementById(‘alertBtn‘).onclick = function(){
            //调用 Chef.alert() 方法
            Chef.alert({
                ‘title‘:‘标题标题标题‘,
                ‘content‘:‘内容‘,
                ‘firm‘:‘确定‘,
                ‘offset‘:‘100px‘,
                ‘width‘:‘260px‘,
                ‘shade‘:0.4
            });
        };
    </script>
</body>
</html>

有问题可以留言咨询,看到一定回复。

时间: 2024-12-13 11:05:55

原生 js 模拟 alert 弹窗的相关文章

JS模拟土豆弹窗——链式运动

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS模拟土豆弹窗——链式运动</title> <style> *{padding: 0; margin: 0;} body{ font-size: 12px; font-family: "微软雅黑"; overflow: hidden;} #foot{ width:

原生JS模拟百度搜索框

近期有个新入行的小伙伴一直在问一些基础知识,突然觉得人的记忆力有限,有些平常很少用到的知识点虽简单却也其实很容易模糊,或者是一个单词,或者是一个语法.所以想着应该利用一下工作之余的碎片时间,记录一些工作上的问题和一些有趣的小案例,于是开通了播客,一方面便于自己日后翻阅,一方面给刚学习的小伙伴一个参考. 今天先写一个简单的小案例:原生JS模拟百度搜索框. 需求: 1.当在输入框输入时,每输入一个文字,就会在下方展示相关内容列表 2.每一次输入框输入,清空上一次内容 3.鼠标移入列表内容时,对应的内

原生JS模拟JQuery封装Ajax

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

简单的原生js 模拟jquery方法

仓促的模拟敲一下就上传来保存了. Object.prototype.fadeIn = function(speed) { var that = this; setTimeout(function() { that.style.display = "block" }, speed) return that; } //原生模拟jq中 fadeOut()方法: Object.prototype.fadeOut = function(speed) { var that = this; setT

原生js模拟滚动条

滚动条的基本交互有两个,鼠标拖拽滚动条和滚轮滚动. 滚动条涉及到的dom元素:1.主体区域(obj,box2与box4的父元素),鼠标滚动的触发主体,包含内容和滚动条,宽高自定.2.滚动条(box1),宽自定,高按内容区比例计算.3.滚动区域(box2,box1的父节点),高与内容可视区的高相同,宽自定.4.内容(box3,滚动的内容主体).5.内容(box4,box3的父元素,有限宽高,内容可视区). 实现的基本原理就是以上元素绝对定位,通过鼠标的交互事件,来完成相关dom的top值,已达到模

javascript:用原生js模拟贪吃蛇游戏练习

本次练习所有的代码:可以直接复制全部然后运行看效果~ 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>title</title> 6 <style> 7 .map { 8 width: 800px; 9 height: 600px; 10 background-color:

原生JS模拟百度搜索关键字与跳转

<style type="text/css"> *{ margin: 0; padding: 0; } #text{ width: 300px; height: 30px; } ul { width: 302px; border: 1px solid #ddd; border-top:0; display: none; } ul li { list-style: none; font-size: 12px; font-family: "微软雅黑"; he

原生JS模拟实现call、apply、bind

function call_mock (obj) { var aim_fun = this; var argument = []; for (var i = 1; i < arguments.length; i++) { argument.push(arguments[i]); } obj.aim_fun = aim_fun; var result = eval('obj.aim_fun('+ argument.join() + ')'); delete obj.aim_fun; return

模拟alert,confirm 阻塞状态

/*** * 模拟alert弹窗 * content 为弹框显示的内容 * 确定按钮对应的下面取消关闭显示框 * **/function oAlert(content) { var oWrap = $('.alert_d'); oWrap.show(); oWrap.find('p').html(content); btnOk(); btnNo();};/** * 模拟confirm弹出阻塞事件 * content 弹框显示的内容 * id 回调函数的ID值 * callback 执行回调函数