小米网登录窗口抖动函数实现
之前经常在小米网上买东西,发现小米网站的登录验证做得挺有特色的。当用户名或密码输入错误的时候会像“摇头”似得抖一抖,略微想了一下,发现实现的方式挺简单的,所以今天下午花了一点时间想了一下,以下是我的思路和代码。
要实现抖动,需要实现一下几步:
1,获取当前元素的位置作为初始位置。
2,设置定时器循环改变元素的位置,每次左右移动一次比上一次移动少一点点距离,直到停止到初始位置。
3,触发调用
小米网使用一个 div 元素放置表单元素, div 元素水平居中,并设置定位方式为 relative ,以便文本框能够依据父元素 div 作参照左右移动。这里我使用一张图片来代替文本框,HTML代码如下:
<div class="main"> <img src="cai.jpg" id="cai" /> </div>
CSS代码如下:
.main{width:300px; margin:20px auto; position:relative;} #cai{width:300px; position:absolute; top:0; left:0; cursor:pointer;}
JavaScript代码如下:
1 window.onload = function(){ 2 var cai = document.getElementById("cai"); 3 4 function shake(obj,attr){ 5 var _this = obj; 6 shake.pos = shake.pos ? shake.pos : parseInt(getStyle(_this,attr)); 7 var arr = []; 8 for(var i=20;i>0;i-=2){ 9 arr.push(i,-i); 10 } 11 arr.push(0); 12 shake.timer = null; 13 clearInterval(shake.timer); 14 shake.num = 0; 15 shake.timer = setInterval(function(){ 16 _this.style[attr] = shake.pos + arr[num] + "px"; 17 shake.num++; 18 if(shake.num>arr.length) clearInterval(shake.timer); 19 },20); 20 } 21 22 function getStyle(obj,attr){ 23 return getComputedStyle(obj,null)[attr] ? getComputedStyle(obj,null)[attr] : obj.currentStyle[attr]; 24 } 25 26 cai.onclick = function(){ 27 shake(this,"left"); 28 }; 29 }
有几个需要注意的地方,首先是为了兼容IE浏览器,我们需要在取元素初始位置的时候进行兼容性处理。我们知道W3C的方法是 window.getComputedStyle(obj,null)[attr] ,而IE独有的方法是 obj.currentStyle[attr] 。
为了保证在连续点击的时候初始位置的获取不出错,只需要在第一次点击的时候将初始位置保存下来即可,之后便可直接使用该属性值,我们需要判断是不是第一次点击: shake.pos = shake.pos ? shake.pos : parseInt(getStyle(_this,attr));
为了能实现我们最开始说的第二点,我们可以循环生成一个包含移动位置的数组。打印出来我们生成的数组如下所示:
最后就是调用了,在小米网中用户名或密码输入错误之后实际上是执行了一次ajax通信过程,所以会有回调函数。我们可以将回调函数作为参数传进去,在抖动结束之后执行。
除了可以左右抖动之外,我们可以试着把参数 left 改成 top 传进去,这样就能实现上下抖动了。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。