JavaScript实现窗口抖动效果
本文介绍如何利用JavaScript和定时器实现窗口抖动效果。通过控制元素位移值的变化,采用获取初始样式并计算偏移量的思路,封装成shakeMove函数。示例展示了如何在鼠标悬停时触发抖动动画,适用于网页提示等场景。
原理介绍
原理介绍
抖动本质上是往复运动的一种特殊形式。与以速度为参照、无摩擦力无限运动的往复运动不同,抖动以位置为参照依据,最终会停止在起始点。
在网页开发中,最常见的抖动效果通常用于窗口抖动提示。

抖动元素从起始点开始,先向右移动最大距离len,然后移动到对称的左边位置;接着再向右移动稍微小一点的距离,再移动到对称的左边位置;以此循环,最终元素停止在起始点。
代码实现
代码实现
在代码实现上,抖动效果主要通过定时器来达成,即每隔一段时间让元素的left或top值发生变化。
在运动实现中,有两种关于距离变化的思路。
思路一
div.style.left = div.offsetLeft + value;
每次获取元素的当前样式,再与变化的value值进行运算。
思路二
left = div.offsetLeft;
......
div.style.left = left + value;
在定时器开启之前,获取元素的初始样式,再与变化的value值进行运算。
从抖动实现的角度来看,使用第二种方法,将距离变化完全交给value值的变化来实现,相对更为简单。
因此,代码实现的关键在于理解value值是如何变化的。
假设最远距离为目标target,同方向的距离间隔为步长step。用数字直观表示,value的值类似于4、-4、2、-2、0。因此还需要一个变量dir来控制起始抖动方向,定时器每运动一次都要对dir进行更改。
//定时器开启前的变量声明
dir = 1;
step = 0;
left = div.offsetLeft
//定时器里面的代码
value = dir*(target - step);
if(step >= target){
step = target
}
div.style.left = left + value + 'px';
if(dir === -1){
step++;
}
dir = -dir;
将抖动效果封装为shakeMove.js
function getCSS(obj,style){
if(window.getComputedStyle){
return getComputedStyle(obj)[style];
}
return obj.currentStyle[style];
}
function shakeMove(json){
//声明要进行抖动的元素
var obj = json.obj;
//声明元素抖动的最远距离
var target = json.target;
//默认值为20
target = Number(target) || 20;
//声明元素的变化样式
var attr = json.attr;
//默认为'left'
attr = attr || 'left';
//声明元素的起始抖动方向
var dir = json.dir;
//默认为'1',表示开始先向右抖动
dir = Number(dir) || '1';
//声明元素每次抖动的变化幅度
var stepValue = json.stepValue;
stepValue = Number(stepValue) || 2;
//声明回调函数
var fn = json.fn;
//声明步长step
var step = 0;
//保存样式初始值
var attrValue = parseFloat(getCSS(obj,attr));
//声明参照值value
var value;
//清除定时器
if(obj.timer){return;}
//开启定时器
obj.timer = setInterval(function(){
//抖动核心代码
value = dir*(target - step);
//当步长值大于等于最大距离值target时
if(step >= target){
step = target
}
//更新样式值
obj.style[attr] = attrValue + value + 'px';
//当元素到达起始点时,停止定时器
if(step == target){
clearInterval(obj.timer);
obj.timer = 0;
//设置回调函数
fn && fn.call(obj);
}
//如果此时为反向运动,则步长值变化
if(dir === -1){
step = step + stepValue;
}
//改变方向
dir = -dir;
},50);
}
实例应用
实例应用
下面利用封装的shakeMove来实现一些简单的抖动应用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.test{
height: 50px;
width: 50px;
position: absolute;
top: 50px;
}
</style>
</head>
<body>
<div id="box">
<div class="test" style="left:10px;background:lightblue"></div>
<div class="test" style="left:70px;background:lightgreen"></div>
<div class="test" style="left:130px;background:pink"></div>
<div class="test" style="left:190px;background:lightcoral"></div>
<div class="test" style="left:250px;background:orange"></div>
</div>
<script src="http://files.cnblogs.com/files/xiaohuochai/shakeMove.js"></script>
<script>
var aDiv = box.getElementsByTagName('div');
for(var i = 0; i < aDiv.length; i++){
aDiv[i].onmouseover = function(){
shakeMove({obj:this,attr:'top'});
}
}
</script>
</body>
</html>
以上所述是小编给大家介绍的JavaScript实现窗口抖动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!
JS合并多个数组的三种方法:concat、spread与flat
2026-11-05 17:39:45
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
