Loading

JavaScript代码片段

ajax请求

/*
    ajax 方法
    参数
        url: 请求的资源url
        fnSucc: 当结果返回时调用的方法,参数为结果文本
        fnFaild: 当相应异常时调用的方法,可以不给
*/
function ajax(url, fnSucc, fnFaild){
    var xmlHttp = null;
    // 创建ajax 对象
    if(window.XMLHttpRequest){
        xmlHttp = new XMLHttpRequest();
    }else{
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP") || new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.open('GET', url, true);
    // 发送请求
    xmlHttp.send(null);
    // ajax状态
    xmlHttp.onreadystatechange = function(){
        // 通信完成
        if(xmlHttp.readyState == 4){
            // 是否成功
            if(xmlHttp.status == 200){
                fnSucc(xmlHttp.responseText);
            }else{
                if(fnFaild){
                    fnFaild();
                }
            }
        }
    }
}

获取元素最终样式

/*
    可以获取元素的最终样式
    参数: 
        obj: 元素(Element)
        attr: 属性名
*/
function getStyle(obj, attr){
    if(obj.currentStyle){
        return obj.currentStyle[attr];
    }
    else{
        return getComputedStyle(obj, false)[attr];
    }
}

获取或设置css属性

/*
    设置或返回css属性
    可以连续调用,例: css(div,'width',100)('height',200);
    参数:
        obj: 元素
        attr: 属性名
        value: 要设置的值,无需单位,若不设置不给即可
*/
function css(obj, attr, value){
    // 当参数为两个是返回属性值
    if(arguments.length==2){
        if(attr=="transform"){
            return obj.transform;
        }
        var i=parseFloat(obj.currentStyle?obj.currentStyle[attr]:document.defaultView.getComputedStyle(obj, false)[attr]);
        var val=i?i:0;
        if(attr=="opacity"){
            val*=100;
        }
        return val;
    // 当参数为三个时设置属性
    }else if(arguments.length==3){
        switch(attr){
            case 'width':
            case 'height':
            case 'paddingLeft':
            case 'paddingTop':
            case 'paddingRight':
            case 'paddingBottom':
                value=Math.max(value,0);
            case 'left':
            case 'top':
            case 'marginLeft':
            case 'marginTop':
            case 'marginRight':
            case 'marginBottom':
                obj.style[attr]=value+'px';
                break;
            case 'opacity':
                if(value<0){
                    value=0;
                }
                obj.style.filter="alpha(opacity:"+value+")";
                
                obj.style.opacity=value/100;
                break;
            case 'transform':
                obj.transform=value;
                obj.style["transform"]="rotate("+value+"deg)";
                obj.style["MsTransform"]="rotate("+value+"deg)";
                obj.style["MozTransform"]="rotate("+value+"deg)";
                obj.style["WebkitTransform"]="rotate("+value+"deg)";
                obj.style["OTransform"]="rotate("+value+"deg)";
            break;
            default:
                obj.style[attr]=value;
        }
        return function (attr_in, value_in){
            css(obj, attr_in, value_in)
        };
    }
}

阻止右键菜单

/*
    阻止右键菜单
*/
function stopRightMenu(){
    document.oncontextmenu=function(){
        return false;
    }
}

运动函数

/*
实现div随鼠标拖拽(面对对象的)
            function Drag(id)
        实现div随鼠标拖拽
            function drag(id)
        实现div随鼠标拖拽,限制在窗口内(面对对象)
            function LimitDrag(id)
        元素运动
            function startMove(obj, oTarget, iType, fnCallBack, fnDuring)
        元素停止运动
            function stopMove(obj)
*/



/*
    实现div随鼠标移动实现拖拽效果
    div需指定宽高, position:absolute;
    参数:
        id: div的id
    示例: 
        new Drag('div1');
*/
function Drag(id){
    var _this=this;
    
    this.disX=0;
    this.disY=0;
    this.oDiv=document.getElementById(id);
    // 鼠标在div中按下,调用方法
    this.oDiv.onmousedown=function ()    {
        _this.fnDown();
    };
}
// 鼠标按下时调用的方法
Drag.prototype.fnDown=function (ev){
    var _this=this;
    var oEvent=ev||event;
    // 保存鼠标在div的位置
    this.disX=oEvent.clientX-this.oDiv.offsetLeft;
    this.disY=oEvent.clientY-this.oDiv.offsetTop;
    
    document.onmousemove=function (){
        _this.fnMove();
    };
    
    document.onmouseup=function (){
        _this.fnUp();
    };
    // 阻止默认事件,防止移动过程中会选中内容
    oEvent.preventDefault();
};
// 鼠标移动时调用的方法
Drag.prototype.fnMove=function (ev){
    var oEvent=ev||event;
    // 修改div的位置
    this.oDiv.style.left=oEvent.clientX-this.disX+'px';
    this.oDiv.style.top=oEvent.clientY-this.disY+'px';
};
// 鼠标松开时调用的方法
Drag.prototype.fnUp=function (){
    document.onmousemove=null;
    document.onmouseup=null;
};

/*
    实现div随鼠标移动实现拖拽效果
    div需指定宽高, position:absolute;
    参数:
        id: div的id
    示例: 
        drag('div1');
*/
function drag(id){
    var div = document.getElementById(id);
    div.onmousedown = function(ev){
        var oEvent = ev||event;
        // 板寸鼠标与div的相对位置
        var disX = oEvent.clientX-div.offsetLeft;
        var disY = oEvent.clientY-div.offsetTop;
        // 鼠标移动
        document.onmousemove = function(ev){
            var oEvent = ev||event;
            div.style.left = oEvent.clientX-disX + 'px';
            div.style.top = oEvent.clientY-disY + 'px';
        };
        document.onmouseup = function(){
            document.onmousemove = null;
            document.onmouseup = null;
        }
        oEvent.preventDefault();
    };
    
}





/*
    实现div随鼠标移动实现拖拽效果, 会限制移动范围,防止移出窗口, 继承了 Drag 类
    div需指定宽高, position:absolute;
    参数:
        id: div的id
    示例: 
        new LimitDrag('div1');
*/
function LimitDrag(id){
    Drag.call(this, id);
}

for(var i in Drag.prototype){
    LimitDrag.prototype[i]=Drag.prototype[i];
}
// 重写父类的移动方法,使其不会移出窗口
LimitDrag.prototype.fnMove=function (ev){
    var oEvent=ev||event;
    var l=oEvent.clientX-this.disX;
    var t=oEvent.clientY-this.disY;
    
    if(l<0){
        l=0;
    }
    else if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth){
        l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
    }
    
    if(t<0){
        t=0;
    }
    else if(t>document.documentElement.clientHeight-this.oDiv.offsetHeight){
        t=document.documentElement.clientHeight-this.oDiv.offsetHeight;
    }
    
    this.oDiv.style.left=l+'px';
    this.oDiv.style.top=t+'px';
};



// 定义类型,运动用
var MOVE_TYPE={
    BUFFER: 1,    /*缓冲运动*/
    FLEX: 2            /*温柔的运动,嘿嘿*/
};
/*
    运动的函数,可以自定义元素状态改变方式
    参数: 
        obj: 元素
        oTarget: css参数   {width:300}
        iType: 运动类型 MOVE_TYPE 中的元素, 默认缓冲运动
        fnCallBack: 运动停止时调用的函数, 可以不给
        fnDuring: 运动中调用的函数,即css属性每改变一次就调用, 可以不给
*/
function startMove(obj, oTarget, iType, fnCallBack, fnDuring){
    var fnMove=null;
    if(obj.timer){
        clearInterval(obj.timer);
    }
    
    switch(iType){
        case MOVE_TYPE.BUFFER:
            fnMove=doMoveBuffer;
            break;
        case MOVE_TYPE.FLEX:
            fnMove=doMoveFlex;
            break;
        default: 
            fnMove=doMoveBuffer;
    }
    
    obj.timer=setInterval(function (){
        fnMove(obj, oTarget, fnCallBack, fnDuring);
    }, 30);
}
/*
    停止运动
    参数:
        obj: 运动的元素
*/
function stopMove(obj){
    // 清除定时器
    clearInterval(obj.timer);
}
// 缓冲运动函数
function doMoveBuffer(obj, oTarget, fnCallBack, fnDuring){
    // 是否停止
    var bStop=true;
    var attr='';
    // 定义速度
    var speed=0;
    var cur=0;
    // 进行运动
    for(attr in oTarget){
        cur=css(obj, attr);
        if(oTarget[attr]!=cur){
            bStop=false;
            
            speed=(oTarget[attr]-cur)/5;
            speed=speed>0?Math.ceil(speed):Math.floor(speed);
            
            css(obj, attr, cur+speed);
        }else{
            bSop=false;
        }
    }
    // 调用运动中函数
    if(fnDuring)fnDuring.call(obj);
    
    if(bStop){
        clearInterval(obj.timer);
        obj.timer=null;
        
        if(fnCallBack)fnCallBack.call(obj);
    }
}
// 温柔的运动函数
function doMoveFlex(obj, oTarget, fnCallBack, fnDuring){
    var bStop=true;
    var attr='';
    // 定义速度
    var speed=0;
    var cur=0;
    
    for(attr in oTarget){
        if(!obj.oSpeed)obj.oSpeed={};
        if(!obj.oSpeed[attr])obj.oSpeed[attr]=0;
        cur=css(obj, attr);
        if(Math.abs(oTarget[attr]-cur)>=1 || Math.abs(obj.oSpeed[attr])>=1){
            bStop=false;
            
            obj.oSpeed[attr]+=(oTarget[attr]-cur)/5;
            obj.oSpeed[attr]*=0.7;
            
            css(obj, attr, cur+obj.oSpeed[attr]);
        }
    }
    
    if(fnDuring)fnDuring.call(obj);
    
    if(bStop){
        clearInterval(obj.timer);
        obj.timer=null;
        
        if(fnCallBack)fnCallBack.call(obj);
    }
}

字符串函数

/*
    去除字符串两边的空格
*/
function delStrSpace(str){
    return str.replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );//正则替换
}

/*
    验证字符串是否为空(会去除两边的空格)
*/
function isNull(str){
    if(!delStrSpace(str)){
        return true;
    }else{
        return false;
    }
}
/*
    关键词高亮显示
    参数:
        e: 元素,如 p标签等
        keys: 关键词数组
        color: 显示的颜色,默认黑色
*/
function keyWordsHighlight(e, keys, color){
    var
        i = 0,
        l = keys.length,//关键词的长度
        k = "";
    for(; i < l ; i++){
        k = keys[i];//获取关键词的对象
        //替换关键词的数据
        e.innerHTML = e.innerHTML.replace(k, "<span style='color:"+ (color || "#000")+"'>" + k + "</span>")
    }
}

时间函数

/*
    返回当前时间字符串(无参或只传一个参数,会使用中文分割)
    参数:
        a: 分割年月日的符号
        b: 分割时分秒的符号
*/
function getNowTimeStr(a, b){
    var date =new Date();//获取日期对象
    
    if(a && b){
        return date.getFullYear() + a
                + (date.getMonth() + 1) + a
                + date.getDate()
                + " "
                + date.getHours() + b
                + date.getMinutes() + b
                + date.getSeconds();
        
    }else{
        /*获取年、月、日、时、分、秒,本地系统的时间*/
        return date.getFullYear() + "年"
                + (date.getMonth() + 1) + "月"
                + date.getDate() + "日"
                + " "
                + date.getHours() + "时"
                + date.getMinutes() + "分"
                + date.getSeconds() + "秒";
    }
    
}

/*
    返回到指定日期还剩多少天,数字
    参数:
        Y: 年(默认0)
        M: 月(默认0)
        D: 日(默认0)
        h: 时(默认0)
        m: 分(默认0)
        s: 秒(默认0)
*/
function getCountDown(Y, M, D, h, m, s){
    Y = Y || 0;
    M = M || 0;
    D = D || 0;
    h = h || 0;
    m = m || 0;
    s = s || 0;
    var date = new Date(Y, M-1, D, h, m, s),
    //转换为时间戳,方便计算差值
    times = date.getTime() - new Date().getTime();
    //返回天数
    return Math.ceil(times / (1000 * 60 * 60 * 24));
}

 

展示toast

    /**
     * 显示toast
     * @param params
     * 设置参数
     * {
     *     'text': '显示内容', str
     *     'time': 显示时间,默认2s, int
     *     'color': 字体颜色,默认白色, str
     *     'background-color': toast背景色,默认黑色,50透明度, str
     *     'is-full': 是否布满屏幕,布满时内容不可点击, 默认布满, bool
     *     'location': 显示位置, top,center,bottom, 默认center, str
     * }
     */
    function toast(params) {
        if(params['text'] == null){
            return;
        }
        // 给参数赋默认值
        params['time'] = params['time'] == null ? 2000 : params['time'] * 1000;
        params['color'] = params['color'] == null ? '#FFFFFF' : params['color'];
        params['background-color'] = params['background-color'] == null ? 'rgba(0,0,0,0.50)' : params['background-color'];
        params['is-full'] = params['is-full'] == null ? true : params['is-full'];
        params['location'] = params['location'] == null ? 'center' : params['location'];
        // 若未添加div, 则添加
        if(document.getElementById('toast_text') == null){
            createToastDiv(params);
        }
        document.getElementById('toast_text').innerHTML = params['text'];
        document.getElementById('toast_pop').style.display = 'block';
        setTimeout(function() {
            document.getElementById('toast_pop').style.display = 'none';
        }, params['time']);
    }

    // 创建toast div并添加到body中
    function createToastDiv(params) {
        var toastPop = document.createElement('div');
        var toastInner = document.createElement('div');
        var toastText = document.createElement('p');

        // 设置各个div的css属性
        // 设置是否需要div布满窗口
        if(params['is-full']){
            toastPop.style.display = 'block';
            toastPop.style.position = 'fixed';
            toastPop.style.width = '100%';
            toastPop.style.top = '0';
            toastPop.style.left = '0';
            toastPop.style.bottom = '0';
            toastPop.style.right = '0';
            toastPop.style.textAlign = 'center';
            toastPop.style.zIndex = '9999';
        }
        toastPop.id = 'toast_pop';
        toastInner.style.position = 'fixed';
        toastInner.style.maxWidth = '100%';
        toastInner.style.left = '50%';
        // 设置div的上中下位置
        if(params['location'] === 'top'){
            toastInner.style.top = '0px';
            toastInner.style.transform = 'translate(-50%,0)';
        }else if(params['location'] === 'bottom'){
            toastInner.style.bottom = '0px';
            toastInner.style.transform = 'translate(-50%,0)';
        }else{
            toastInner.style.top = '50%';
            toastInner.style.transform = 'translate(-50%,-50%)';
        }
        toastInner.style.textAlign = 'center';
        toastText.style.display = 'inline-block';
        toastText.style.padding = '20px 20px';
        toastText.style.fontSize = '3em';
        toastText.style.maxWidth = '90%';
        toastText.style.wordWrap = 'break-word';
        toastText.style.color = params['color'];
        toastText.style.borderRadius = '3ch';
        toastText.style.backgroundColor = params['background-color'];
        toastText.id = 'toast_text';
        // 将元素插入
        toastInner.appendChild(toastText);
        toastPop.appendChild(toastInner);
        window.document.body.appendChild(toastPop);
    }

 

展示input file标签上传的图片

    /**
     * 修改标签的src属性, 使用input file
     * 通常用来展示上传图片
     * @param srcId
     * src展示id
     * @param inputId
     * file input标签id
     */
    function changeInputToSrc(srcId, inputId) {
        document.getElementById(inputId).onchange = function () {
            var preview = document.getElementById(srcId);
            var file    = document.getElementById(inputId).files[0];
            var reader  = new FileReader();
            reader.onloadend = function () {
                preview.src = reader.result;
            };
            if (file) {
                reader.readAsDataURL(file);
            } else {
                preview.src = "";
            }
        };
    }

多选框的全选事件

/**
 * 用户多选框的全选事件
 * @param name
 * input 的name值
 * @param allVal
 * 全选按钮的value
 */
function checkboxCheckAll(name, allVal) {
    var checkbox = "input[name='" + name + "']";
    // 为复选框添加改变时间, 全渠道全选
    $(checkbox).change(function () {
        // 若全渠道选中, 将所有勾选
        if($(this).val() == allVal && $(this).is(':checked')){
            $(checkbox).prop("checked", 'checked');
            // 若全渠道取消选中, 将所有取消勾选
        }else if($(this).val() == allVal && !$(this).is(':checked')){
            $(checkbox).prop("checked", '');
            // 若其他选中, 判断是否全部选中, 若是,将全渠道勾选
        }else if($(this).val() != allVal && $(this).is(':checked')){
            if($(checkbox + ':checked').length >= ($(checkbox).length - 1)){
                $(checkbox).prop("checked", 'checked');
            }
            // 若其他取消选中,判断全渠道是否选中, 若是, 将全渠道取消勾选
        }else if($(this).val() != allVal && !$(this).is(':checked')){
            $(checkbox + "[value='" + allVal + "']").prop("checked", '');
        }
    });
}

 返回随机颜色

/*
    返回一个随机的颜色字符串
*/
function getRandomColor(){
    return '#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');
}

计算现在到未来的指定时间还有多少剩余时间

/*
    返回到指定日期还剩多少天,数字
    参数:
        Y: 年(默认0)
        M: 月(默认0)
        D: 日(默认0)
        h: 时(默认0)
        m: 分(默认0)
        s: 秒(默认0)
*/
function getCountDown(Y, M, D, h, m, s){
    Y = Y || 0;
    M = M || 0;
    D = D || 0;
    h = h || 0;
    m = m || 0;
    s = s || 0;
    var date = new Date(Y, M-1, D, h, m, s),
    //转换为时间戳,方便计算差值
    times = date.getTime() - new Date().getTime();
    //返回天数
    return Math.ceil(times / (1000 * 60 * 60 * 24));
}

 

posted @ 2019-03-31 20:26  烟草的香味  阅读(254)  评论(0编辑  收藏  举报