zoukankan      html  css  js  c++  java
  • 常用js函数封装

    /**
    * 数组去重
    */
    Array.prototype.Unique = function () {
    return [...new Set(this)];
    }
    /**
    * 数组删除某一项
    * @param {String} let 要删除那一项的值
    */
    Array.prototype.DeleteByVal = function (val) {
    return this.filter(function (item) {
    return item !== val;
    })
    }
    //===============================Date==================================//

    /**
    * 日期格式化
    * @param {String} format default 'yyyy-MM-dd hh:mm:ss' 'yyyy-MM-dd'
    */
    Date.prototype.DateFormat = function (format = 'yyyy-MM-dd hh:mm:ss') {
    let o = {
    "M+": this.getMonth() + 1,
    "d+": this.getDate(),
    "h+": this.getHours(),
    "m+": this.getMinutes(),
    "s+": this.getSeconds(),
    "q+": Math.floor((this.getMonth() + 3) / 3),
    "S": this.getMilliseconds()
    };
    if (/(y+)/.test(format))
    format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (let k in o)
    if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return format;
    }

    /**
    * 获取距离今天的N天的日期 N可正可负
    * @param {Number} interval default 0 -n 表示前几天 n表示后几天
    */
    function getIntervalDate(interval = 0) {
    interval = Number(interval)
    let currentDate = new Date();
    currentDate.setDate(currentDate.getDate() + interval);
    let year = currentDate.getFullYear();
    let month = (currentDate.getMonth() + 1) < 10 ? "0" + (currentDate.getMonth() + 1) : (currentDate.getMonth() + 1);
    let day = currentDate.getDate() < 10 ? "0" + currentDate.getDate() : currentDate.getDate();
    return year + "-" + month + "-" + day;
    }

    /**
    * 时间戳格式化为日期格式
    * @param {Number} timestamp 时间戳
    * @param {String} format default 'yyyy-MM-dd hh:mm:ss' 'yyyy-MM-dd'
    */
    function timestampToDate(timestamp, format = 'yyyy-MM-dd hh:mm:ss') {
    return new Date(parseInt(timestamp) * 1000).DateFormat(format);
    }

    //===============================Object==================================//
    /**
    * 克隆对象
    * @param {Object} source
    */
    function Clone(source) {
    return JSON.parse(JSON.stringify(source))
    }




    /**
    * 设置样式
    * @param {HTMLElement} elem 需要设置的节点
    * @param {Object} prop CSS属性,键值对象
    */
    function setStyle(elem, prop) {
    if (!elem) {
    return false
    };
    for (let i in prop) {
    elem.style[i] = prop[i];
    }
    };
    /**
    * 获取节点css属性
    * @param {HTMLElement} elem 需要获取的节点
    * @param {String} name css属性
    * @return {String} 属性值
    */
    function getStyle(elem, name) { // 获取CSS属性函数
    if (elem.style[name] != '') return elem.style[name];
    if (!!window.ActiveXObject) return elem.currentStyle[name];
    return document.defaultView.getComputedStyle(elem, "").getPropertyValue(name.replace(/([A-Z])/g, "-$1").toLowerCase());
    }

    /**
    * 获取鼠标光标相对于整个页面的位置
    * @return {String} 值
    */
    function getX(e) {
    e = e || window.event;
    let _left = document.documentElement.scrollLeft || document.body.scrollLeft;
    return e.pageX || e.clientX + _left;
    }

    function getY(e) {
    e = e || window.event;
    let _top = document.documentElement.scrollTop || document.body.scrollTop;
    return e.pageY || e.clientY + _top;
    }

    /**
    * 获取class命名的节点
    * @param {String} className CSS命名
    * @param {String} tag 标签名称/去全部标签时用 *
    * @param {HTMLElement} parent 查找的范围,通常为包含内容的父节点
    * @return {Array} 返回筛选节点的数组集合
    */
    function getElementsByClassName(className, tag, parent) {
    parent = parent || document;
    tag = tag || "*";
    let allTags = (tag === "*" && parent.all) ? parent.all : parent.getElementsByTagName(tag);
    let classElems = [];
    className = className.replace(/-/g, "\-");
    let regex = new RegExp("(^|\s)" + className + "(\s|$)");
    for (let i = 0; i < allTags.length; i++) {
    elem = allTags[i];
    if (regex.test(elem.className)) {
    classElems.push(elem);
    };
    };
    return classElems;
    };

    /**
    * 为目标元素添加事件监听器
    * @method on||addEvent
    * @static
    * @param {HTMLElement} elem 目标元素
    * @param {String} type 事件名称 如:click|mouseover
    * @param {Function} listener 需要添加的监听器
    * @return 返回操作的元素节点
    */
    function on(elem, type, listener) {
    type = type.replace(/^on/i, '').toLowerCase();
    let realListener = listener;
    // 事件监听器挂载
    if (elem.addEventListener) {
    elem.addEventListener(type, realListener, false);
    } else if (elem.attachEvent) {
    elem.attachEvent('on' + type, realListener);
    }
    return elem;
    };

    let EventHandle = {
    addEvent:function(ele,type,handle){
    if(ele.addEventListener){
    ele.addEventListener(type,handle,false);
    }else if(ele.attachEvent){
    ele.attachEvent("on"+type,handle);
    }else{
    ele["on"+type] = handle;
    }
    },
    deleteEvent:function(ele,type,handle){
    if(ele.removeEventListener){
    ele.removeEventListener(type,handle,false);
    }else if(ele.detachEvent){
    ele.detachEvent("on"+type,handle);
    }else{
    ele["on"+type] = null;
    }
    }
    }


    /**
    * 千分位显示 常用于价格
    * @param {Number} num
    */
    function toThousands(num) {
    return parseFloat(num).toFixed(2).replace(/(d{1,3})(?=(d{3})+(?:.))/g, "$1,");
    }
    console.log(toThousands(252121321.25))


    /**
    * 动态加载 CSS 样式文件
    */
    function LoadStyle(url) {
    try {
    document.createStyleSheet(url);
    } catch (e) {
    let cssLink = document.createElement('link');
    cssLink.rel = 'stylesheet';
    cssLink.type = 'text/css';
    cssLink.href = url;
    let head = document.getElementsByTagName('head')[0];
    head.appendChild(cssLink);
    }
    }


    /**
    * 返回浏览器版本
    */

    function getExplorerInfo() {
    let explorer = window.navigator.userAgent.toLowerCase();
    // ie
    if (explorer.indexOf("msie") >= 0) {
    let ver = explorer.match(/msie ([d.]+)/)[1];
    return {
    type: "IE",
    version: ver
    };
    }
    // firefox
    else if (explorer.indexOf("firefox") >= 0) {
    let ver = explorer.match(/firefox/([d.]+)/)[1];
    return {
    type: "Firefox",
    version: ver
    };
    }
    // Chrome
    else if (explorer.indexOf("chrome") >= 0) {
    let ver = explorer.match(/chrome/([d.]+)/)[1];
    return {
    type: "Chrome",
    version: ver
    };
    }
    // Opera
    else if (explorer.indexOf("opera") >= 0) {
    let ver = explorer.match(/opera.([d.]+)/)[1];
    return {
    type: "Opera",
    version: ver
    };
    }
    // Safari
    else if (explorer.indexOf("Safari") >= 0) {
    let ver = explorer.match(/version/([d.]+)/)[1];
    return {
    type: "Safari",
    version: ver
    };
    }
    }


    /**
    * 判断是否移动设备
    */
    function isMobile() {
    if (typeof this._isMobile === 'boolean') {
    return this._isMobile;
    }
    let screenWidth = this.getScreenWidth();
    let fixViewPortsExperiment = rendererModel.runningExperiments.FixViewport ||
    rendererModel.runningExperiments.fixviewport;
    let fixViewPortsExperimentRunning = fixViewPortsExperiment &&
    (fixViewPortsExperiment.toLowerCase() === "new");
    if (!fixViewPortsExperiment) {
    if (!this.isAppleMobileDevice()) {
    screenWidth = screenWidth / window.devicePixelRatio;
    }
    }
    let isMobileScreenSize = screenWidth < 600;
    let isMobileUserAgent = false;
    this._isMobile = isMobileScreenSize && this.isTouchScreen();
    return this._isMobile;
    }



    /**
    * 判断是否移动设备访问
    */
    function isMobileUserAgent() {
    return (/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i
    .test(window.navigator.userAgent.toLowerCase()));
    }


    /**
    * 判断是否苹果移动设备访问
    */
    function isAppleMobileDevice() {
    return (/iphone|ipod|ipad|Macintosh/i.test(navigator.userAgent
    .toLowerCase()));
    }

    /**
    * 判断是否安卓移动设备访问
    */
    function isAndroidMobileDevice() {
    return (/android/i.test(navigator.userAgent.toLowerCase()));
    }

    /**
    * 判断是否Touch屏幕
    */
    function isTouchScreen() {
    return (('ontouchstart' in window) || window.DocumentTouch &&
    document instanceof DocumentTouch);
    }

    /**
    * 判断是否在安卓上的谷歌浏览器
    */
    function isNewChromeOnAndroid() {
    if (isAndroidMobileDevice()) {
    let userAgent = navigator.userAgent.toLowerCase();
    if ((/chrome/i.test(userAgent))) {
    let parts = userAgent.split('chrome/');

    let fullVersionString = parts[1].split(" ")[0];
    let versionString = fullVersionString.split('.')[0];
    let version = parseInt(versionString);

    if (version >= 27) {
    return true;
    }
    }
    }
    return false;
    }


    /**
    * 获取页面高度
    */
    function getPageHeight() {
    let g = document,
    a = g.body,
    f = g.documentElement,
    d = g.compatMode == "BackCompat" ?
    a :
    g.documentElement;
    return Math.max(f.scrollHeight, a.scrollHeight, d.clientHeight);
    }

    /**
    * 获取页面scrollLeft
    */
    function getPageScrollLeft() {
    return document.documentElement.scrollLeft || document.body.scrollLeft;
    }


    /**
    * 获取页面宽度
    */
    function getPageWidth() {
    let g = document,
    a = g.body,
    f = g.documentElement,
    d = g.compatMode == "BackCompat" ?
    a :
    g.documentElement;
    return Math.max(f.scrollWidth, a.scrollWidth, d.clientWidth);
    }

    /**
    * 获取页面scrollTop
    */
    function getPageScrollTop() {
    return document.documentElement.scrollTop || document.body.scrollTop;
    }

    /**
    * 获取页面可视高度
    */
    function getPageViewHeight() {
    let d = document,
    a = d.compatMode == "BackCompat" ?
    d.body :
    d.documentElement;
    return a.clientHeight;
    }


    function MouseWheelHandle (obj,handle){
    let info = navigator.userAgent;
    let down = null;
    if(info.indexOf("Firefox") !=-1){
    obj.addEventListener("DOMMouseScroll",function(event){
    let ev = event ||window.event;
    if(ev.detail>0){
    down = true;
    }else{
    down = false;
    }
    handle(down,ev);
    handle.apply(obj,[down,ev]);
    },false);
    }else{
    obj.onmousewheel = function(event){
    let ev = event || window.event;
    if(ev.wheelDelta >0){
    down =false;
    }else{
    down = true;
    }
    handle(down,ev);
    handle.apply(obj,[down,ev]);
    handle.call(obj,down,ev);
    }
    }
    }

  • 相关阅读:
    【算法总结】多项式相关
    【算法总结】积性函数相关
    【算法总结】概率与期望相关
    【算法总结】博弈论相关
    【算法总结】线性代数相关
    【算法总结】根号算法相关
    【算法总结】计算几何相关
    【算法总结】组合数学相关
    【算法总结】字符串相关
    【算法总结】数论相关
  • 原文地址:https://www.cnblogs.com/ttjm/p/9228105.html
Copyright © 2011-2022 走看看