使用JS"晃动"元素

有些网站的登录表单倘若信息填写错误,除了会给出提示信息之外,还会让表单左右晃动以提示错误,觉得这个效果不错,便按照自己的思路写了个DEMO记录于此。

整个流程就是:

1.设置元素左右晃动的总次数

2.设置元素左右晃动的偏移量范围并且左右晃动交替进行

3.让元素开始晃动并记录次数,元素的移动可以利用绝对定位

4.最后让元素恢复到初始位置

DEMO代码

<!DOCTYPE html>
<html>
<head>
<title>shake demo</title>
<meta charset="utf-8"/>
<style type="text/css">
    #wrapper{
        position:relative;
        width:300px;
        margin:150px auto;
    }
    #shaker{
        position:absolute;
        left:0;
        width:300px;
        height:250px;
        border:1px solid #B0B0B0;
        border-radius:3px;
        box-shadow:0 0 10px #B4B4B4;
    }
</style>
<body>
<div id="wrapper">
    <div id="shaker"></div>
</div>
<script type="text/javascript">
/**
 *使登录表单左右摇晃的对象
 */
function shaking(){
    this.shaker=document.getElementById(‘shaker‘);    //摇晃对象为登录表单
}
shaking.prototype.generator=function(){    //生成左右摇晃的偏移量
    this.offsets=new Array();
    this.times=10;    //登录表单左右摇晃的总次数
    for(var i=0;i<this.times;i++){
        var offset=Math.ceil((Math.random()+3)*3);    //9=<偏移量<=12
        if(i%2==0){    //向左的偏移量
            this.offsets.push(offset);
        }
        else{    //向右的偏移量
            this.offsets.push(-offset);
        }
    }
    this.scale=0;    //记录目前表单已经摇晃的次数
}
shaking.prototype.counter=function(){    //摇晃次数计数器函数
    if(this.scale<this.times){
        var offset=this.offsets[this.scale];
        var position=parseInt(getComputedStyle(this.shaker)[‘left‘]);
        var distance=Math.abs(position)+Math.abs(offset);    //表单每次摇晃需要移动的水平距离
        if(offset>0){    //向右偏移
            this.mover(1,distance,this);
        }
        else{    //向左偏移
            this.mover(-1,distance,this);
        }
        this.scale+=1;
        var _this=this;    //缓存当前对象
        setTimeout(function(){_this.counter()},50);
    }
    else{    //表单位置复位
        this.shaker.style.left=‘0px‘;
    }
}
shaking.prototype.mover=function(sign,distance){    //摇晃移动函数
    var speed=sign*Math.ceil(distance*0.6);    //表单移动的速度
    this.shaker.style.left=parseInt(getComputedStyle(this.shaker)[‘left‘])+speed+‘px‘;
    distance-=Math.abs(speed);
    var _this=this;    //缓存当前对象
    if(distance>0){
        setTimeout(function(){_this.mover()},10);
    }
}
var shaker=new shaking();
shaker.generator();
shaker.counter();
</script>
</body>
</html>
时间: 2024-10-24 14:30:23

使用JS"晃动"元素的相关文章

JS子元素oumouseover触发父元素onmouseout

JavaScript中,父元素包含子元素: 当父级设置onmouseover及onmouseout时,鼠标从父级移入子级,则触发父级的onmouseout后又触发onmouseover:从子级移入父级后再次触发父级的oumouseout后又触发onmouseover.而如果onmouseover内又应用了计时器便会存在较大的问题.下面针对此问题给出解决方案. 首先,在给出解决方案之前,必须先弄清楚几个对象及方法,分别如下: 1.事件对象 2.事件对象相关属性(只针对onmouseover及onm

VBS操作JS网页元素实例

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0'' NAME: '' AUTHOR: Microsoft , Microsoft' DATE : 2014/8/14'' COMMENT: ''==========================

Raphael.js改变元素层叠顺序

Raphael.js 元素(Element)改变层叠顺序,Raphael.js是一个矢量绘图库兼容svg和vml.初学时感觉css的z-index能搞定,结果是不支持,不过矢量绘图符合dom标准.可以改变dom加载顺序实现想要的结果. 1.看Raphael.js API,有关于改变层叠的方法,但只找到两个互换.查看源码发现有改变dom结构的方法. 2.XML DOM appendChild() 方法 移除原有元素插入到新位置.刚开始以为只新增,不移除原有.走了很多弯路,基础不扎实. 3.Raph

js获取元素样式方法

? 1 2 3 4 5 6 7 8 function getStyle(ojb,attr){       if(obj.currentStyle){             return obj.currentStyle[attr];       }         else{            return getComputedStyle(obj,false)[attr];        } } js获取元素样式方法,布布扣,bubuko.com

js对元素属性.内容的操作。定时器。元素的平级,父级,子集关系。

JS对元素内容的操作: 1.操作样式(style) 2.操作属性(Attribute) 3.操作内容(innerHtml/Text) 一.操作元素属性 常见属性:class.id.style.disabled. 自定义属性:可以自定义一个任意属性名称,可以任意放值,不会对所在元素本身有任何作用. this:代表所在最近的一个方法. 设置一个属性:a.setAttribute("属性名称","属性值");[不存在该属性名称时,创建这个属性,并赋值.当存在该属性名称时,

js改变元素的class来实现改变元素的CSS样式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

2017-3-31 js对元素属性.内容的操作。定时器。元素的平级,父级,子集关系。

JS对元素内容的操作: 1.操作样式(style) 2.操作属性(Attribute) 3.操作内容(innerHtml/Text) 一.操作元素属性 常见属性:class.id.style.disabled. 自定义属性:可以自定义一个任意属性名称,可以任意放值,不会对所在元素本身有任何作用. this:代表所在最近的一个方法. 设置一个属性:a.setAttribute("属性名称","属性值");[不存在该属性名称时,创建这个属性,并赋值.当存在该属性名称时,

js数组元素由小到大排序实例代码

js数组元素由小到大排序实例代码:有时候需要对数组中的数字进行排序,下面是一段将数组中数字由小到大排序的代码实例,希望能够帮到大家.实例代码如下: var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98]; var len=arr.length; console.log(arr.join(",")); var newarr=[]; for(var i=0;i<len;i++){ newarr.push(Math.min.apply(nu

js实现元素宽度反弹的两种方法

方法一:此方法,不是我想的,但是超级喜欢,太漂亮了 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>02</title> <style> #outer{ width:1400px; height:400px; background-color: pink; } #inner{ width:20