标签:scale 鼠标 classList 0.3 mask height 弹窗 dialog 弹起
弹窗从鼠标点击位置弹起
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body {
margin: 0;
background-color: rgba(79, 185, 255, 0.7);
}
.mask {
width: 100vw;
height: 100vh;
position: fixed;
transition: opacity 0.3s, transform 0.3s, visibility 0.3s;
background-color: rgba(92, 92, 92, 0.7);
}
.dialog {
transition: transform 0.3s, width 0.3s, height 0.3s;
background-color: rgb(255, 255, 255);
}
.fill-screen {
width: 100vw;
height: 100vh;
overflow: auto;
}
.half-screen {
width: 50vw;
height: 80vh;
overflow: auto;
}
.grid-center {
display: grid;
place-items: center;
}
.scale-out {
transform: scale(0);
}
.scale-in {
transform: scale(1);
}
.hidden {
visibility: hidden;
opacity: 0;
}
.visible {
visibility: visible;
opacity: 1;
}
</style>
</head>
<body class="fill-screen">
<div class="mask grid-center hidden">
<div class="dialog fill-screen scale-out"></div>
</div>
<script>
const mask = document.querySelector('.mask');
const dialog = document.querySelector('.dialog');
function enter(e) {
dialog.style.transformOrigin = `${e.x}px ${e.y}px`;
mask.classList.add('visible');
dialog.classList.add('scale-in');
dialog.classList.add('half-screen');
}
function leave() {
mask.classList.remove('visible');
dialog.classList.remove('scale-in');
dialog.classList.remove('half-screen');
}
document.addEventListener('click', enter);
document.addEventListener('keydown', e => e.key === 'Escape' && leave());
mask.addEventListener('click', e => {
e.stopPropagation();
e.target === mask && leave();
});
</script>
</body>
</html>
标签:scale,鼠标,classList,0.3,mask,height,弹窗,dialog,弹起 来源: https://www.cnblogs.com/mengyuantongxue/p/16256079.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。