CSS动画01--登录
- 介绍
- 代码
- HTML
- CSS
- JS
介绍
当鼠标不同方向的划过时展示不同效果的登录,以上是一个简单的图片展示
代码
HTML
<!DOCTYPE html>
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>用户登录</title><link rel="stylesheet" href="./css/1.css"><script src="./js/jquery-3.6.0.min.js"></script>
</head>
<body><div class="container"><h1>登录动画</h1><form action=""><input type="text" class="tbx" placeholder="账号"><input type="password" class="tbx" placeholder="密码"><input type="submit" class="sub" value="登录"></form></div><script>// 定义一个con绑定.containerconst con=document.querySelector('.container');// 定义两个函数开关(门)let isIn=true; // 鼠标进去的门,默认打开let isOut=false; // 鼠标出去的门,默认关闭var span; // 给未出生的元素取个名字span// 添加监听// 监听鼠标进去的事件con.addEventListener('mouseenter',(e)=>{// 如果进去的门是打开的,就可以执行这个函数if(isIn){// 获取进入的鼠标位置// 生成元素的位置=进入点距离窗口的距离-父盒子距离窗口的距离let inX=e.clientX-e.target.offsetLeft;let inY=e.clientY-e.target.offsetTop;// 创建一个span元素,并且给它对应的出生坐标let el=document.createElement('span');el.style.left=inX+'px';el.style.top=inY+'px';// 添加到con对应的父元素,即containercon.appendChild(el);$('.container span').removeClass('out'); // 移除出去的动画$('.container span').addClass('in'); // 添加进入的动画span=document.querySelector('.container span');isIn=false; // 关闭进来的门(不能使用进入的方法)isOut=true; // 打开出去的门(可以使用出去的方法)}})// 监听鼠标出去的事件con.addEventListener('mouseleave',(e)=>{if(isOut){// 获取出去的鼠标位置// 生成元素的位置=出去点距离窗口的距离-父盒子距离窗口的距离let outX=e.clientX-e.target.offsetLeft;let outY=e.clientY-e.target.offsetTop;$('.container span').removeClass('in'); // 移除进入的动画$('.container span').addClass('out'); // 添加出去的动画// 添加出去的坐标$('.out').css('left',outX+'px');$('.out').css('top',outY+'px');isOut=false; // 关闭出去的门// 当动画结束后再删除元素setTimeout(() => {con.removeChild(span); // 删除元素isIn=true; // 打开进入的门}, 500);}})</script>
</body>
</html>
CSS
*{margin:0;padding:0;
}
body{/* 设置body高度为100%窗口高度 */height:100vh;/* 弹性盒子模型 */display: flex;/* 限免两个属性是让body里的子类居中 */justify-content: center;align-items: center;background-color: #1d1928;
}
.container{display: flex;justify-content: center;align-items: center;flex-direction: column;width: 350px;height: 450px;border-radius: 20px;background-color: #4471a3;/* 盒子阴影 */box-shadow: 15px 15px 10px rgba(33,45,58,0.3);overflow: hidden;position:relative;
}
.container form{width: 350px;height: 200px;display: flex;justify-content: space-around;flex-direction: column;align-items: center;z-index: 1;
}
.container form .tbx{width: 250px;height: 40px;outline: none;border: none;border-bottom: 1px solid #fff;background: none;color:#fff;font-size: 15px;
}
/* 设置文本框提示文本的样式 */
.container form .tbx::placeholder{color: #fff;font-size: 15px;
}
.container form .sub{width: 250px;height: 40px;outline: none;border:1px solid #fff;border-radius: 20px;letter-spacing: 5px;color:#fff;background: none;cursor: pointer;margin-top: 20px;
}
.container h1{color: #ecf0f1;font-size: 50px;letter-spacing: 5px;font-weight: 100;/* 文字阴影 */text-shadow: 5px 5px 5px rgba(33,45,58,0.3);z-index: 1;
}
/* 设置鼠标进入的样式 */
.container .in{position: absolute;top:0;left:0;display: block;width: 0;height: 0;border-radius: 50%;background: #cf455f;transform: translate(-50%,-50%);/* 使用in动画,持续0.5秒,缓出的时间函数,停留在最后一帧 */animation: in 0.5s ease-out forwards;
}
/* 设置鼠标离开的样式 */
.container .out{position: absolute;top:0;left:0;display: block;width: 1200px;height: 1200px;border-radius: 50%;background: #cf455f;transform: translate(-50%,-50%);/* 使用out动画,持续0.5秒,缓出的时间函数,停留在最后一帧 */animation: out 0.5s ease-out forwards;
}
/* 动画 */
/* 设置鼠标进入时,元素的动画 */
@keyframes in{/* 初始关键帧 */0%{width: 0;height: 0;}/* 结束关键帧 */100%{width: 1200px;height: 1200px;}
}
/* 设置鼠标离开时,元素的动画 */
@keyframes out{/* 初始关键帧 */0%{width: 1200px;height: 1200px;}/* 结束关键帧 */100%{width: 0;height: 0;}
}
JS
jquery官网链接地址: 进入官网
按照图片上的红色字体进行操作即可