使用简单的 HTML CSS Js 的交互式猴子登录页面。

使用简单的 HTML CSS Js 的交互式猴子登录页面。

所以今天我们将使用简单的 HTML CSS 和 vanilla Js 以一种非常简单的方式构建一个交互式猴子登录页面。

Interactive monkey login page gif

it’s so cute, right..?

所以,是的,我们会成功的。

兴奋……让我们现在开始吧。

所以让我解释一下幕后发生的逻辑。逻辑很简单。我们将使用一张猴子脸的图像,但是等等,正如我们所看到的,眼睛是动画的,所以我们必须使用 div 标签来设置它们。我们稍后再做。

monkey face

我们必须隐藏双手,以便在用户专注于密码输入时显示它们。

Image without overflow hidden

如果我不使用 溢出隐藏 在其父 .img 包装器 然后它看起来像这样。如果使用 溢出隐藏 然后它看起来像这样

Image with overflow hidden

那么让我们跳入 HTML 代码

 <div class="main-wrapper"> <div class="monkey-thought"> <div class="buble-1"></div> <div class="monkey-comment"><p>是电子邮件吗?</p></div> </div> <div class="img-wrapper"> <div class="monkey-face"> <img src="./Images/monkey.png" alt="脸"> <div class="eyes-wrapper"> <div class="eyes"> <div class="eye-brow"></div> <div class="eye-ball"></div> </div> <div class="eyes"> <div class="eye-brow"></div> <div class="eye-ball"></div> </div> </div> </div> <img class="monkey-hand" src="./Images/hand.png" alt="手"> </div> <form action=""> <input type="email" id="email" placeholder="[[email protected]](/cdn-cgi/l/email-protection)"       autocomplete="off" required> <input type="password" placeholder="password" id="password"  onfocus="showMonkeyHand()" required> <button id="submit-btn" type="submit">提交</button> </form> </div>

所以我把所有的内容都包装在了 main-wrapper 里面。

 .main-wrapper{ 宽度:400px;显示:弯曲;对齐项目:居中;对齐内容:空间环绕;弹性方向:列;背景颜色:rgba(255、255、255、0.356);盒子阴影:0px 0px 30px 0px rgba(82, 82, 82, 0.247);填充:2rem;间隙:3rem;边界半径:.4rem;位置:相对 }

类= 猴子的想法

 .monkey-thought{ 不透明度:0;位置:绝对;顶部:-2rem;右:3.4rem;变换:rotateZ(250deg);显示:flex;  
 flex-direction: column;transition: opacity .2s ease-in-out; } .buble-1{ 高度:2rem;宽度:2rem;边界半径:50%;背景色:hsl(167, 92%, 23%);位置:相对;  
 } .monkey-comment{ 位置:相对;宽度:6rem;高度:6rem;边界半径:50%;变换:旋转Z(103度);文本对齐:中心;显示:弯曲;对齐项目:居中;背景色:hsl(167, 92%, 23%);颜色:白色;字体系列:'Rokkitt',衬线;字体大小:1.6rem;  
 }

它将包含我们想要在用户输入他/她的电子邮件时显示的内容。最初,它的不透明度为 0。当用户输入他/她的电子邮件时,我们将使用 js 将其设置为不透明度 1。

类= img 包装器

 .img-wrapper{ 显示:弹性;对齐项目:中心;对齐内容:中心;弹性方向:列;位置:相对;溢出:隐藏;宽度:12rem;边框:1px 实心; }

它充当猴子面部的包装器,并使用 CSS 属性溢出隐藏将他的手隐藏在其中。所以我们会给它一个固定的宽度。

类= 猴脸

.monkey-face{ 过渡:变换 .3s;位置:相对;}

它将包含猴脸和我们将进一步制作的猴眼。所以我们必须添加 CSS 属性 位置:相对 所以我们可以根据猴脸来固定眼睛。插入猴脸,在它的兄弟旁边,我们将添加猴眼,所以让我们这样做。

类= 眼睛

 .eyes-wrapper{ display: flex;align-items: center;宽度:80%;位置:绝对;顶部:3.5rem; justify-content:空间环绕;左:10%;  
 } .eyes{ display: flex;align-items: center; justify-content: 之间的空格;弹性方向:列;间隙:.2rem; } .eye-brow{ 边框半径:50%;边界左上角半径:3rem;边界右上角半径:3rem;高度:0.4rem;位置:相对;变换:translateY(-2px);宽度:100%;背景颜色:hsl(33, 62%, 27%);过渡:变换 .1s 缓入;} .eye-ball{ 宽度:1.5rem;高度:1.5rem;背景色:hsl(33, 62%, 27%);边界半径:50%; }

它是猴眼和猴眉的包装纸。所以它里面有两个 div 一个是 第二个是 眼球

类= 猴手

 .img-wrapper .monkey-hand{ 位置:绝对;变换:translateY(130%);过渡:.7s;  
 }

它将包含猴子手将具有 CSS 属性 变换 translateY(130%) 与猴子的脸保持距离。

然后我们就有了我们的表格。这就是我们创建这个可爱的交互式猴子登录页面所需的全部 HTML。

剩余的 CSS 部分

 .eye-ball{ 动画名称:眼睛;动画持续时间:2s;动画迭代计数:无限;动画方向:线性;变换原点:中心; } 形式{显示:弹性;对齐项目:中心; justify-content:空间环绕;flex-direction:列;间隙:2rem;  
 } 输入{高度:2rem;宽度:17rem;填充:0.5rem;padding-left:1rem;字体大小:1.2rem;边框:无;边框半径:.4rem; font-family: 'Rokkitt', serif;box-shadow: 0px 0px 13px 0px hsla(0, 2%, 58%, 0.438);  
 } 输入:焦点{大纲:无;} button{ font-size: 1.3rem;padding: 0.4rem 2rem;background-color: hsl(167, 92%, 23%);边框:无;边界半径:.4rem;白颜色;光标:指针; } @keyframes 眼睛 { 0%{高度:1.5rem;transform: translateY(0px);} 5%{height: .5rem;transform: translateY(10px);} 10%{height: 1.5rem;transform: translateY(0px) ;} } @媒体屏幕和(最大宽度:450px){ .main-wrapper{width: 300px;} .monkey-face{width: 8rem;} .monkey-face img{width: 100%;} .eyes-wrapper{ width: 63%;top: 2.5rem;左:1.43rem; justify-content: 之间的空格;  
 } .eye-brow{顶部:0rem;} .monkey-hand{宽度:5.2rem;} 输入{宽度:14rem;} .monkey-thought{右:2.3rem;} .buble-1{宽度:.7rem;高度:.7rem;} .monkey-comment{字体大小:1.3rem;宽度:5rem;高度:5rem;}  
 }

所以让我们讨论 关键帧眼睛, 所以我们要让猴子眨眼这个关键帧将有助于实现这一点。你可能会这样想 关键帧眼睛 看起来很奇怪。但这是我们在延迟一段时间后让猴子的眼睛眨眼的唯一方法,否则它会持续眨眼。如果您以常规方式定义关键帧,您可以使用它来查看会发生什么。

现在让我们进入 Js(最后一轮)

 const monkeyFace = document.querySelector('.monkey-face'); const monkeyHand = document.querySelector('.monkey-hand'); const email = document.getElementById('email'); const monkeyThought = document.querySelector('.monkey-thought'); const monkeyEyesBrows = document.querySelectorAll('.eye-brow') const mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\ w{2,3})+$/; 让度数 = 13 让 inputPrevLenght = 常量 showMonkeyHand = ()=>{monkeyHand.style.transform='translateY(35%)'} document.addEventListener('click',(e)=>{if(e.target.type!=='password'){monkeyHand.style.transform='translateY(120%)'} if(e.target.type!=='email'){monkeyFace.style.transform = `perspective(800px) rotateZ(0deg)`; monkeyEyesBrows.forEach((eyeBrow)=>{eyeBrow.style.transform =  
 'translateY(-2px)'}) }  
 }); // 移动猴脸 email.addEventListener('input',(e)=>{ let currentInputLength = String(e.target.value).length;  
 让 decrementInInputValue = inputPrevLenght.includes(currentInputLength); if(!decrementInInputValue && 度>= -10){  
 度数-=1  
 inputPrevLenght.push(currentInputLength)  
 } if(decrementInInputValue && 度<13){  
 度+=1  
 } if(!email.value.match(mailformat)){  
 monkeyThought.style.opacity='1';  
 monkeyEyesBrows.forEach((eyeBrow)=>{  
 eyeBrow.style.transform = 'translateY(3px)'  
 }) }; if(email.value.match(mailformat)){  
 monkeyThought.style.opacity='0';  
 monkeyEyesBrows.forEach((eyeBrow)=>{  
 eyeBrow.style.transform = 'translateY(-3px)'  
 }) }; monkeyFace.style.transform = `perspective(800px) rotateZ(${degree}deg)` });

这是我们唯一需要的 JS。让我们演示一下。

让我们存储要移动的猴子脸,当用户输入密码时显示猴子的手,使用正则表达式检查用户是否输入了有效的电子邮件,当用户输入电子邮件时显示猴子的想法,直到用户输入正确电子邮件和猴子的眉毛来移动它们。

那么猴脸会怎么动呢?让我们来看看…

为了移动猴脸,我们将输入事件设置为电子邮件

 让 inputPrevLenght = []; email.addEventListener('input',(e)=> let currentInputLength = String(e.target.value).length; let decrementInInputValue = inputPrevLenght.includes(currentInputLength); if(!decrementInInputValue && degree>= -10){ degree -=1 inputPrevLenght.push(currentInputLength) } if(decrementInInputValue && degree<13){ degree+=1 } if(!email.value.match(mailformat)){ monkeyThought.style.opacity='1'; monkeyEyesBrows.forEach( (eyeBrow)=>{ eyeBrow.style.transform = 'translateY(3px)' }) } if(email.value.match(mailformat)){ monkeyThought.style.opacity='0' monkeyEyesBrows.forEach((eyeBrow)= >{ eyeBrow.style.transform = 'translateY(-3px)' }) }; monkeyFace.style.transform = `perspective(800px)rotateZ(${degree}deg)` });

我们会得到 电子邮件 输入值,将其转换为字符串,并获取当前输入值的长度。我们想要移动猴脸来观看电子邮件,因此我们将创建变量 degree 并为其分配初始值 10。

现在主要逻辑来了。

当用户键入电子邮件时,我们将 degree 值减少 1,当用户删除电子邮件字母时,我们必须将 degree 值增加 1。

要从左到右旋转,我们必须减小度数的值,从右到左我们必须增加度数的值。

我们如何知道用户正在输入电子邮件或删除电子邮件?

别担心,这很简单。

所以我们将创建 输入上一个长度 空数组并推送更新的电子邮件字符串长度,我们将使用包含函数( 返回真或假 ) 查看当前长度是否为( 例如用户输入 ** 约翰** 那么我们的 _输入上一个长度_ 数组应该看起来像 [1,2,3,4] 因为用户输入了四个字母所以长度应该是 4 如果用户删除最后一个字母然后 'n' 然后更新的长度应该是 3 并且我们的数组已经有长度 3 ) 如果没有长度,我们将增加一个 1 输入上一个长度 array 它表示用户输入电子邮件,因此我们会将更新后的长度推入其中并减少度数的值。

让我们移到眉毛

所以在这里我们将检查用户电子邮件格式是否与正则表达式不匹配,然后我们将眉毛值从 -3px 转换为 0px。我们还将使猴子思维 div 的不透明度为 1。如果用户电子邮件格式确实与正则表达式匹配,那么我们将把眉毛值从 -3px 转换为 0px 和猴子思想 div 的不透明度 0。

 if(!email.value.match(mailformat)){ monkeyThought.style.opacity='1'; monkeyEyesBrows.forEach((eyeBrow)=>{ eyeBrow.style.transform = 'translateY(3px)' }) }; if(email.value.match(mailformat)){ monkeyThought.style.opacity='0'; monkeyEyesBrows.forEach((eyeBrow)=>{ eyeBrow.style.transform = 'translateY(-3px)' }) };

现在最后但重要的事情是,我们必须确保当用户单击文档时,我们已重置所有内容。

 document.addEventListener('click',(e)=>{ if(e.target.type!=='password'{ monkeyHand.style.transform='translateY(120%) } if(e.target.type!= ='email'){ monkeyFace.style.transform = `perspective(800px) rotateZ(0deg)`; monkeyEyesBrows.forEach((eyeBrow)=>{ eyeBrow.style.transform = 'translateY(-2px)' }) } } );

你在吗?太好了,你做到了!

所以,在下一篇文章中再见。

想提出任何建议:-

找到我 领英 推特

看一下 我的投资组合

给我发电子邮件 [email protected]

快乐编码!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/36940/59311609

posted @ 2022-09-16 10:00  哈哈哈来了啊啊啊  阅读(122)  评论(0编辑  收藏  举报