zoukankan      html  css  js  c++  java
  • js基础和工具库

      1 /*
      2  * 作者:   胡乐
      3  * 2015/4/18
      4  * js 基础 和 工具库 
      5  * 
      6  * 
      7  * */
      8 //根据获取对象
      9 function hGetId(id){
     10     return document.getElementById(id);
     11 }
     12 //获取标签
     13 function hGetTagName(el , parentObj){
     14     return parentObj?parentObj.getElementsByTagName(el):document.getElementsByTagName(el);
     15 }
     16 //获取class  
     17 function hGetClass(paremtObj,tagName,className){
     18     
     19     var aEl = obj.getElementsByTagName(tagName);
     20     var arr = [];
     21     var arrClassName = [];
     22     
     23     for (var i = 0; i < aEl.length; i++) {
     24         arrClassName = aEl[i].className.split(' ');
     25         for (var j = 0; j < arr2.length; j++) {
     26             if(arrClassName[j] === className){
     27                 arr.push(aEl[i]);
     28                 break;
     29             }
     30         }
     31     }
     32     
     33     return arr;
     34 }
     35 //查找数组是否存在某一个值
     36 function arrIndexOf(arr , v){
     37     for (var i = 0; i < arr.length; i++) {
     38         if(arr[i] == v){
     39             return i;
     40         }
     41     }
     42     return -1;
     43 }
     44 //添加class
     45 function addClass(obj,className){
     46     if(obj.className == ''){
     47         obj.className = className;
     48     }else{
     49         var arrClassName = obj.className.split(' ');
     50         var _index = arrIndexOf(arrClassName , className);
     51         if(_index == -1){
     52             obj.className += ' '+className;
     53         }
     54     }
     55 }
     56 //移除class
     57 function removeClass(obj,className){
     58     if(obj.className != ''){
     59         var arrClassName = obj.className.split(' ');
     60         var _index = arrIndexOf(arrClassName, className);
     61         if(_index != -1){
     62             arrClassName.split(_index,1);
     63             obj.className = arrClassName.join(' ');
     64         }
     65     }
     66 }
     67 //获取对象样式
     68 function hGetStyle(obj , attr){
     69     return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj ,null )[attr]; 
     70 }
     71 
     72 //移动函数
     73 function hDoMove(obj , attr ,s ,target , endFn ){
     74     // 获取当前对象的的位置
     75     var pos = parseInt(hGetStyle(obj,attr));
     76     //如果目标点的位置 大于当前距离,那么 就是正向移动,否则就是负向移动
     77     s = target > pos ? s : -s;
     78     //清除上一个定时器
     79     clearInterval(obj.hDoMovetimer);
     80     //创建新的定时器
     81     obj.hDoMovetimer = setInterval(function(){
     82         //距离等于 当前对象的实时距离 +  每次要移动的距离
     83         var distance = parseInt(hGetStyle(obj,attr)) + s ;
     84         // 如果 上一步计算的距离大于 给定的目标点距离, 进行修正  =  目标距离
     85         if( distance > target && s > 0 || distance < target && s < 0){
     86             distance = target;
     87         }
     88         //  对象移动
     89         obj.style[attr] = distance + 'px';
     90         // 如果距离 已经到达目标点, 清除定时器,执行回调函数
     91         if( distance === target){
     92             clearInterval(obj.hDoMovetimer);
     93             // 回调函数是否是未定义?  不是则执行
     94             endFn && endFn();
     95         }
     96     },20)
     97 }
     98 //抖动函数
     99 function hShake ( obj, attr, endFn ) {
    100     /*
    101      *   两种办法解决抖动函数隐患的问题:
    102      * 1. 进入函数先  进到一个if控制,永远不直接执行抖动函数的主体代码 , 而是取当前 对象的位置和  50毫秒后的位置 ,  比较是否相等, 如果相等,
    103      *          则 说明对象当前抖动已经结束, 可以执行抖动效果!(有稍微的一点小BUG)
    104      * 2.   如果用一个变量开关来控制,也是挺好的, 但是, 变量开关不能函数开始被初始化也不能在函数结束后被清除。。 否则,每次触发这函数都可以
    105      *         顺利的往下执行抖动函数的主体代码,那就不能修复问题。  需要一个变量,他能存在的时间更长,  将变量挂在 window 的身上的时候 (win
    106      * dow.flag = false),每次就只能触发一次 对象进行抖动,下一个需要等到上一个抖动的对象抖动结束后,才能抖动, 这种效果,并不是想要
    107      * 的,所以  , 将开关挂在 传递进来的 obj身上 是最好的选择, 每个对象身上的开关管理 各自身上的 抖动问题处理,而且obj.flag在函数执行结束后
    108      * 并没有被回收,因为,他是从函数外部传递进来的,生命期很长!! 这样再次触发函数的时候,obj.flag = true,这个条件成立  if(obj.flag)
    109      * {return}  ,不往下执行了。。。除非抖动结束后, num ===  数组的最后一个值, 这时候才 赋值 为 false.
    110      * */
    111     if(obj.flag) {return} ; //初始化 未定义(false 不执行 return),
    112     obj.flag = true; // 马上赋值 true,  这样再次触发 函数  上一个判断就为 真(obj.flag 是传递进来的对象的属性,而对象是从外部传进来的,所以 没有被回收), 直接返回 ,不执行以下代码。
    113     
    114     var pos = parseInt( hGetStyle(obj, attr));    // 刚开始对象的位置
    115 
    116     //抖动函数运动轨迹数组
    117     var arr = [];            // 20, -20, 18, -18 ..... 0
    118     var num = 0;
    119     var timer = null;
    120     //自动生成一个运动轨迹的数组    
    121     for ( var i=20; i>0; i-=2 ) {
    122         arr.push( i, -i );
    123     }
    124     arr.push(0);
    125     //先清除定时器    
    126     clearInterval( obj.shake );
    127     
    128     obj.shake = setInterval(function (){
    129         obj.style[attr] = pos + arr[num] + 'px';
    130         num++;
    131         //如果已经运动到最后一个值,清除定时器,执行回调函数
    132         if ( num === arr.length ) {
    133             clearInterval( obj.shake );
    134             endFn && endFn();
    135             obj.flag = false;  //抖动结束后, 赋值false, 再次触发这个函数,会执行顶部的判断,就能再次抖动拉
    136         }
    137     }, 50);
    138 }
    139 
    140 
    141 /*
    142 读取或者设置el元素的透明值,val取值为0-1
    143 */
    144 function hOpacity(el,val) {
    145     var f=el.filters,s=el.style;
    146     if (arguments.length==1) 
    147         return f?(f.alpha?(f.alpha.opacity/100):1):(s.opacity||1);
    148     s.zoom=1;
    149     s.filter="alpha(opacity="+parseInt(val*100)+")";
    150     s.opacity=val;
    151 };
    152 
    153 //透明度淡出函数
    154 function hFadeOut(obj , time ,endFn){
    155     obj.iNum = 0;
    156     clearInterval(obj.hFadeTimer);
    157     obj.hFadeTimer = setInterval(function(){
    158         obj.iNum++;
    159         //使用设置和读取透明度函数
    160         hOpacity(obj,hOpacity(obj)-0.1);
    161         //处理有些浏览器透明度不能到零的问题。
    162         if(obj.iNum >= 10){
    163             obj.style.opacity = 0;
    164             obj.iNum = 0;
    165         }
    166         if(hGetStyle(obj, 'opacity') == 0){
    167             clearInterval(obj.hFadeTimer);
    168             endFn && endFn();
    169         }
    170     },time)
    171 }
    172 
    173 
    174 //获取当前并设置详细年月日期,设置第二个参数来确定获得的年月日详细情况
    175 function hgetTime(iNum){
    176     var hTime ={};
    177     
    178     var myTime = new Date();
    179 
    180     var iYear = myTime.getFullYear();
    181     var iMonth = myTime.getMonth()+1;
    182     var iDate = myTime.getDate();
    183     var iWeek = myTime.getDay();
    184     var iHours = myTime.getHours();
    185     var iMin = myTime.getMinutes();
    186     var iSec = myTime.getSeconds();
    187     
    188     if( iWeek === 0 ) iWeek = '星期日';
    189     if( iWeek === 1 ) iWeek = '星期一';
    190     if( iWeek === 2 ) iWeek = '星期二';
    191     if( iWeek === 3 ) iWeek = '星期三';
    192     if( iWeek === 4 ) iWeek = '星期四';
    193     if( iWeek === 5 ) iWeek = '星期五';
    194     if( iWeek === 6 ) iWeek = '星期六';
    195     
    196     //默认显示所有的年月日星期等详细的信息
    197     if(iNum === 0 || typeof(iNum) == 'undefined'){
    198         hTime.str = iYear+ '年' +iMonth+'月'+iDate+'日 '+iWeek+' '+ toTwo(iHours)+' : '+ toTwo(iMin)+' : '+ toTwo(iSec);
    199     }else if(iNum === 1){
    200         hTime.str = toTwo(iHours)+' : '+ toTwo(iMin)+' : '+ toTwo(iSec);
    201     }else if(iNum === 2){
    202         hTime.str = toTwo(iHours)+toTwo(iMin)+toTwo(iSec);
    203     }
    204 
    205     function toTwo ( n ) {
    206         return n < 10 ?  '0' + n : '' + n;
    207     }
    208     //时间戳
    209     hTime.getTime = Math.floor( myTime.getTime()/1000 );
    210     hTime.Hours = iHours;
    211     hTime.Min = iMin;
    212     hTime.Sec = iSec;
    213     return hTime;
    214 }
    215 
    216 //倒计时函数  NewTime 为倒计时截止时间 格式为: 'November 27,2015 22:3:0'
    217 function hCountDown(obj ,NewTime , endFn){
    218     /*
    219      * 月份取值:January、February、March、April、May、June、July、August、September、October、November、December
    220      * 时间转换公式: 
    221      * 天:Math.floor(t/86400)
    222      *    时:Math.floor(t%86400/3600)
    223      *    分:Math.floor(t%86400%3600/60)
    224      *    秒:t%60
    225      *  获取时间对象:new Date()
    226     - getFullYear
    227     - getMonth
    228     - getDate
    229     - getDay
    230      - getHours
    231      - getMinutes
    232      - getSeconds
    233     - 时间戳:new Date().getTime()-返回从1970年1月1日到现在的毫秒数(UTC时间标准时间)
    234      * */
    235     var iNow = null;
    236     var t = 0;
    237     var str = '';
    238     var timer = null;
    239     
    240     iNew = new Date( NewTime );
    241 
    242     clearInterval( timer );
    243     
    244     timer = setInterval (function (){
    245         console.log(NewTime);
    246         iNow = new Date();
    247         t = Math.floor( ( iNew - iNow ) / 1000 );
    248         if ( t >= 0 ) {
    249             str = Math.floor(t/86400)+'天'+Math.floor(t%86400/3600)+'时'+Math.floor(t%86400%3600/60)+'分'+t%60+'秒';
    250             obj.innerHTML = str;    
    251         } else {
    252             clearInterval( timer );
    253             endFn && endFn();
    254         }
    255     
    256     }, 1000);
    257 }
    258 
    259 //检查是否是数字
    260 //charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
    261 function hDetectNum(val){
    262     var str = '';
    263     for (var i = 0; i < val.length; i++) {
    264         str = val.charCodeAt(i);
    265         if(str < 47 || str > 57){
    266             return false;
    267         }
    268     }
    269     return true;
    270 }
    271 
    272 function hShow(obj){
    273     obj.style.display = 'block';
    274 }
    275 function hHide(obj){
    276     obj.style.display = 'none';
    277 }
    278 //查找和替换函数   iNum = 1 时候为替换模式,val2 为'' 的时候为删除 val1 中的内容。
    279 function hReplace(str , val1 , val2 , iNum){
    280     var hReplace = {};
    281     hReplace.flag = true;
    282     hReplace.newStr = '';
    283     
    284     function strIndexOf(){
    285         if(str.indexOf(val1) === -1){
    286             hReplace.flag = false;
    287             return hReplace;
    288         }
    289     }
    290     if(typeof(val2) === 'undefined'){
    291         strIndexOf();
    292          hReplace.newStr = str.split(val1).join('<span style="background:yellow;">'+ val1 +'</span>');
    293     }else if(iNum === 1){
    294         strIndexOf();
    295         hReplace.newStr = str.split(val1).join('<span style="background:yellow;">'+ val2 +'</span>');
    296     }
    297     
    298     return hReplace;
    299 }
    300 
    301 //获取元素距离浏览器的距离
    302 function hGetPos(obj){
    303     var pos = {left:0,top:0};
    304     while (obj){
    305         pos.left += obj.offsetLeft;
    306         pos.top += obj.offsetTop;
    307         obj = obj.offsetParent;
    308     }
    309     return pos;
    310 }
  • 相关阅读:
    查看linux系统cup及内存信息
    caffe tutorial
    vector 初始化方法
    c++ 常用函数头文件
    caffe——全连接层inner_product_layer
    c++ 将vector转化为数组
    基于 Ubuntu 搭建 RoCE 实践环境
    基于QEMU使用 u-boot 拉取 Linux 内核
    Linux 网桥(Bridge)实践环境搭建
    使用 qemu 模拟器运行 aosp(基于 x86-64 Linux 内核)
  • 原文地址:https://www.cnblogs.com/wanqiu/p/4452711.html
Copyright © 2011-2022 走看看