时间:2021-05-26
原理介绍
抖动其实是往复运动的一种特殊形式,只不过往复运动是一种无摩擦力的无限运动,且以速度为参照依据;而抖动以位置作为参照依据,最终停在起始点
在网页中最常见的一种抖动效果应该是窗口抖动提示了
抖动元素从起始点开始,先向右移动最大距离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;//默认值为20target = 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;//声明步长stepvar step = 0;//保存样式初始值var attrValue = parseFloat(getCSS(obj,attr));//声明参照值valuevar 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实现窗口抖动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲解了基于javascript实现窗口抖动效果的详细代码,分享给大家供大家参考,具体内容如下效果图:鼠标点击,窗口实现抖动。具体代码:窗口登陆效果#wi
本文实例讲述了jQuery通过扩展实现抖动效果的方法。分享给大家供大家参考。具体实现方法如下:1.JavaScript代码如下:复制代码代码如下:jQuery.
本文实例为大家分享了C语言QQ聊天界面抖动的具体代码,供大家参考,具体内容如下图片中的窗口抖动功能大家应该都用过,今天给大家带来的就是用C来实现类似QQ窗口抖动
本文实例讲述了JavaScript实现上下浮动的窗口效果代码。分享给大家供大家参考。具体如下:这里介绍使用JavaScript实现上下浮动的窗口,在垂直方向上漂
本文实例为大家分享了C#实现QQ窗口抖动效果的具体代码,供大家参考,具体内容如下实现界面:1.两个textbook和两个Button2.NotifyIcon控件