<style> #message_div{ width: 100vw; height: 90vh; display: block; position: fixed; z-index: 10000; background-color: transparent; transition: background-color 1s; pointer-events: none; top: 10vh; } .message{ margin: auto; margin-bottom: 0px; margin-right: 0px; width: auto; height: auto; min-width: 100px; position:relative; max-width: 200px; background-color: rgba(255, 255, 255, 0.9); border: 0.2vw rgba(0, 0, 0, 0.2) solid; border-radius: 0.5vw; margin-block: 1vw; text-align: center; pointer-events: all; margin-right: 1vw; font-size: calc(var(--main-font-size)/1.2); padding: 0.5vw; transform: translateX(120%); transition: 300ms; } .yes-ans, .no-ans{ background-color: transparent; border: 0px; cursor: pointer; } </style> <div id="message_div"></div> <script> let msg_int = 0; function msg(text,params = {type:null,time:null,res:null,def:null}){ params.time = (params.time == null)? 8:params.time; params.type = (params.type == null)? "msg":params.type; msg_int++; params.time = params.time * 700; let msg_div = document.createElement("div"); let msg_root = document.getElementById("message_div"); msg_div.classList.add("message"); msg_div.innerText = text; msg_div.id = `msg_${msg_int}`; msg_root.appendChild(msg_div) // console.log(`msg_${msg_int}`); setTimeout(()=>{ msg_div.style.transform = "translateX(0%)"; },100) switch (params.type) { case "help": msg_div.style.borderColor = "rgba(255, 255, 0, 0.5)"; break; case "ask": msg_div.style.borderColor = "rgba(0, 255, 0, 0.5)"; break; case "enter": msg_div.style.borderColor = "rgba(0, 255, 0, 0.5)"; break; case "warning": msg_div.style.borderColor = "rgba(255, 0, 0, 0.5)"; break; case "wait": msg_div.style.borderColor = "rgba(0, 0, 255, 0.5)"; break; default: break; } // console.log(params.type,params.time); if (params.type == "ask"){ // msg_div.setAttribute("onclick",`msg_del("msg_${msg_int}")`); let yes = document.createElement("button"); let no = document.createElement("button"); let q_div = document.createElement("div"); q_div.style = "display:flex;justify-content: space-between;z-index:20000"; yes.innerText = "Да"; no.innerText = "Нет"; yes.classList.add("yes-ans") no.classList.add("no-ans") yes.id = `${msg_div.id}-yes`; no.id = `${msg_div.id}-no`; q_div.append(yes) q_div.append(no) msg_div.append(q_div) // document.getElementById("message_div").style.pointerEvents = "all"; document.getElementById("message_div").setAttribute("onclick",`document.getElementById('${msg_div.id}').setAttribute("ans","false")`) msg_div.setAttribute("ans","null") yes.setAttribute("onclick",`document.getElementById('${msg_div.id}').setAttribute("ans","true")`) no.setAttribute("onclick",`document.getElementById('${msg_div.id}').setAttribute("ans","false")`) var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type = "attributes" && mutation.target.getAttribute("ans") != "null") { console.log(mutation); if(mutation.target.getAttribute("ans") == "true"){ params.res(true);fin(); } else if (mutation.target.getAttribute("ans") == "false"){ params.res(false);fin(); } } }); }); observer.observe(msg_div, {attributes: true }); function fin(){ observer.disconnect(); // document.getElementById("message_div").style.pointerEvents = "none"; if (document.getElementById(msg_div.id) != null){ msg_div.style.transform = "translateX(120%)"; setTimeout(() => { msg_root.removeChild(msg_div); }, 200); } } } else if(params.type == "enter"){ let yes = document.createElement("button"); let no = document.createElement("button"); let text = document.createElement("input"); let q_div = document.createElement("div"); text.value = (typeof params.def != "undefined")? params.def:""; text.style.width = "90%"; text.style.marginBlock = "0.5vw"; text.style.border = "1px gray solid"; text.style.borderRadius = "0.5vw"; q_div.style = "display:flex;justify-content: space-between;z-index:20000"; yes.innerText = "Ок"; no.innerText = "Отменить"; yes.classList.add("yes-ans") no.classList.add("no-ans") yes.id = `${msg_div.id}-yes`; no.id = `${msg_div.id}-no`; q_div.append(yes) q_div.append(no) msg_div.append(text) msg_div.append(q_div) msg_div.setAttribute("ans","null") yes.setAttribute("onclick",`document.getElementById('${msg_div.id}').setAttribute("ans","true")`) no.setAttribute("onclick",`document.getElementById('${msg_div.id}').setAttribute("ans","false")`) // document.getElementById("message_div").style.pointerEvents = "all"; // document.getElementById("message_div").setAttribute("onclick",`document.getElementById('${msg_div.id}').setAttribute("ans","false")`) var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type = "attributes" && mutation.target.getAttribute("ans") != "null") { console.log(mutation); if(mutation.target.getAttribute("ans") == "true"){ params.res(text.value);fin(); } else if (mutation.target.getAttribute("ans") == "false"){ params.res(false);fin(); } } }); }); observer.observe(msg_div, {attributes: true }); function fin(){ observer.disconnect(); // document.getElementById("message_div").style.pointerEvents = "none"; if (document.getElementById(msg_div.id) != null){ msg_div.style.transform = "translateX(120%)"; setTimeout(() => { msg_root.removeChild(msg_div); }, 200); } } } else if(params.type != "wait" && params.type != "ask"){ msg_div.setAttribute("onclick",`msg_del("msg_${msg_int}")`); setTimeout(()=>{ if (document.getElementById(msg_div.id) != null){ msg_div.style.transform = "translateX(120%)"; setTimeout(() => { msg_root.removeChild(msg_div); console.log(params.type); }, 200); } },params.time) } return msg_div; } function msg_del(id){ let msg_div = document.getElementById(`${id}`); let msg_root = document.getElementById("message_div"); msg_div.style.transform = "translateX(120%)"; setTimeout(() => { msg_root.removeChild(msg_div); }, 200); } </script>