积累的一个js公共库,封装众多常用的功能,base64和md5,toast等

-

对常用函数的封装,有助于综合运用和认时接口和代码层次,加快项目进度。

一部分功能基于jQ,但是如果html中没有引入jQ的话,该公共js会自动检测并自动引入。

-

代码思路和用法再代码注释和注释调用中已经说明。

你可以试着调用alert_txt("hello", 2000);来查看效果。

-


/*
* create: 2018-06-00 update: 2018-09-18 unicode: UTF-8
* [email protected]
* author: fyonecon
*
* js兼容性:Android 5.0+,iOS 10.3+,IE 10+,主要面向移动设备
* ES6(逻辑) + jQ(dom),但是可以不引入jQ,因为jQ会自动检测并自动引入CDN
*
* 推荐CND:
         
         
*
* VUE.js CDN:
         
         
*
* js、css在线压缩:
*        https://tool.css-js.com
* js加密
*        https://www.sojson.com/jsobfuscator.html
*
* */

/*
* 使用方法:
        1. 直接引用方法函数即可,无Block函数那种繁琐引用;
        2. 注意一些自带的全局变量,避免一些坑;
        3. 场景值可以解决多个或者多次调用同一函数的冲突,注意区分。
*
* common.js函数调用表(主要已列出,次要的未列出):

        common.css自动引入,初始化了一些必要样式

        animated.css自动引入,预增加页面动画

        无刷新更改页面地址,请参照
        http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/js/js_extent_push.js

        批量写入css CDN链接
        var cdn_css = ["", ""];
        add_css(cdn_css)

        字典转数组,return
        dictionary_to_array(input_data)

        扩展js数据类型的判断,return
        js_typeof(input_data)

        图片展示插件
        show_img(img_url, txt, refresh, display_btn)

        获取url的参数的值,return
        getThisUrlParam(url, key)

        单个替换参数url里面的老参数,输出新url,return
        changeUrlParam(url, key, new_value)

        批量替换参数url里面的老参数,输出新url,return
        changeAllUrlParam(str, arr)

        过滤字符串特殊符号,return
        getPureStr(str)

        用于显示[多文字Toast]提示
        alert_txt(txt, time, call_func)

        用于显示[多文字确定]提示
        alert_msg(title, content, btn_txt, this_func)

        设置和更新cookie,return
        setCookie(key, value, expiredays)

        读取cookie,return
        getCookie(key)

        时间戳转日期,return
        timestampToTime(timestamp)

        生成二维码,回调函数返回二维码地址
        make_qr(content, width, call_func)

        求范围内的值[min, max],return
        js_rand(min, max)

        获取当前时间的 日期、星期、时间戳(秒)、时间戳(毫秒),return
        getNowDate()

        时间戳(毫秒)转日期,输入时间统一用秒,然后将毫秒转换成秒,return
        formatDateTime(inputTime)

        浏览器设备运动事件(摇一摇、加速运动等)
        device_motion(call_func, during)

        处理触摸手势
        调用swipe_touch(document.getElementById("test"));开启该区域触摸事件
        使用function touch_data(data){console.log(data);}取出该区域触摸参数

        base64编码解密加密,return
        js_base64_decode(result)
        js_base64_encode(string)

        处理图片
        在img标签中加入class="img-select-cell"即可完成

        md5加密,return
        js_md5(string, toUpperCase, call_func)

        判断是否是微信浏览器的函数
        user_weixin(status, jump_url, call_func, data)

        判断设备类型,Android、iOS、PC
        user_device(device_func, data)

        获取用户的地址和IP,回调函数返回信息数组,return
        user_address(call_func)

        页面刷新次数安全校验,利用cookie
        refresh_check(max_num, common_cookie_pre, jump_url)

        基于jQ的get方法请求
        get_func(get_api_url, call_func)

        基于jQ的post方法请求
        post_func(post_api_url, obj, call_func)

        原生get请求
        get_api(get_api_url, call_func)

        原生Fetch的post方法请求
        post_api(post_api_url, obj, call_func)

        //页面加载的百分比 [0~1],直接调用loading_percent(show_load)将使用默认加载效果
        //loading_percent(show_load)

        遮蔽层的开启和删除
        show_layer(tag, bg_color, z_index)
        delete_layer(tag);

        实现自定义的多次点击
        many_click(_click_num, call_func)
        或者直接调用
        双击 two_click(call_func)
        三击 three_click(call_func)


*
* */

/*
*
* es6+php+oc
*
* */

// 'use strict'; // 暂不开启这个功能

/*
* 处理调试模式
* */
//var common_debug = true; // bool: true时打开调试
if(typeof common_debug === "undefined"){
    console.info("%c"+"'common_debug=false',console默认关闭", "color:blue;font-size:13px;");
    common_debug = false;
}else {
    if (common_debug === true){
        console.info("%c"+"'common_debug=true',console默认打开,unicode: UTF-8,2018-09-04", "color:green;font-size:13px;");
    }else {
        console.info("%c"+"'common_debug=false',console已经关闭", "color:blue;font-size:13px;");
    }
}

var common_debug_num = 1; // 参照
function console_info_func(txt) { // 日志分流
    if(common_debug_num === 1){
        console.info("%c"+txt, "color:grey;font-size:12px;");
        common_debug_num++;
    }else {
        //console.info(common_debug_num);
        common_debug_num++;
    }
}

/*
*  重写日志输出格式
* */
function common_log(txt) { // 日志函数,注意,已经将其他数据类型强制转化成了string
    common_debug === true ? console.info("%c" + txt, "color:#A0A0A0;font-size:12px;") : console_info_func("The common.js is running");
}

/*
* 扩展js框架
* */
const kd_jq = "http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/js/jquery-1.11.3.min.js"   +'?'+time_milli(); // jq框架
const md5_url = "http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/js/md5.js"               +'?'+time_milli(); // 引用md5.js
const common_css = "http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/css/common.css"                        ; // 公共样式
const qr_js= "http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/js/qrcode.js"               +'?'+time_milli(); // js生成二维码库
const js_push = "http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/js/js_extent_push.js"    +'?'+time_milli(); // 无刷新更改页面地址
const souhu_address = "http://pv.sohu.com/cityjson?ie=utf-8";                                              // 搜狐获取用户IP、城市统计
const animated_css = "http://cdnaliyun.oss-cn-hangzhou.aliyuncs.com/css/animate.min.css"                 ; // 动画css3



(function (e) {

    var jq_check_num = 0;
    function run_jq_check(jq_check_num){
        try {
            document.write('');
            document.write('');

            $("body").addClass("jQ-check1");

            common_log("公共js加载正常"+jq_check_num);
            common_log("jQ文件检测正常"+jq_check_num);
            common_log("Cookies启用否: "+navigator.cookieEnabled);
            var kd_jq_num = jq_check_num-1;
            for (let kd_i = 0; kd_i
'); common_log("遮蔽层tag="+_tag+"已经创建,请及时删除(请调用delete_layer(tag))"); } /* * 清除遮蔽层 * tag 标识(指的是要删除哪个或者全部的遮蔽层) * */ function delete_layer(tag) { if (tag === "all"){ _tag = "all"; $(".bg-layer").remove(); }else { !tag ? _tag = 0 : _tag = tag; $(".bg-layer-"+_tag).remove(); } common_log("已经执行删除tag="+_tag+"的删除"); } /* * 404 * */ function jump_404(url) { if (url){ window.location.replace(url); }else { window.location.replace("https://m.sogou.com/404"); } } /* * 基础函数 * 毫秒时间戳 * */ function time_milli() { var timestamp = Date.parse(new Date()); // 000毫秒时间戳 var milli = (new Date()).getMilliseconds(); // 纯毫秒毫秒 var time_milli_res = timestamp + milli; //common_log(time_milli_res); return time_milli_res; } /* * 基础函数 * 字典转数组 * */ function dictionary_to_array(input_data) { // 字典转数组 var new_arr = []; for (let i in input_data) { new_arr.push(input_data[i]); // 取value,不能取到key } //new_arr = Array.from(input_data); // es6 //console.log(new_arr); common_log("字典转数组:"+new_arr); // 已经强制array转string return new_arr; } /* * 基础函数 * js 具体的数据类型判断,输出准确的数据类型 * array dictionary null number string boolean undefined function * */ function js_typeof(input_data) { var this_type = typeof input_data; if (this_type === "object"){ // null {} [] if (input_data === null){ input_data = "null"; that_type = "null"; }else { if(input_data.constructor === Array){ // 数组 that_type = "array for object"; }else if (input_data.constructor === Object){ // 字典类型,或者叫json input_data = dictionary_to_array(input_data); // 字典转数组 that_type = "dictionary(json) for object"; }else if(input_data.constructor === Date){ that_type = "date"; }else { that_type = this_type; } } }else{ // number string boolean undefined function that_type = this_type; } //console.log(input_data); common_log("数据类型:"+that_type+""+";值:"+input_data); return that_type; } /* * 预览单个大图功能:直接引用:show_img(img_url, "", "", "hide") * 可以判断图片地址是空或者404。 * * img_url:图片地址或者图片base64编码 * txt:提示语 * refresh:"refresh" 关闭图片预览时刷新, * display_btn: "hide" 关闭按钮和图层背景不显示 * */ function show_img(img_url, txt, refresh, display_btn){ $("body").append('
结果图'); $(".kd-picture").attr("src", img_url); if(!img_url){ alert_txt("图片地址为空!
无法预览大图", 3000); return; } $(".kd-layer-bg").show(300); $(".kd-picture").show(300).attr("src", img_url); if(!txt){ // 提示语 //alert_txt("长按可以保存图片哦~", 3000); }else{ alert_txt(txt, 3000); } if (display_btn === "hide"){ // 是否展示关闭按钮 $(".kd-close-show_img").remove(); common_log("隐藏了-关闭-按钮"); }else if(display_btn === "show"){ common_log("关闭-按钮默认显示1"); }else { common_log("关闭-按钮默认显示2"); } // 图片高度超过一定范围,操作背景按钮不方便,即显示一个另外的关闭图片按钮 var _img_url = img_url + "?" + Date.parse(new Date()); var img = new Image(); var patt = new RegExp("data:image/"); var res_base = patt.test(_img_url); if(res_base){ // 是base64 common_log("base64:"+res_base); $("body").append('
关闭
'); }else{ // 不是base64 img.src = _img_url; img.onload = function(){ //alert('width:'+img.width+',height:'+img.height); var img_height = (img.height/img.width)*window.innerWidth; // 计算图片的动态高度 common_log(img_height); if(Math.abs(img_height-window.innerHeight) < 60 || img_height-window.innerHeight>=60){ common_log("为特别高度图提供关闭按钮"); $("body").append('
关闭
'); } }; } } // 图片地址无效时 function kd_img_error(){ alert_txt("图片地址无效!图片404", 5000); setTimeout(function(){ kd_layer_bg(); }, 2000); // 抛出图片地址 common_log("图片404地址:"+$(".kd-picture").attr("src")); } // 删除图片预览节点 function kd_layer_bg(refresh){ $(".kd-layer-bg").remove(); $(".kd-picture").remove(); $(".kd-close-show_img").remove(); if(refresh === "refresh"){ window.location.reload(); }else if(!refresh){ //common_log("关闭图层不刷新页面"); return; }else{ //common_log("关闭图层不刷新页面"); return; } common_log("处理了图片浏览图层节点"); } /* * return * js获取 url后的参数值,如果存在键,则返回键的值,如果不存在则返回null * string key: 键名,调用getUrlParam("sex")则返回0 * */ function getThisUrlParam(url, key) { // 返回值 // 兼容模式url地址,例如:poop.html?page=3&ok=222#p=2#name=kd var url_str = ""; if(!url){ url_str = window.location.href; }else { url_str = url; } // 正则匹配url中的参数,如果存在键,则返回键的值,如果不存在则返回null var regExp = new RegExp("([?]|&|#)" + key + "=([^&|^#]*)(&|$|#)"); var result = url_str.match(regExp); if (result) { return decodeURIComponent(result[2]); // 转义还原参数 } else { return null; // 没有匹配的键即返回null } } /* * return * 单个替换参数url里面的老参数,输出新url * string url:网址或取他 * string key:键 * string new_value:新值 * */ function changeUrlParam(url, key, new_value) { // 返回新url var url_str = url; var regExp = new RegExp("([?]|&|#)" + key + "=([^&|^#]*)(&|$|#)"); var result = url_str.match(regExp); if (result) { var old_value = decodeURIComponent(result[2]); var old_str = key+"="+old_value; url_str = url_str.replace(new RegExp(old_str, "g"), key+"="+new_value); // 全局替换 common_log("单个替换结果="+url_str); return url_str; } else { common_log("'"+url_str+"'中没有匹配到key="+key+",new_value="+new_value); return url; // 没有匹配的键即返回原始url } } /* * return * 批量替换参数url里面的老参数,输出新url * string str:网址或取他 * array arr: [[键, 新值], [key, new_value], [key, new_value]]; * * */ function changeAllUrlParam(str, arr) { // 返回新被替换过的url common_log("批量替换url中的键的值"); var url_str = str; var old_str = str; var array = arr; common_log(array); if(arr.length<=0 && typeof arr !== "object"){ common_log("arr参数错误:"+typeof arr+"=="+arr); return "arr is null"; } for(let kd= 0; kd
 
'); if (!time){ time = 4000; } if(time === "long"){ // 超长时间提示 time = 1000*60*30; long_time = setTimeout(function () { // 定时执行,但是微信环境中,链接可能会被封杀,所以暂时没有回调 common_log("alert_txt()时间设置超时>'long 1000*60*30',但是并没有设置超时时的回调函数"); }, time); } if(time >= 1000*60*25){ var time_self = 1000*60*30; long_time_self = setTimeout(function () { // 定时执行,但是微信环境中,链接可能会被封杀,所以暂时没有回调 common_log("alert_txt()时间设置超时>1000*60*30,但是并没有设置超时时的回调函数"); }, time_self); } if ( txt.trim() === ""){ // 扔出错误 clearTimeout(kd_ST); alert_txt("系统报错:txt文字为空
txt is null", 5000); return; } setTimeout(function () { $(".kd-toast-txt").html(txt); //document.getElementById("kd-toast-txt").innerHTML = txt; },80); kd_ST = setTimeout(function () { $(".kd-alert-txt").fadeOut(700).remove(); $(".kd-alert-bg").remove(); //_div.remove(); }, time); if(call_func){ call_func(); // 直接异步调用 }else { common_log("alert_txt()没有设置回调函数"); } } // cookie前缀 var cookie_pre = "le_"; // 示例:expiredays = 30 * 24 * 60 * 60 * 1000,30天 // 设置和更新cookie // function setCookie(key, value, expiredays){ // common_log("设置或更新cookie="+key+"="+value); // var exdate=new Date(); // exdate.setDate(exdate.getDate()+expiredays); // document.cookie=key+ "=" +escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); // } // // 读取cookie // function getCookie(key){ // common_log("读取cookie="+key); // if (document.cookie.length>0) { // c_start=document.cookie.indexOf(key + "="); // if (c_start!==-1){ // c_start=c_start + key.length+1; // c_end=document.cookie.indexOf(";",c_start); // if (c_end===-1) c_end=document.cookie.length; // return unescape(document.cookie.substring(c_start,c_end)); // } // } // return ""; // } //写入cookies // time = 1*24*60*60*1000; function setCookie(name, value, time) { if (!time){ time = 1*24*60*60*1000; // 默认1天 } var exp = new Date(); exp.setTime(exp.getTime() + time); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } //读取cookies function getCookie(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)){ return unescape(arr[2]); } else{ return null; } } //删除cookies function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null) { document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); } } // 时间戳转日期 function timestampToTime(timestamp) { var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 Y = date.getFullYear() + '-'; M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; D = date.getDate() + ' '; h = date.getHours() + ':'; m = date.getMinutes() + ':'; s = date.getSeconds(); return Y+M+D+h+m+s; } // 生成二维码,回调函数返回二维码地址,必要文件qrcode.js function make_qr(content, width, call_func) { var _width = 200; if (!width){ common_log("make_qr()没有设置宽,将默认200px"); }else { _width = width; } if (!content){ alert_txt("没有设置二维码内容"); } var _height = _width; $.getScript(qr_js, function (e) { common_log("生成二维码"); // 生成二维码 // 二维码图位置 $("body").append(''); var qrcode = new QRCode("qrcode", { text: content, width: _width, height: _height, colorDark : "#000000", colorLight : '#ffffff', correctLevel : QRCode.CorrectLevel.L }); var qr_img_url = $(".qr-img").attr("src"); if (!call_func){ common_log("make_qr()无回调函数"); }else { call_func(qr_img_url); } }); } /* * 求范围内的值, */ function js_rand(min, max) { // [min, max] var this_rand = Math.floor(Math.random()*(max-min+1)+min); common_log("范围内的随机值="+this_rand); return this_rand; } /* * 将各个位数数字单独取出,范围[百亿--百分位] */ function select_number(number) { var _number = []; if (typeof number === "number"){ // 正则方法 // var num = 123456; // var numArr = num.split(''); // //个位 // var a = numArr[numArr.length-1]; // //十位 // var b = numArr[numArr.length-2]; // //百位 // var c = numArr[numArr.length-3]; // //...以此类推 var _eleven = Math.floor(number/10000000000 % 10); // 百亿 var _ten = Math.floor(number/1000000000 % 10); // 十亿 var _nine = Math.floor(number/100000000 % 10); // 亿 var _eight = Math.floor(number/10000000 % 10); // 千万 var _seven = Math.floor(number/1000000 % 10); // 百万 var _six = Math.floor(number/100000 % 10); // 十万 var _five = Math.floor(number/10000 % 10); // 万 var _four = Math.floor(number/1000 % 10); // 千 var _three = Math.floor(number/100 % 10); // 百 var _two = Math.floor(number/10 % 10); // 十 var _one = Math.floor(number % 10); // 个 var __one = Math.floor(number/0.1 % 10); // 十分位 var __two = Math.floor(number/0.01 % 10); // 百分位 _number = [number,_eleven,_ten,_nine,_eight,_seven,_six,_five,_four,_three,_two,_one,__one,__two]; common_log("范围[原数0-百亿1-个位11-百分位13]=="+_number+"=="+typeof _number+"==示例:个位[11]="+_number[11]); return _number; }else { common_log(typeof number); _number = [number,0,0,0,0,0,0,0,0,0,0,0,0,0]; common_log("数据类型错误,不可解析,各个位默认返回=="+_number); return _number; } } /* * * num 要匹配的数 * dot 是否循环出小数点后dot位,dot=2取到个位,dot=1取到十分位,dot=0取到百分位 * * */ function select_num(num, dot) { var num_array = select_number(num); if ( dot>2 || dot<0){ // dot取值异常时 common_log("取小数点位数异常,dot范围:[0,2]"); return; }else if(typeof dot !== "number"){ common_log("将默认低位取到个位,dot=2"); dot = 2; } var j_num_max = 0; for (let j=0;j= 1 && month <= 9) { month = "0" + month; } if (day >= 0 && day <= 9) { day = "0" + day; } if (hour >= 0 && hour <= 9) { hour = "0" + hour; } if (minutes >= 0 && minutes <= 9) { minutes = "0" + minutes; } if (seconds >= 0 && seconds <= 9) { seconds = "0" + seconds; } var currentdate = [year + sign1 + month + sign1 + day, hour + sign2 + minutes + sign2 + seconds, week, timestamp, time_milli()]; common_log("当前时间[日期、星期、时间戳(秒)]数组:"+currentdate); return currentdate; } /* * 时间戳(毫秒)转日期,输入时间统一用秒,然后将毫秒转换成秒 * */ function formatDateTime(inputTime) { var s_time = inputTime*1000; var number = new Number(s_time); // 数字转字符串,以便计算长度 if (number.toString().length < 10 || number.toString().length > 14){ common_log("输入时间戳单位为秒,特此提醒。当前数字长度:"+number.toString().length); } var date = new Date(s_time); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h = h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); var second = date.getSeconds(); minute = minute < 10 ? ('0' + minute) : minute; second = second < 10 ? ('0' + second) : second; var currentdate = [y+'-'+m+'-'+d, h+':'+minute+':'+second]; common_log("时间戳 转 日期数组:"+currentdate); return currentdate; } /* * * 浏览器设备运动事件(摇一摇、加速运动等) * 浏览器兼容性:Android(全)、iOS(全)运行正常 * 文档:https://developer.mozilla.org/zh-CN/docs/Web/API/DeviceMotionEvent * * call_func 回调函数,此回调函数不能携带参数,提前写带参数会造成device函数不能运行 * during 范围[20ms, 3000ms] 。设置默认时间段内回调一次,单位xx ms/次,默认500ms。 * * 例:function kd_func() { // 回调函数 common_log("123"); alert_txt("123"); } device_motion(kd_func, 500); // 调用主函数 * * */ var SHAKE_THRESHOLD = 1000; // 默认动作时间差 var last_update = 0; var last_time = 0; var x; var y; var z; var last_x; var last_y; var last_z; var curTime; var isShakeble = true; // 调试 function device_motion(call_func, during) { if(!during){ during = 500; }else if(during<20){ during = 20; }else if(during>3000){ during = 3000; } var first_time = new Date().getTime(); if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', function (ev) { curTime = new Date().getTime(); var diffTime = curTime - last_update; if (diffTime > 100) { var acceleration = ev.accelerationIncludingGravity; last_update = curTime; x = acceleration.x; y = acceleration.y; z = acceleration.z; var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; if (speed > SHAKE_THRESHOLD && curTime - last_time > 1100 && isShakeble) { common_log("该设备有加速事件,开始执行回调函数"); // 处理回调函数 if(call_func){ var cur_time = new Date().getTime(); if(Math.abs(first_time-cur_time) >= during){ common_log("调用了回调函数"); first_time = new Date().getTime(); // 初始化 call_func(); // 调用函数。此回调函数不能携带参数,提前写带参数会造成device函数不能运行 }else { common_log("由于时间段限制,跳过了回调函数"); } }else { common_log("该设备加速有效,但是没有指定回调函数。"); } } last_x = x; last_y = y; last_z = z; } }, false); common_log("该设备支持位置和方向改变的速度,下一步,请让设备(浏览器)加速运动(摇一下设备)起来。"); } else { common_log("该设备(浏览器)不支持运动属性"); alert_txt("该设备(浏览器)不支持加速运动属性"); } } /* * msg_func_ok(函数操作标识),需要coder使用时拿出来 * msg_func_close(函数操作标识),不需要自定义 * alert_msg(标题,内容描述或其它标签内容,按钮文字,函数操作标识[多个msg时区分各自操作]),不需要自定义 * 注意:this_func参数指的是标识数字或者标识字符串,并不是函数 * */ /* function msg_func_ok(this_func) { // msg确定按钮 ,示例 common_log("msg_ok标识="+this_func); switch(this_func){ case 1: run_test1(); break; case 8: run_test8(); break; default: common_log("发现未知操作标识="+this_func); } } function msg_func_close_call(this_func){ common_log("关闭msg的回调函数,如果没有,报错可以忽略。"); } */ function msg_func_close(this_func) { // 关闭msg提示 common_log("msg_close标识="+this_func); $(".kd-alert-msg-div-"+this_func).remove(); $(".kd-alert-msg-bg-"+this_func).remove(); msg_func_close_call(this_func); } function alert_msg(title, content, btn_txt, this_func) { // 渲染msg // 校验msg_func_ok()函数方法是否存在,因为这个是自定义函数 try { if(typeof msg_func_ok === "function") { //是函数 ,其中 msg_func_ok 为函数名称 common_log("msg_func_ok(this_func)函数方法存在"); } else { //不是函数 common_log("msg_func_ok(this_func)函数方法不存在,将无法完成msg_func_ok按钮的调用"); //alert_txt("msg_func_ok(this_func)函数方法不存在,将无法完成msg_func_ok按钮的调用"); } if(typeof msg_func_close_call === "function") { //是函数 ,其中 msg_func_ok 为函数名称 common_log("msg_func_close_call(this_func)函数方法存在"); } else { //不是函数 common_log("msg_func_close_call(this_func)函数方法不存在,不过这只是一个回调函数,可以忽略报错"); //alert_txt("msg_func_ok(this_func)函数方法不存在,将无法完成msg_func_ok按钮的调用"); } } catch(e) { common_log("alert_msg(title, content, btn_txt, this_func)未知异常="+e); } // 校验出现多个alert_msg()函数调用时,实现各自控制各自 if(!this_func){ var timestamp = Date.parse(new Date())/1000; // 精确到秒的时间戳 this_func = timestamp; common_log("没有设置this_func的区别标识,将默认为="+this_func); } // 校验必要参数 if(!title || !content || !btn_txt){ common_log("alert_msg参数不完整,this_func="+this_func); //alert_txt("alert_msg参数不完整,this_func="+this_func); return; } $("body").append('
提示
X
······
···
'); $(".alert-msg-title-text-"+this_func).html(title); $(".alert-msg-content-"+this_func).html(content); $(".alert-msg-btn-ok-"+this_func).html(btn_txt) } var alert_msg_border = 1; try{ //kd-alert-msg-div $(document).on("click", ".kd-alert-msg-bg", function (e) { common_log("on"); if(alert_msg_border === 1){ $(".kd-alert-msg").css("border", "2px solid #7B68EE"); alert_msg_border = 2; }else { $(".kd-alert-msg").css("border", "2px solid #3CB371"); alert_msg_border = 1; } }); $(document).on("click", ".kd-alert-msg-div", function (e) { common_log("on"); if(alert_msg_border === 1){ $(".kd-alert-msg").css("border", "2px solid #CDCD00"); alert_msg_border = 2; }else { $(".kd-alert-msg").css("border", "2px solid #CD3700"); alert_msg_border = 1; } }); //alert_msg("提示", "这是内容1", "确定", 1); //alert_msg("提示", "这是内容2","确定", 8); //alert_msg("提示", "这是内容3","确定"); //alert_msg("提示", "这是内容4","确定"); }catch (err){ common_log(err); } /* * 基于jQ * get请求封装 * void * get_api_url get接口 * call_func 回调函数 * * */ function get_func(get_api_url, call_func) { $.getJSON(get_api_url, function(data, status){ common_log("get返回数据:" + data+";status:"+status+";返回数据的类型:"+typeof data); if(status === "success"){ if(!call_func){ common_log("回调函数为必填!否则无法异步返回结果"); }else { call_func(data); // 异步得到结果 } }else{ common_log("请求错误,检查后台get方法"); alert_txt("请求错误或者网络不通"); } }); } /* * 基于jQ * post请求封装 * void * post_url_api 接口 * dataObj 数据 * call_func 回调函数 * */ function post_func(post_url_api, dataObj, call_func) { var post_url = post_url_api; var obj = dataObj; // 请求数据 $.ajax({ url: post_url, type: "POST", dataType: "json", // 已经默认json async: true, // 已经默认true data: obj, // dataObj为Object类型: {nickname: "name",} success: function(data, status){ common_log("post返回数据:" + data+";status:"+status+";返回数据的类型:"+typeof data); // 确保返回数据是object类型 if(typeof data === "string"){ datas = JSON.parse(data); // json字符串转换成json对象 }else { datas = data; } if(!call_func){ common_log("回调函数为必填!否则无法异步返回结果"); }else { call_func(datas); // 异步得到结果 } }, error: function (xhr) { console.log(xhr); alert_txt("接口请求错误或者网络不通"); } }); } /* * * 基于ES,或者原生js * get请求封装 * * */ function get_api(get_api_url, call_func) { //请求数据库存在的用户信息 var url = get_api_url; var ajax_get = function(url) { return new Promise(function(resolve2, reject) { var r = new XMLHttpRequest(); r.open("GET", url, true); r.onreadystatechange = function () { if (r.readyState !== 4 || r.status !== 200) return; var data = r.responseText; resolve2(data); // 确保返回数据是object类型 if(typeof data === "string"){ datas = JSON.parse(data); // json字符串转换成json对象 }else{ datas = data; } if(!call_func){ common_log("回调函数为必填!否则无法异步返回结果"); }else { call_func(datas); // 异步得到结果 } }; r.send(); }) }; ajax_get(url); } /* * * 基于ES,或者原生js * post请求封装 * 貌似不能上传大于2M的base64,原因未知 * * */ function post_api(post_api_url, dataObj, call_func) { var url = post_api_url; var obj = dataObj; // object类型: {nickname: "name",} fetch(url,{ method:"POST", mode: "cros", headers:{ "Content-type":"application/x-www-form-urlencoded; charset=UTF-8" }, body: JSON.stringify(obj) }) .then(function (response){ common_log(response); }) .then(function(data){ common_log("fetch请求成功,响应数据为:", data); // 确保返回数据是object类型 if(typeof data === "string"){ datas = JSON.parse(data); // json字符串转换成json对象 }else{ datas = data; } if(!call_func){ common_log("回调函数为必填!否则无法异步返回结果"); }else { call_func(datas); // 异步得到结果 } }) .catch(function(err){ common_log("Fetch错误:"+err); alert_txt("接口请求错误或者网络不通"); }); } /* * * base64编码语解码 * Base64 encode / decode * 文档:https://blog.csdn.net/u011127019/article/details/51673230 * */ function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = _utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); } return output; } // public method for decoding this.decode = function (input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = _keyStr.indexOf(input.charAt(i++)); enc2 = _keyStr.indexOf(input.charAt(i++)); enc3 = _keyStr.indexOf(input.charAt(i++)); enc4 = _keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } output = _utf8_decode(output); return output; } // private method for UTF-8 encoding _utf8_encode = function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (let n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } // private method for UTF-8 decoding _utf8_decode = function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } } var base = new Base64(); //1.加密 // var str = '124内容'; // var result = base.encode(str); // //2.解密 // var result2 = base.decode(result); // base64加密 function js_base64_encode(string) { var result = base.encode(string); common_log("js_base64加密结果="+result); return result; } // base64解密,默认1次解密 var js_base64_j = 1; function js_base64_decode(result){ var string = base.decode(result); common_log("js_base64解密(第"+js_base64_j+"次解密)="+string); js_base64_j++; return string; } /* * * 处理图片 * 在img标签中加入class="img-select-cell"即可完成 * * */ var img_src = ""; // 当前图片地址 try { $(document).on("click", ".img-select-cell", function (e) { // 消除append()带来的不可点击 var that = $(this); img_src = that.attr("src"); var timestamp = Date.parse(new Date())/1000; // 精确到秒的时间戳 $("body").append('
' + '
' + '
查看大图
' + '
截取图片
' + '
保存图片
' + '
取消
'); }); $(document).on("click", ".img-select-down", function (e) { //common_log("down"); if(!img_src){ alert_txt("没有图片地址,不能下载"); return; } // window.open(img_src); window.location.href=img_src; setTimeout(function () { img_select_bg(4); }, 500) }); $(document).on("click", ".img-select-download-this", function (e) { //common_log("down"); if(!img_src){ alert_txt("没有图片地址,不能下载"); return; } downloadIamge(".img-select-download-this", "img-name", img_src); setTimeout(function () { img_select_bg(4); }, 500) }); $(document).on("click", ".img-select-cell-item-show", function (e) { if(!img_src){ alert_txt("没有图片地址,不能查看大图"); return; } show_img(img_src, "", "", "hide"); img_select_bg(5); }); } catch (err){ common_log(err); } function img_select_bg(num) { // 关闭图层操作 common_log("关闭select-cell="+num); $(".img-select-cell-div").remove(); $(".img-select-cell-bg").slideUp(50); setTimeout(function () { // $(".img-select-cell-div").remove(); $(".img-select-cell-bg").remove(); }, 50) } // 下载图片 function downloadIamge(selector, name, url) { alert_txt("正在保存"); // 通过选择器获取img元素, var img = document.querySelector(selector); // 将图片的src属性作为URL地址 var _url = url; var a = document.createElement("a"); var event = new MouseEvent('click'); a.download = name; a.href = _url; a.dispatchEvent(event); } /* * * md5加密: * js_md5(要加密的字符串; 输出是否为大写,A或者1) * string 要加密的 * toUpperCase 是否大小写 * call_func 回调函数 * */ var md5_res = ""; function js_md5(string, toUpperCase, call_func) { $.getScript(md5_url,function (e) { //common_log("md5.js自动引用成功"); md5_res = hex_md5(string); if(toUpperCase === "A" || toUpperCase === 1){ // 大写转换 md5_res = md5_res.toUpperCase(); } common_log("js_md5方法加密结果="+md5_res); if(!call_func){ common_log("js_md5()无回调函数"); }else { call_func(md5_res); } }); } // function md5_log(this_md5){ // console.log(this_md5); // } // js_md5("123", "", md5_log); /* * 判断是否是微信浏览器的函数 * status: "on","off" * jump_url: 跳转的url,为空值时执行回调函数,不为空时执行跳转操作 * call_func: 回调函数 * 传递参数:提示语 * 场景值weixin_res: * 1 是微信浏览器,然后执行任何操作; * 0 不是微信浏览器但不执行任何操作; * -1 不是微信浏览器,要执行某个操作; * 2 不是微信浏览器,错误操作,要执行某个操作。 * * */ function user_weixin(status, jump_url, call_func, data){ var ua = window.navigator.userAgent.toLowerCase(); var weixin_res = 0; // 场景值 //通过正则表达式匹配ua中是否含有MicroMessenger字符串 if(ua.match(/MicroMessenger/i) === "micromessenger"){ common_log("is weixin"); weixin_res = 1; }else{ if(jump_url === ""){ if (status === "on"){ common_log("not weixin,on"); weixin_res = -1; }else if (status === "off"){ common_log("not weixin,off"); weixin_res = 0; }else{ common_log("user_weixin()约定参数不正确1"); weixin_res = 2; } if(!call_func){ common_log("call_func参数为空"); }else { call_func(weixin_res, data); } }else{ // 有jump_url代表需要立即执行跳转操作,并不需要任何回调 if (status === "on"){ common_log("not weixin,on"); }else if (status === "off"){ common_log("not weixin,off"); return; }else{ common_log("user_weixin()约定参数不正确2"); return; } window.location.replace(jump_url); } } } /* * * 判断设备类型 * Android、iOS、PC * android_func(1) android回调函数 * ios_func(2) ios回调函数 * pc_func(3) pc回调函数 * data 传入参数 * * */ function user_device(device_func, data){ var datas = data; // 携参 var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端 var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 if (isAndroid === true || isiOS === false){ // android console.log("Android"); device_func(1, datas); }else if(isAndroid === false || isiOS === true){ // ios console.log("iOS"); device_func(2, datas); }else { // pc console.log("PC"); device_func(3, datas); } } /* * void * 获取用户的地址和IP,回调函数返回信息数组 * 使用方法: * call_func(user_addr); // 成功时的回调函数,将参数返回window,解决一部问题 * 页面载入时就要引用user_address(),请调用全局变量user_addr=,若出现数组为空,请使用window.onload = function(e){ user_addr= }; * */ var user_addr = []; function user_address(call_func) { $.getScript(souhu_address, function (e) { var user_ip = returnCitySN["cip"]; // ip var user_city = returnCitySN["cname"]; // 省市 var user_time = Date.parse(new Date())/1000; // 精确到秒的时间戳 user_addr = [user_ip, user_city, user_time]; js_typeof(user_addr); // 显示数据类型 common_log("页面载入时就要引用user_address(),请调用全局变量user_addr="+user_addr); //return user_addr; if(!call_func){ common_log("无回调函数将结果转发出来,请注意异步问题"); }else { call_func(user_addr); // 成功时的回调函数,将参数返回window,解决一部问题 } }); } // function user_address_log(this_addr){ // console.log(this_addr); // } // user_address(user_address_log); /* * * 页面刷新次数安全校验,利用cookie * max_num最大刷新次数 * jump_url超过最大刷新次数时的跳转地址,一般为404页 * */ //var common_cookie_pre = "refresh_page_number_"; function refresh_check(max_num, common_cookie_pre, jump_url) { var _jump_url = jump_url; var _max_num = max_num; var _common_cookie_pre = common_cookie_pre; if(!_common_cookie_pre){ _common_cookie_pre = "refresh_page_number_"; } if(!_jump_url){ _jump_url = "https://m.sogou.com/404"; } if(_max_num < 3){ common_log("页面最大访问数有误,不能<=2"); _max_num = 3; } var _time = 2*24*3600000; var max_num_i = getCookie(_common_cookie_pre+"jump_num")*1; // string 转 number if(!max_num_i){ max_num_i = 1; }else { max_num_i +=1; } if(navigator.cookieEnabled !== true){ // 不支持cookie时直接跳转走 window.location.replace(_jump_url); }else { if(max_num_i > _max_num){ setTimeout(function () { window.location.replace(_jump_url); }, 2000); }else { setCookie(common_cookie_pre+"jump_num", max_num_i, _time); } } } //refresh_check(1000, "kd_", ""); /* * 批量写入css CDN链接 * 利用时间戳自动消除css缓存 * */ function add_css(_cdn_css){ var html_css = _cdn_css; if (typeof(_cdn_css) === "undefined"){ common_log("css的CDN,_cdn_css=[];未定义"); return; } if(js_typeof(html_css) === "array"){ for (let css_i=0; css_i < html_css.length; css_i++) { if (!html_css[css_i]){ common_log("css_null"); break; // 遇到错误,直接跳出,不用再执行 }else{$("head").append(''); } } }else{ common_log(js_typeof(html_css)); } } // var cdn_css = [ // css CDN // "", // ]; //add_css(cdn_css); function show_loading() { // 显示加载动画 $(".content").append('
') $(".app-loading").css("background", "rgba(0, 0, 0, 0.1)"); } function delete_loading() { // 删除加载动画 $(".app-loading").remove(); } /* * 长按事件 * long_press(_id, call_func) * */ function long_press(_id, call_func){ let timer = null; _id.addEventListener("touchstart",function(){ timer = setTimeout(function () { call_func(_id); },1200); // 定义长按时间 }); _id.addEventListener("touchend",function(){ clearTimeout(timer); }); } // long_press(_id, test_func); // function test_func(){ // // } /* * 处理触摸手势 * swipe_touch(_id) * 调用swipe_touch(document.getElementById("test"));开启该区域触摸事件 * 使用function touch_data(data){console.log(data);}取出该区域触摸参数 * */ function swipe_touch(_id, call_func, long){ if (long === "long"){ long_press(_id, call_func); return; } let startx; let endx; let starty; let endy; function _touch_cons(){ let dir_x = "center_x"; let dir_y = "center_y"; if(startx > endx){dir_x = "left";}else if(startx < endx){dir_x = "right";} if(starty > endy){dir_y = "up";}else if(starty < endy){dir_y = "down";} let _data = { "dir_x": dir_x, "x1" : Math.floor(startx), "x2" : Math.floor(endx), "dir_y": dir_y, "y1" : Math.floor(starty), "y2" : Math.floor(endy), "id" : _id, }; if (!call_func){ try{ touch_data(_data); }catch (e) { // 必选日志打印 console.info("请使用function touch_data(data){console.log(data);}取出该区域触摸参数"); } }else { call_func(_data); } } _id.addEventListener("touchstart",function(e){ let touch=e.changedTouches; startx=touch[0].clientX; starty=touch[0].clientY; }); _id.addEventListener("touchend",function(e){ let touch=e.changedTouches; endx=touch[0].clientX; endy=touch[0].clientY; _touch_cons(); }); } // function touch_data(data) { // console.log(data); // // } /* * 实现自定义的N次连续点击 * many_click(_click_num, call_func) * 必填:_click_num 点击次数 [1, 10] * 必填:call_func 回调函数 * 选填:_id 是长按手势传入的目标标签id * */ let click_before_time = 0; let click_num = 0; function many_click(_click_num, call_func, _id){ if (!call_func){console.info("many_click(_click_num, call_func)无回调函数"); return;} if (_click_num === "long"){ /*实现长按*/ if(!_id){console.info("_id为必填。many_click('long', call_func, _id)"); return;} long_press(_id, call_func); return; } // 安全校验 if (typeof _click_num !== "number"){ console.info("many_click(_click_num, call_func)的点击次数为number类型"); return; } // 处理click_num的新值情况 if(click_num === 0){ click_num = _click_num; }else { if (click_num < 1 || click_num > 10){ click_num = 1; } /*只准1击至10击,其他情况默认1击*/ } // 处理点击之时差 let click_time = Date.parse(new Date())+(new Date()).getMilliseconds(); // 毫秒时间戳 if( (click_time - click_before_time) < 400 ){ // 下一次点击是否成功 click_before_time = Date.parse(new Date())+(new Date()).getMilliseconds(); click_num--; }else{ // 第一次点击 click_before_time = Date.parse(new Date())+(new Date()).getMilliseconds(); if(click_num < _click_num){ /*清除历史不成功点击的参数*/ click_num = _click_num; } } // N次成功点击后启用回调函数,并初始化click_num if (click_num === 1){ call_func("回调函数不需要传参"); click_num = 0; /*初始化点击次数*/ } } /* * 双击 * */ function two_click(call_func) { many_click(2, call_func); } /* * 三击 * */ function three_click(call_func) { many_click(3, call_func); } //====开始====处理旧的仍旧在线的函数==== /* * update 2018-08-15 * 由于对函数命名或者参数写法上的更新,导致旧的仍旧在线的函数不能正常使用, * 所以需要【用老函数名转发一下新函数及新函数带参数的方式】 * * */ /* * 匹配url参数 * */ function getUrlParam(key) { // 返回值 common_log('getThisUrlParam("", key)已经接管了getUrlParam(key)'); return getThisUrlParam("", key); } /* * 判断微信浏览器 * */ function isWeiXin(txt, status, url){ common_log(txt); common_log('user_weixin(status, url)已经接管了isWeiXin(txt, status, url)'); user_weixin(status, url); } //====结束====处理旧的仍旧在线的函数====

-

-

你可能感兴趣的:(js/大前端)