public.js

'use strict';


// 获取CSS
function getStyle(obj, attr) {
    return (obj.currentStyle || getComputedStyle(obj, false))[attr];
}


// 设置CSS
function setStyle(obj, attr, val) {
    switch (typeof attr) {
        case 'string':
            return obj.style[attr] = val;

        case 'object':
            for (var i in attr) {
                obj.style[i] = attr[i];
            }
    }
}


// 获取随机整数
function rnd(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}


// 获取DOM的绝对位置
function getPos(obj) {
    var t = obj.offsetTop,
        l = obj.offsetLeft,
        p = obj.offsetParent;
    while (p) {
        t += p.offsetTop,
        l += p.offsetLeft,
        p =  p.offsetParent;
    }
    return {top: t, left: l};
}


// 获取鼠标划入的方向
function hoverDir(e, obj) {
    var oh = document.documentElement,
        ob = document.body,
        sw = obj.offsetWidth,
        sh = obj.offsetHeight;
    var sx = getPos(obj).left + sw / 2 - e.clientX - (oh.offsetLeft || ob.offsetLeft),
        sy = getPos(obj).top  + sh / 2 - e.clientY - (oh.scrollTop  || ob.scrollTop);
    return (Math.round((Math.atan2(sy, sx) * 180 / Math.PI + 180) / 90) % 4 + 1) % 4 + 1;
}


// 初始化 rem
function initRem() {
    var w = window.innerWidth,
        e = 6.4,
        o = document.documentElement;
    o.style.fontSize = (Math.floor(w / e) >= 100 ? 100 : Math.floor(w / e)) + 'px';
}


// 获取GET参数
function parseParams(property) {
    if (!property) return;
    var arr = location.search.substring(1).split('&'), i, temp;
    for (i = 0; i < arr.length; i ++) {
        temp = arr[i].split('=');
        if (temp[0] === property) return decodeURIComponent(temp[1]);
    }
}


// Class是否存在
function hasClass(obj, sClass) {
    return !!(obj.className.match(new RegExp('(^|\s)' + sClass + '(\s|$)')));
}


// 添加Class
function addClass(obj, sClass) {
    !hasClass(obj, sClass) && (obj.className += ' ' + sClass);
}


// 删除Class
function removeClass(obj, sClass) {
    hasClass(obj, sClass) && (obj.className = obj.className.replace(sClass, '').replace(/(^s+|s+$)/, ''));
}


// 把DOM A 放入到 DOM B 之后
function insertAfter(obj, target) {
    var nextDom = target.nextElementSibling || target.nextSibling;
    nextDom ? nextDom.parentNode.insertBefore(obj, nextDom) : target.parentNode.appendChild(obj);
}


// 字符按键
function getCharCode(e, isTrue) {
    if (e.charCode) {
        return !isTrue ? e.charCode : String.fromCharCode(e.charCode);
    }
    else {
        return !isTrue ? e.keyCode : String.fromCharCode(e.keyCode);
    }
}


// 获取动态创建的元素
function getTarget(e) {
    return e.target || e.srcElement;
}


// 获取最近的元素
function getRelatedTarget(e) {
    if (e.relatedTarget) {
        return e.relatedTarget;
    }
    else {
        switch (e.type.toLowerCase()) {
            case 'mouseover':
                return e.fromElement;

            case 'mouseout':
                return e.toElement;
        }
    }
}


// 取消传统事件冒泡
function stopPropagation(e) {
    window.event ? event.cancelBubble = true : e.stopPropagation();
}


// 取消事件默认行为
function preventDefault(e) {
    window.event ? event.returnValue = false : e.preventDefault();
}


// URL添加?
function unifyPath(options) {
    options = options || {};
    options.query = location.href.split('?')[1];
    unifyPath.path = options.url || '';
    unifyPath.data = options.data || '';
    if (typeof options.query === 'undefined') {
        history.replaceState(null, null, location.href.split('#')[0] + '?XX' + location.hash);
        unifyPath(options);
    }
    else {
        if (options.query === options.url) {
            options.callback && options.callback(options.url);
        }
    }
}


// 添加一条历史记录
function pushState(json) {
    json = json || {};
    json.url = json.url ? '?' + json.url : '';
    json.data = json.data || {};
    json.title = json.title || null;
    history.pushState(json.data, json.title, json.url);
}


// 点击前进,后退按钮时触发 
function popState(json) {
    json = json || {};
    window.onpopstate = function () {
        if (history.state) {
            json.have && json.have(history.state);
        }
        else {
            json.none && json.none(unifyPath.data, location.href.split('?')[1] === unifyPath.path);
        }
    };
}


// 在数组中查找xxx
function findInArr(arr, val) {
    if (!arr || !arr.length) return false;
    for (var i in arr) {
        if (arr[i] === val) return true;
    }
    return false;
}


// 数组中是否有重复项
function isRepeat(arr) {
    var json = {};
    for (var i in arr) {
        if (json[arr[i]]) return true;
        json[arr[i]] = true;
    }
    return false;
}


// 是不是数字
function isNumber(n) {
    return !(isNaN(n) || isNaN(parseFloat(n)));
}
原文地址:https://www.cnblogs.com/shanchenba/p/5629493.html