封装好的 抖动函数 shake

来源:互联网 发布:即时战略推荐 知乎 编辑:程序博客网 时间:2024/06/17 22:41

  1. 抖动函数shake封装


  2. function shake ( obj, attr, endFn ) {
  3. var pos = parseInt( getStyle(obj, attr) );
  4. var arr = []; // 20, -20, 18, -18 ..... 0
  5. var num = 0;

  6. for ( var i=20; i>0; i-=2 ) {
  7. arr.push( i, -i );
  8. }
  9. arr.push(0);

  10. clearInterval( obj.shake );
  11. obj.shake = setInterval(function (){
  12. obj.style[attr] = pos + arr[num] + 'px';
  13. num++;
  14. if ( num === arr.length ) {
  15. clearInterval( obj.shake );
  16. endFn && endFn();
  17. }
  18. }, 50);
  19. }
  20. function getStyle(obj, attr ){
  21. return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
  22. }



解析:shake ( obj, attr, endFn )
obj --> 抖动对象
attr --> 抖动的方向 top / left 要加引号
endfn --> 回调函数 、 可有可无
ps:attr 传参时 要加 引号


解决连续点击会改变元素的位置示例:给元素身上加个开关

示例:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset="UTF-8">
  6. <style>
  7. html,body{margin:0;}
  8. #div1{
  9. width:100px;
  10. height:100px;
  11. background:red;
  12. position:absolute;
  13. margin:50px 100px;
  14. }
  15. </style>
  16. <script>
  17. window.onload=function(){
  18. var adiv=document.getElementById('div1');
  19. adiv.onoff=true;
  20. adiv.onclick=function(){
  21. var a=parseInt(getStyle(adiv,'left'))+parseInt(adiv.offsetLeft)
  22. shake ( adiv,'left', function(){adiv.onoff=true});
  23. }
  24. function shake ( obj, attr, endFn ) {
  25. var pos = parseInt( getStyle(obj, attr) );
  26. var arr = []; // 20, -20, 18, -18 ..... 0
  27. var num = 0;
  28. for ( var i=20; i>0; i-=2 ) {
  29. arr.push( i, -i );
  30. }
  31. arr.push(0);
  32. if ( obj.onoff) {
  33. clearInterval( obj.shake );
  34. obj.shake = setInterval(function (){
  35. obj.onoff=false;
  36. obj.style[attr] = pos + arr[num] + 'px';
  37. num++;
  38. if ( num === arr.length ) {
  39. obj.onoff==true
  40. clearInterval( obj.shake );
  41. endFn && endFn();
  42. }
  43. }, 50);
  44. }
  45. }
  46. function getStyle(obj, attr ){
  47. return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
  48. }
  49. }
  50. </script>
  51. </head>
  52. <body>
  53. <div id="div1"></div>
  54. </body>
  55. </html>








1 0
原创粉丝点击