小米官网登录注册的滑动效果
登录组成页面
<div class="client"><div class="userbox"><div class="title"><a href="javascript:;" class="active" id="DL">登录</a><a href="javascript:;" id="ZC">注册</a></div><div class="rebox" style="display: flex;"><div class="register r1"><form id="loginForm" action="#"><input type="text" name="username" id="username" placeholder="邮箱/手机号码/小米ID" required><span class="error" id="er">请输入账号</span><div id="pswbox"><input type="password" name="psw" id="psw" placeholder="密码" required><i class="glyphicon glyphicon-eye-close icon3"></i><span class="error" id="err">请输入登录密码</span></div><p><input type="checkbox" name="" id="checkbox"><span>已阅读并同意小米账号<a href="#"> 用户协议 </a> 和 <a href="#">隐私政策</a></span></p><input type="submit" id="submit" value="登录"></form><div class="zh"><a href="#">忘记密码?</a><a href="#">手机号登录</a></div><p class="other">其他方式登录</p><ul style="list-style-type: none; /* 移除列表项的默认样式(小圆点)*/"><li><a href=""><img src="./image/images/zfb.png" alt=""></a></li><li><a href=""><img src="./image/images/vx.png" alt=""></a></li><li><a href=""><img src="./image/images/QQ.png" alt=""></a></li><li><a href=""><img src="./image/images/wb.png" alt=""></a></li></ul></div><div class="register" style="margin-left: 80px;"><form action="#"><div class="gj"><input type="text" id="selectedCountry" placeholder="国家/地区"><i class="icon4"></i><div class="gj_name"><div class="fdj"><input type="search" placeholder="搜索国家/地区名称" id="gj_search"><i class="glyphicon glyphicon-search icon5"></i></div><ul class="country " style="list-style-type: none; /* 移除列表项的默认样式(小圆点)*/"><li>佛得角</li><li>开曼群岛</li><li>中非</li><li>乍得</li><li>智利</li><li>中国</li><li>圣诞岛</li><li>哥伦比亚</li></ul></div></div><input type="text" placeholder="国家码" id="gjm"><span class="error" id="erro">请输入手机号码</span><div class="yzm"><input type="text" placeholder="短信验证码" id="yzm"><a href="#" class="info">获取验证码</a><span class="error" id="eryzm">请输入短信验证码</span></div><p><input type="checkbox" name="" id="checkbox"><span>已阅读并同意小米账号<a href="#"> 用户协议 </a> 和 <a href="#">隐私政策</a></span></p><input type="submit" id="sub" value="注册"><div class="zh"><a href="#">收不到验证码?</a></div><p class="other">其他方式登录</p><ul style="list-style-type: none; /* 移除列表项的默认样式(小圆点)*/"><li><a href=""><img src="./image/images/zfb.png" alt=""></a></li><li><a href=""><img src="./image/images/vx.png" alt=""></a></li><li><a href=""><img src="./image/images/QQ.png" alt=""></a></li><li><a href=""><img src="./image/images/wb.png" alt=""></a></li></ul></div></div></div><div class="erweima"><div class="glyphicon glyphicon-qrcode ewm"></div></div></div>
如图
点击注册的时候可以滑动到注册里面,这里可以使用把他使用display:flex包裹住一个大的div,里面有一个登录div,还有一个注册div,然后设置登录与注册之间的外边距调整他们的距离,然后再使用js绑定事件,进行移动,js代码为
var zc = document.getElementById("ZC");
var dl = document.getElementById("DL");
var rebox = document.querySelector('.rebox');zc.addEventListener("click", function() {zc.style.borderBottom = '3px solid #ff5c00';dl.style.borderBottom = 'none';animateLeft(rebox, -500, function() {console.log('注册页面移动完成');});});dl.addEventListener("click", function() {dl.style.borderBottom = '3px solid #ff5c00';zc.style.borderBottom = 'none';animateLeft(rebox, 0, function() {});
});function animateLeft(obj, target, callback) {clearInterval(obj.timer);obj.timer = setInterval(function() {var step = (target - obj.offsetLeft) / 10;step = step > 0 ? Math.ceil(step) : Math.floor(step);if (obj.offsetLeft == target) {clearInterval(obj.timer);callback && callback();}obj.style.left = obj.offsetLeft + step + 'px';}, 15);
}
首先通过document.getElementById和document.querySelector获取到页面中的注册按钮、登录按钮和包含注册登录内容的容器元素。
给注册按钮和登录按钮分别添加点击事件监听器,当点击注册按钮时,注册按钮底部加粗显示,登录按钮取消底部加粗显示,并通过animateLeft函数将包含注册登录内容的容器元素向左移动500px,达到切换效果;当点击登录按钮时,登录按钮底部加粗显示,注册按钮取消底部加粗显示,并通过animateLeft函数将包含注册登录内容的容器元素移动回原位0px。
animateLeft函数用于实现元素的动画移动效果,通过设置定时器不断更新元素的left属性值,直到达到目标位置时清除定时器并执行回调函数。
- 注意
- 如果有多显示的内容,或者显示不足,就是登录和注册之间的两个div距离不够,这时候就需要添加他们的左右边距,比如
<div class="register" style="margin-left: 80px;">
在第二个注册页加上左边距,加了左边距之后需要调整滑动的距离到正确的位置
比如
animateLeft(rebox, -500, function() {console.log('注册页面移动完成');});