昨天提到了单个图片的抖动效果,那么今天来写一下多组图片实现抖动效果的封装,这种效果也许在日常的项目中会用到,简单封装一下,就不用每次都写差不多一样的代码了,好的来看html和css的布局,其实很简单就是两张图片:
<style> img{position:absolute; top:200px; left:300px; width:180px;} #img1{left:560px;} </style> <body> <!--需求:点击图片,图片会抖动几下--> <img id="img" width="180" src="img/pic1.jpg"/> <img id="img1" width="180" src="img/pic2.jpg"/> </body>
js代码如下:
<script>
//兼容不同浏览器获取行间样式
function getStyle ( obj, attr ) {
return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr];
}
window.onload=function(){
//第一步先追加多个div
var oImg=document.getElementById("img");
var oImg1=document.getElementById("img1");
//添加点击事件
oImg.onclick=fn;
oImg1.onclick=fn;
//两个点击效果相同,那么就可以重用代码了
function fn(){
var _this=this;
shake(_this,'left',function(){//这里的回调函数实现的效果就是上下抖动
shake(_this,'top'); //注意:若没有任何声明的情况下,回调函数里不能直接用this,所以 _this=this不能少
})
}
//抖动效果的代码封装需要的参数也就是对象,方向,回调函数
function shake(obj,attr,endFn){
var pos=parseFloat(getStyle(obj,attr));
var arr=[];
var num=0;
var timer=null;
//抖动频率de数组,一正一负[20,-20,18,-18...]
for(var i=20;i>0;i-=2){
arr.push(i,-i)
}
arr.push(0);
//启用定时器前先关闭定时器
clearInterval(obj.timer);
obj.timer=setInterval(function(){
//让图片的left跟随数组里的值变化就会实现左右移动效果
obj.style[attr]=pos+arr[num]+"px";
num++;
if(num===arr.length){
clearInterval(obj.timer);
endFn && endFn();
}
},50)
}
};
</script>
好了,就是这样了,我写的比较啰嗦,也是希望看的比较明白,这只是两张图片点击之后的抖动效果,若是多组也是适用的,当然对于其他对象,比如说表单等等也都试用,还是那句话万变不离其宗,可以多试试!
好了,今天就到这里了!加油!