js常用的工具函数整理

Dreamer 发布于2016-02-11 收录于 前端开发 约1137字 预计阅读 3 分钟
目录

随机从数组中取出count个元素

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
/**
 * @param    {[type]}                 数组
 * @param    {[type]}                 取出元素的个数 
 * @return   {[type]}                 [description]
 */
function getRandomArrayElements(arr, count) {
  var shuffled = arr.slice(0),
    i = arr.length,
    min = i - count,
    temp, index;
  while (i-- > min) {
    index = Math.floor((i + 1) * Math.random());
    temp = shuffled[index];
    shuffled[index] = shuffled[i];
    shuffled[i] = temp;
  }
  return shuffled.slice(min);
}

数组去重

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
//数组去重复
Array.prototype.distinct = function() {
    var arr = this,
        result = [],
        i,
        j,
        len = arr.length;
    for (i = 0; i < len; i++) {
        for (j = i + 1; j < len; j++) {
            if (arr[i] === arr[j]) {
                j = ++i;
            }
        }
        result.push(arr[i]);
    }
    return result;
};

删除数组中的某个对象

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/*删除数组中的某一个对象
_arr:数组
_obj:需删除的对象
*/
function removeAaary(_arr, _obj) {
    var length = _arr.length;
    for (var i = 0; i < length; i++) {
        if (_arr[i] == _obj) {
            if (i == 0) {
                _arr.shift(); //删除并返回数组的第一个元素
                return _arr;
            } else if (i == length - 1) {
                _arr.pop(); //删除并返回数组的最后一个元素
                return _arr;
            } else {
                _arr.splice(i, 1); //删除下标为i的元素
                return _arr;
            }
        }
    }
}

获取滚动条离顶端的距离

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function getScrollTop() {
  var scrollPos;
  if (window.pageYOffset) {
	scrollPos = window.pageYOffset;
  } else if (document.compatMode && document.compatMode != 'BackCompat'){
	scrollPos = document.documentElement.scrollTop; 
  } else if (document.body) {
	scrollPos = document.body.scrollTop;
  }
  return scrollPos;
};

获取浏览器参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
/**
 * @param    {[type]}     name        参数字符串 
 * @return   {[type]}                 [description]
 */
function getQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) {
        return decodeURI(r[2]);//中文参数也可解析
    }
    return null;
}

判断是否在微信浏览器中

1
2
3
4
5
6
7
8
function isWeixin() {
  var ua = navigator.userAgent.toLowerCase();
  if (ua.match(/MicroMessenger/i) == "micromessenger") {
    return true;
  } else {
    return false;
  }
};

cookies操作

设置cookies

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
/**
 * @param    {[type]}                 c_name        cookie名字
 * @param    {[type]}                 value         cookie存的值
 * @param    {[type]}                 expiredays    cookie过期时间
 * @return   {[type]}                 [description]
 */
function setCookie(c_name, value, expiredays) {
  var exdate = new Date()
  exdate.setDate(exdate.getDate() + expiredays)
  document.cookie = c_name + "=" + escape(value) +
    ((expiredays == null) ? "" : "; expires=" + exdate.toGMTString())
};

获取cookies

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
/**
 * @param    {[type]}                 name        cookie名字
 * @return   {[type]}                 [description]
 */
function getCookie(name) {
  var search = name + "=" //查询检索的值
  var returnvalue = ""; //返回值
  if (document.cookie.length > 0) {
    sd = document.cookie.indexOf(search);
    if (sd != -1) {
      sd += search.length;
      end = document.cookie.indexOf(";", sd);
      if (end == -1){
        end = document.cookie.length;
      }
      returnvalue = unescape(document.cookie.substring(sd, end))
    }
  }
  return returnvalue;
};

函数节流

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * @param    {[type]}                 method      延迟执行的函数
 * @param    {[type]}                 delay       延迟多久执行
 * @return   {[type]}                 duration    多长时间执行一次
 */
function throttle(method, delay, duration) {
  var timer = null,
    begin = new Date();
  return function () {
    var context = this,
      args = arguments,
      current = new Date();
    clearTimeout(timer);
    if (current - begin >= duration) {
      method.apply(context, args);
      begin = current
    } else {
      timer = setTimeout(function () {
        method.apply(context, args);
      }, delay);
    }
  }
};

函数防抖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * 防抖函数
 * @param method 事件触发的操作
 * @param delay 多少毫秒内连续触发事件,不会执行
 * @returns {Function}
 * 使用
 * window.onscroll = debounce(function () {
 *   let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
 *   console.log('滚动条位置:' + scrollTop);
 * },200)
 */
function debounce(method,delay) {
    var timer = null;
    return function () {
        var self = this,
            args = arguments;
        timer && clearTimeout(timer);
        timer = setTimeout(function () {
            method.apply(self,args);
        },delay);
    }
}

判断鼠标滚动方向

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
/**
** jquery判断鼠标的滚动方向
** 使用方法:getScrollDirection(function(direction) { console.log(direction) });   
**/
function getScrollDirection( fn ) {
    var $window = $(window),
        beforeScrollTop = $window.scrollTop(),
        fn = fn || function() {};
    $window.scroll(function() {
        var afterScrollTop = $window.scrollTop(),
            delta = afterScrollTop - beforeScrollTop;
        if( delta === 0 ) return false;
        fn( delta > 0 ? "down" : "up" );
        beforeScrollTop = afterScrollTop;
    });
}

Dreamer
WRITTEN BY
Dreamer
Web Developer Love Photography and Cooking