标签: js

判断ie11的js方法

if (Object.hasOwnProperty.call(window, "ActiveXObject") && !window.ActiveXObject) {
    // is IE11}



var ua = window.navigator.userAgent;var versionSplit = /[\/\.]/i;var versionRe = /(Version)\/([\w.\/]+)/i; // match for browser versionvar operaRe = /(Opera|OPR)[\/ ]([\w.\/]+)/i;var ieRe = /(?:(MSIE) |(Trident)\/.+rv:)([\w.]+)/i; // must not contain 'Opera'var match = ua.match(operaRe) || ua.match(ieRe);if (!match) {
    return false;}if (Array.prototype.filter) {
    match = match.filter(function(item) {
        return (item != null);
    });} else {
    // Hello, IE8!
    for (var j = 0; j < match.length; j++) {
        var matchGroup = match[j];
        if (matchGroup == null || matchGroup == '') {
            match.splice(j, 1);
            j--;
        }
    }}var name = match[1].replace('Trident', 'MSIE').replace('OPR', 'Opera');var versionMatch = ua.match(versionRe) || match;var version = versionMatch[2].split(versionSplit);


2种方法


很全面的javascript思维导图

   

阅读详细 »


js生成二维码实例(真实有效)

废话少说先看下实例!!:

用力点击

首先说下引用下这个脚本

http://www.luqidong.com/demo/qrcode/js/qrcode.js


然后调用方法

        var qrcode = new QRCode(elem, {
            width : 96,//设置宽高
            height : 96
        });
        qrcode.makeCode("http://www.78oa.com");

如果想要在二维码中间设置一个图片只要设置下图片position: absolute; 自己设置定位即可。

也可以自己看那个demo页面的源码。

网上很多都是复制来复制去的没意思,也不管有没有用。这个是真实有效。


node安装了express但是express命令解决方案

 

之所以出来无法找到express命令的情况是因为express已经更新了。先安装node,然后用express install -g express 已经没用了,正确的做法是卸载原先安装的express: npm uninstall -g express。然后使用$ npm install -g express-generator 来安装。

阅读详细 »


论移动站点点击事件的实现

由于移动站使用click的话会出现延迟一般都是用touchstart和touchend2个方法来实现模拟touch站的点击事件。 1.touchstart:在这个dom(或冒泡到这个dom,这当然是废话)上手指触摸开始即能触发
2.click:在这个dom(或冒泡到这个dom,这当然是废话)上手指触摸开始,且手指未曾在屏幕上移动(某些浏览器允许移动一个非常小的位移值),且在这个在这个dom上手指离开屏幕,且触摸和离开屏幕之间的间隔时间较短(某些浏览器不检测间隔时间,也会触发click)才能触发
于是我们可以看到,完全用touchstart代替是不太可取的。 下面在看下这张图 这里介绍了点击移动用移动站的方法,我们用touchstart和touchedn中间的时间间隔和移动的位置判断是否是点击,也就是说如果touchstart与touchend之间的间隔小于大概200ms那么久可以认为是点击,这样的话是比click快的。于是我们就写这样的方法来模拟click事件:
var d1,d2;     document.getElementById("imgcode").addEventListener('touchstart',function(){         d1=new Date().getTime();     })     document.getElementById("imgcode").addEventListener('touchend',function(){         d2=new Date().getTime();     if(d2-d1<=200){         document.getElementById("imgcode").src="/membership/GetValidateCode.html? v="+Math.random()*1000;       }     })

我这边是用touchstart与touchend替换click时间点击更换验证码的方法。

 

   

仿app客户端右侧滑动特效

先看demo

谷歌浏览器F12 开启移动调试模式

然后打开地址

http://www.luqidong.com/demo/demo/left.html

源码自己看


js获取cookies键值

我们在设置cookies的时候不可能简简单单设置一个值里面肯定还包含其他的,比如用&分割开例如下面的值

refid=23424&sefrom=baidu&refhlf=www.78oa.com

这样的话我们向取到这个cookies里面值里面的refid的值就不知道怎么弄了,下面有个方法可以:

function getsecCookie(val1, val2) {
    var a = null;
    if (!$.cookie(val1)) {
        return;
    }
    var arrcookies = $.cookie(val1).split("&");
    for (var i = 0; i < arrcookies.length; i++) {
        if (arrcookies[i].indexOf(val2) > -1) {
            a = arrcookies[i].substring(val2.length + 1);
        }
    }
    return a;
}
val1 是cookies的名称,val2是要取val1里面值得key
比如我要取 CNSEInfo 里面的refid 就可以这样
getsecCookie("CNSEInfo","refid")
这里用jq的cookies插件。

78oa编辑所撰。


常用js扩展方法

<code lang="javascript" line="1">
//自动和当前域名一致
apiHost = "http://" + getHost(location.href) + "/";
try {
    if (typeof (appPath) == 'undefined') {
        appPath = "/";
    }
} catch (e) {
}

/*************JS扩展方法*****************/
String.prototype.TrimEnd = function (v)//去除字符串结尾指定字符
{
    if (this.substring(this.length - 1, this.length) == v) {
        return this.substring(0, this.length - 1);
    }
    else {
        return this;
    }
}
String.prototype.Trim = function ()   //去除字符串前后空格
{
    return this.replace(/(^[\s]*)|([\s]*$)/g, "");
}
String.prototype.LenCH = function () {
    return this.replace(/[^\x00-\xff]/g, "xx").length;
}

String.prototype.IsNaN = function () {//是否是数字
    var filter = /^\d+$/;
    return filter.test(this);
}
String.prototype.IsPhone = function () {
    var filter = /^1[3|4|5|8][0-9]\d{4,8}$/;
    return filter.test(this);
}
String.prototype.IsEmail = function () {
    var filter = /^(?:\w+\.?)*\w+@(?:\w+\.)+\w+$/;
    return filter.test(this);
}
String.prototype.IsNullOrEmpty = function () {
    if (typeof (this) == "undefined") {
        return true;
    }
    else if (this.length == 0) {
        return true;
    }
    return false;
}

Date.prototype.format = function (format) {
    var o = {
        "M+": this.getMonth() + 1, //month
        "d+": this.getDate(), //day
        "h+": this.getHours(), //hour
        "m+": this.getMinutes(), //minute
        "s+": this.getSeconds(), //second
        "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
        "S": this.getMilliseconds() //millisecond
    }
    if (/(y+)/.test(format))
        format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var 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;
}

String.prototype.IsTelephone = function () {
    var filter = /^0[0-9]{2,3}-[2-9][0-9]{7}(-[0-9]{1,4})?$/
    return filter.test(this);
}
String.prototype.IsQQ = function () {
    var filter = /^[1-9][0-9]{4,12}$/;
    return filter.test(this);
}


/*****************共用方法*******************/
function getHost(url) {
    var host = "null";
    if (typeof url == "undefined" || null == url) {
        return host;
    }
    var regex = /.*\:\/\/([^\/]*).*/;
    if (url.indexOf("://") == -1) {
        url = "http://" + url;
    }
    var match = url.match(regex);
    if (typeof match != "undefined" && null != match) {
        host = match[1];
    }
    return host;
}
function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds) {
            break;
        }
    }
}
/*******************JQuery扩展************************/

var apiAjax = {
    parseParam: function (param) {
        var res = { url: '', data: '' };
        //创建url
        if (param.action.indexOf("Login") != -1 || param.action.indexOf("Support") != -1) {
            param.action = "inner." + param.action;
        }
        if (param.action.indexOf("Guest") != -1) {
            param.action = "out." + param.action;
        }

        res.url = apiHost + "/" + param.action.split('.').join('/');

        //创建表单数据
        var paramsArr = new Array();

        if (typeof (param.data) == "object") {
            for (var p in param.data) {

                var pvalue = param.data[p];

                if (jQuery.isFunction(pvalue)) {
                    continue;
                }

                if (typeof (pvalue) != "object") {
                    //var val = typeof (pvalue) == "string" ? pvalue.replace(/\+/g, "%2B").replace(/\&/g, "%26").replace(/\</g, " ").Trim().replace(/\>/g, " ").Trim() : pvalue;
                    var val = typeof (pvalue) == "string" ? encodeURIComponent(pvalue.Trim()) : pvalue;
                    paramsArr.push(p + "=" + val);
                }
                else {
                    for (var arrValue in pvalue) {
                        var v = pvalue[arrValue];
                        if (jQuery.isFunction(v)) {
                            continue;
                        }
                        //var val = typeof (pvalue) == "string" ? v.replace(/\+/g, "%2B").replace(/\&/g, "%26").trim().replace(/\</g, " ").trim().replace(/\>/g, " ").trim() : v;
                        var val = typeof (pvalue) == "string" ? encodeURIComponent(v.Trim()) : v;

                        paramsArr.push(p + "=" + val);
                    }
                }
            }
        }

        var token = $.cookie('MarketingLiveChatUserToken') + "";

        //设置token
        paramsArr.push("____token=" + token);
        ////设置时间戳
        res.data = paramsArr.join('&');

        if (typeof (param.data) != "object") {
            res.data += '&' + param.data;
        }
        return res;
    },
    sendAjax: function (param, type, dataType, _success) {

        param = this.parseParam(param);
        if (type == null) {
            type = "POST";
        }

        var ajaxParam = {
            type: type,
            url: param.url,
            data: param.data,
            timeout: 120 * 1000
        };

        if (dataType == null) {
            ajaxParam.dataType = "json";
        }
        else {
            ajaxParam.dataType = "text";
        }


        ajaxParam.success = function (res) {

            if (ajaxParam.dataType == "json") {
                if (!res.Success) {
                    if (res.Code == 1) {
                        //alert("系统错误");
                        return;
                    }
                    if (res.Code == 2) {
                        alert(res.Msg);
                        window.parent.window.parent.window.parent.location.href = appPath;
                        return;
                    }
                }
            }

            if (_success) {
                _success(res);
            }

        }
        ajaxParam.error = function (jqXHR, textStatus, errorThrown) {
            if (textStatus == "parsererror") {
                alert("数据结果转换错误");
            }
            if (textStatus == "timeout") {
                alert("请求超时");
            }
            if (textStatus == "abort") {
                alert("请求中断");
            }
            if (textStatus == "error") {
                // alert("服务器端错误");
            }
        }
        jQuery.ajax(ajaxParam);
    },
    get: function (param, success, dataType) {
        this.sendAjax(param, "get", dataType, success);
    },
    post: function (param, success, dataType) {
        this.sendAjax(param, "post", dataType, success);
    }
};
//表单数据转换
(function ($) {
    $.fn.toObject = function (p) {
        for (var i = 0; i < this.length; i++) {
            var arr = $(this[i]).serializeArray();
            var temp = new Array();
            for (var j = 0; j < arr.length; j++) {
                var name = arr[j].name;
                var item = temp[name];
                if (typeof (item) == 'undefined') {
                    temp[name] = new Array();
                    item = temp[name];
                }
                item.push(arr[j].value);
            }

            var obj = {};
            for (var name in temp) {
                if (temp[name].length == 1) {
                    var info = temp[name][0];
                    info = info.replace(/(\r\n)/g, "★");
                    info = info.replace(/\'/g, "\\'");
                    var fun = "obj." + name + "='" + info + "';";
                    eval(fun);
                }
                else {
                    var _arr = new Array();
                    for (var k = 0; k < temp[name].length; k++) {
                        _arr.push("'" + temp[name][k] + "'");
                    }
                    var arrStr = "[" + _arr.join(',') + "]";
                    var fun = "obj." + name + "=" + arrStr + ";";
                    eval(fun);
                }
            }
            return obj;
        }
    };
    $.fn.bindForm = function (data) {
        $(this).each(function (index, form) {
            form = $(form);
            for (var p in data) {
                var input = $("#" + p, form);
                var val = data[p];
                input.val(val);
            }
        });
    };
    $.fn.bindSelect = function (data, fieldName, valueName, sval) {
        $(this).each(function (index, sel) {
            sel = $(sel).html('');
            for (var i = 0; i < data.length; i++) {
                var obj = data[i];
                sel.append('<option value="' + obj[valueName] + '">' + obj[fieldName] + '</option>');
            }
            if (sval && sval != '') {
                sel.val(sval);
            }
        });
    };
})(jQuery);
/******页面加载方法**********/
var permission = {
    data: [],
    check: function (id) {
        if (permission.data) {
            for (var i = 0; i < permission.data.length; i++) {
                if (permission.data[i] == id) {
                    return true;
                }
            }
            return false;
        } else {
            return false;
        }
    },
    showIfHas: function (s) {
        jQuery(s).each(function () {
            var ex = jQuery(this);
            var id = ex.attr("id");
            if (id) {
                if (permission.check(id)) {
                    ex.show();
                }
            }
        });
    },
    autoShowIfHas: function () {
        $FlashCookie.ready(function () {
            permission.data = new Array();
            $.each($FlashCookie.get("__Button"), function () {
                permission.data.push(this.PowerNameEN);
            });

            if (permission.data) {
                jQuery(".permission").each(function () {
                    var ex = jQuery(this);
                    ex.hide();
                    permission.showIfHas(ex);

                });
            }
        });
    }

};

//加载产品ID
//window.ProductId = $.cookie('__BaseInfo') == null ? 4 : $.evalJSON($.cookie('__BaseInfo')).ProductId;
//window.IsFirst = false;

//$(document).ready(function () {
//    permission.autoShowIfHas();
//});
</code>

[转]扫描二维码登录原理

由于二维码的发展。现在二维码的用处是越来越大了。很多地方都可以见到二维码的影子,比如二维码支付,二维码登录,等。在此之前我们先了解下二维码以下是来自百度百科的解释 :

二维码(Two-dimensional code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。在现代商业活动中,可实现的应用十分广泛,如:产品防伪/溯源、广告推送、网站链接、数据下载、商品交易、定位/导航、电子凭证、车辆管理、信息传递、名片交流、wifi共享等。如今智能手机扫一扫(简称313)功能的应用使得二维码更加普遍。

二维码可以存储信息。通过扫描可以获取二维码上面的信息,获取到之后就可以经过处理加工查询等一些操作。下面是一个二维码扫描登录的例子大致原理如图所示:

78OA办公系统

阅读详细 »


[转]12款响应式的 jQuery 旋转木马(传送带)插件

1. Slick

slick

slick 是一款完全响应式的 jQuery 传送带插件,能够根据容器自动适应宽度。在现代浏览器中会使用 CSS3 来实现特殊效果,可以使用扩展方法对项目进行添加、删除和过滤。提供的特色功能有:鼠标拖动,无限循环,键盘导航等等。

阅读详细 »