js基础和工具库
1 /* 2 * 3 * 2015/4/18 4 * js 基础 和 工具库 5 * 6 * 7 * */ 8 //获取对象样式 9 function hGetStyle(obj , attr){ 10 return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj ,null )[attr]; 11 } 12 13 //移动函数 14 function hDoMove(obj , attr ,s ,target , endFn ){ 15 // 获取当前对象的的位置 16 var pos = parseInt(hGetStyle(obj,attr)); 17 //如果目标点的位置 大于当前距离,那么 就是正向移动,否则就是负向移动 18 s = target > pos ? s : -s; 19 //清除上一个定时器 20 clearInterval(obj.hDoMovetimer); 21 //创建新的定时器 22 obj.hDoMovetimer = setInterval(function(){ 23 //距离等于 当前对象的实时距离 + 每次要移动的距离 24 var distance = parseInt(hGetStyle(obj,attr)) + s ; 25 // 如果 上一步计算的距离大于 给定的目标点距离, 进行修正 = 目标距离 26 if( distance > target && s > 0 || distance < target && s < 0){ 27 distance = target; 28 } 29 // 对象移动 30 obj.style[attr] = distance + ‘px‘; 31 // 如果距离 已经到达目标点, 清除定时器,执行回调函数 32 if( distance === target){ 33 clearInterval(obj.hDoMovetimer); 34 // 回调函数是否是未定义? 不是则执行 35 endFn && endFn(); 36 } 37 },20) 38 } 39 //抖动函数 40 function hShake ( obj, attr, endFn ) { 41 /* 42 * 两种办法解决抖动函数隐患的问题: 43 * 1. 进入函数先 进到一个if控制,永远不直接执行抖动函数的主体代码 , 而是取当前 对象的位置和 50毫秒后的位置 , 比较是否相等, 如果相等, 44 * 则 说明对象当前抖动已经结束, 可以执行抖动效果!(有稍微的一点小BUG) 45 * 2. 如果用一个变量开关来控制,也是挺好的, 但是, 变量开关不能函数开始被初始化也不能在函数结束后被清除。。 否则,每次触发这函数都可以 46 * 顺利的往下执行抖动函数的主体代码,那就不能修复问题。 需要一个变量,他能存在的时间更长, 将变量挂在 window 的身上的时候 (win 47 * dow.flag = false),每次就只能触发一次 对象进行抖动,下一个需要等到上一个抖动的对象抖动结束后,才能抖动, 这种效果,并不是想要 48 * 的,所以 , 将开关挂在 传递进来的 obj身上 是最好的选择, 每个对象身上的开关管理 各自身上的 抖动问题处理,而且obj.flag在函数执行结束后 49 * 并没有被回收,因为,他是从函数外部传递进来的,生命期很长!! 这样再次触发函数的时候,obj.flag = true,这个条件成立 if(obj.flag) 50 * {return} ,不往下执行了。。。除非抖动结束后, num === 数组的最后一个值, 这时候才 赋值 为 false. 51 * */ 52 if(obj.flag) {return} ; //初始化 未定义(false 不执行 return), 53 obj.flag = true; // 马上赋值 true, 这样再次触发 函数 上一个判断就为 真(obj.flag 是传递进来的对象的属性,而对象是从外部传进来的,所以 没有被回收), 直接返回 ,不执行以下代码。 54 55 var pos = parseInt( hGetStyle(obj, attr)); // 刚开始对象的位置 56 57 //抖动函数运动轨迹数组 58 var arr = []; // 20, -20, 18, -18 ..... 0 59 var num = 0; 60 var timer = null; 61 //自动生成一个运动轨迹的数组 62 for ( var i=20; i>0; i-=2 ) { 63 arr.push( i, -i ); 64 } 65 arr.push(0); 66 //先清除定时器 67 clearInterval( obj.shake ); 68 69 obj.shake = setInterval(function (){ 70 obj.style[attr] = pos + arr[num] + ‘px‘; 71 num++; 72 //如果已经运动到最后一个值,清除定时器,执行回调函数 73 if ( num === arr.length ) { 74 clearInterval( obj.shake ); 75 endFn && endFn(); 76 obj.flag = false; //抖动结束后, 赋值false, 再次触发这个函数,会执行顶部的判断,就能再次抖动拉 77 } 78 }, 50); 79 } 80 81 82 /* 83 读取或者设置el元素的透明值,val取值为0-1 84 */ 85 function hOpacity(el,val) { 86 var f=el.filters,s=el.style; 87 if (arguments.length==1) 88 return f?(f.alpha?(f.alpha.opacity/100):1):(s.opacity||1); 89 s.zoom=1; 90 s.filter="alpha(opacity="+parseInt(val*100)+")"; 91 s.opacity=val; 92 }; 93 94 //透明度淡出函数 95 function hFadeOut(obj , time ,endFn){ 96 obj.iNum = 0; 97 clearInterval(obj.hFadeTimer); 98 obj.hFadeTimer = setInterval(function(){ 99 obj.iNum++; 100 //使用设置和读取透明度函数 101 hOpacity(obj,hOpacity(obj)-0.1); 102 //处理有些浏览器透明度不能到零的问题。 103 if(obj.iNum >= 10){ 104 obj.style.opacity = 0; 105 obj.iNum = 0; 106 } 107 if(hGetStyle(obj, ‘opacity‘) == 0){ 108 clearInterval(obj.hFadeTimer); 109 endFn && endFn(); 110 } 111 },time) 112 } 113 114 115 //获取当前并设置详细年月日期,设置第二个参数来确定获得的年月日详细情况 116 function hgetTime(iNum){ 117 var hTime ={}; 118 119 var myTime = new Date(); 120 121 var iYear = myTime.getFullYear(); 122 var iMonth = myTime.getMonth()+1; 123 var iDate = myTime.getDate(); 124 var iWeek = myTime.getDay(); 125 var iHours = myTime.getHours(); 126 var iMin = myTime.getMinutes(); 127 var iSec = myTime.getSeconds(); 128 129 if( iWeek === 0 ) iWeek = ‘星期日‘; 130 if( iWeek === 1 ) iWeek = ‘星期一‘; 131 if( iWeek === 2 ) iWeek = ‘星期二‘; 132 if( iWeek === 3 ) iWeek = ‘星期三‘; 133 if( iWeek === 4 ) iWeek = ‘星期四‘; 134 if( iWeek === 5 ) iWeek = ‘星期五‘; 135 if( iWeek === 6 ) iWeek = ‘星期六‘; 136 137 //默认显示所有的年月日星期等详细的信息 138 if(iNum === 0 || typeof(iNum) == ‘undefined‘){ 139 hTime.str = iYear+ ‘年‘ +iMonth+‘月‘+iDate+‘日 ‘+iWeek+‘ ‘+ toTwo(iHours)+‘ : ‘+ toTwo(iMin)+‘ : ‘+ toTwo(iSec); 140 }else if(iNum === 1){ 141 hTime.str = toTwo(iHours)+‘ : ‘+ toTwo(iMin)+‘ : ‘+ toTwo(iSec); 142 }else if(iNum === 2){ 143 hTime.str = toTwo(iHours)+toTwo(iMin)+toTwo(iSec); 144 } 145 146 function toTwo ( n ) { 147 return n < 10 ? ‘0‘ + n : ‘‘ + n; 148 } 149 //时间戳 150 hTime.getTime = Math.floor( myTime.getTime()/1000 ); 151 hTime.Hours = iHours; 152 hTime.Min = iMin; 153 hTime.Sec = iSec; 154 return hTime; 155 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。