封装好的 抖动函数 shake
2016-09-12 08:36
106 查看
抖动函数
shake封装
function shake ( obj, attr, endFn ) {
var pos = parseInt( getStyle(obj, attr) );
var arr = []; // 20, -20, 18, -18 ..... 0
var num = 0;
for ( var i=20; i>0; i-=2 ) {
arr.push( i, -i );
}
arr.push(0);
clearInterval( obj.shake );
obj.shake = setInterval(function (){
obj.style[attr] = pos + arr[num] + 'px';
num++;
if ( num === arr.length ) {
clearInterval( obj.shake );
endFn && endFn();
}
}, 50);
}
function getStyle(obj, attr ){
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
}
解析:shake ( obj, attr, endFn )
obj --> 抖动对象
attr --> 抖动的方向 top / left 要加引号
endfn --> 回调函数 、 可有可无
ps:attr
传参时 要加 引号
解决连续点击会改变元素的位置示例:给元素身上加个开关
示例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
<style>
html,body{margin:0;}
#div1{
width:100px;
height:100px;
background:red;
position:absolute;
margin:50px 100px;
}
</style>
<script>
window.onload=function(){
var adiv=document.getElementById('div1');
adiv.onoff=true;
adiv.onclick=function(){
var a=parseInt(getStyle(adiv,'left'))+parseInt(adiv.offsetLeft)
shake ( adiv,'left', function(){adiv.onoff=true});
}
function shake ( obj, attr, endFn ) {
var pos = parseInt( getStyle(obj, attr) );
var arr = []; // 20, -20, 18, -18 ..... 0
var num = 0;
for ( var i=20; i>0; i-=2 ) {
arr.push( i, -i );
}
arr.push(0);
if ( obj.onoff) {
clearInterval( obj.shake );
obj.shake = setInterval(function (){
obj.onoff=false;
obj.style[attr] = pos + arr[num] + 'px';
num++;
if ( num === arr.length ) {
obj.onoff==true
clearInterval( obj.shake );
endFn && endFn();
}
}, 50);
}
}
function getStyle(obj, attr ){
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
}
}
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
相关文章推荐
- 运动函数以及抖动函数的封装
- 收藏——在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 包装外观(Wrapper Facade):用于在类中封装函数的结构型模式
- CG学习(2)——CG的基本语法及核心函数的面向对象简单封装
- 收集了项目中常用的js函数和封装代码.
- 将调试信息同时输出到终端和文件_暨_多参数函数封装
- 包装外观(Wrapper Facade):用于在类中封装函数的结构型模式
- XSL中几个封装的函数
- ASP常用的几个功能模块封装成函数调用(登录验证,状态切换。。) http://www.tsingfeng.com/archives/?article-89.html
- 一个导出CListCtrl控件数据到Excel文件的封装函数[r]
- 线程的封装技巧:把任意类的成员函数指针作为参数
- 封装回调函数——为对象方法(Object Method,参数中带this指针的函数) 构造 普通函数(参数中无this指针的函数)形式 的入口
- 一些存储概念自己有用需要封装内存分配函数是了解
- 封装控制面板函数 CCPApplet
- 封装回调函数——为对象方法(Object Method,参数中带this指针的函数) 构造 普通函数(参数中无this指针的函数)形式 的入口
- 任意类成员函数作为线程参数的封装
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- ASP.NET 程序设计中常用到的一些通用函数 自己的封装 可以做成dll来使用。
- Iconv是UNIX 95的iconv()函数的封装形式,它在各种字符代码体系间进行字符串转换。
- 非阻塞网络函数封装不一致