JS工具类常用方法

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型 本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。 阅读详情

JS工具类常用方法

	/**
	 * 绘制圆角矩形
	 * @param {Object} ctx - canvas组件的绘图上下文
	 * @param {Number} x - 矩形的x坐标
	 * @param {Number} y - 矩形的y坐标
	 * @param {Number} w - 矩形的宽度
	 * @param {Number} h - 矩形的高度
	 * @param {Number} r - 矩形的圆角半径
	 * @param {String} [c = 'transparent'] - 矩形的填充色
	 */
	export function roundRect(ctx, x, y, w, h, r, c = '#fff') {
		if (w < 2 * r) r = w / 2;
		if (h < 2 * r) r = h / 2;
		ctx.beginPath();
		ctx.fillStyle = c;
		ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
		ctx.moveTo(x + r, y);
		ctx.lineTo(x + w - r, y);
		ctx.lineTo(x + w, y + r);
		ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
		ctx.lineTo(x + w, y + h - r);
		ctx.lineTo(x + w - r, y + h);
		ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);
		ctx.lineTo(x + r, y + h);
		ctx.lineTo(x, y + h - r);
		ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
		ctx.lineTo(x, y + r);
		ctx.lineTo(x + r, y);
		ctx.fill();
		ctx.closePath();
	}
	/**
	 * 绘制上左上右两个圆角图片
	 * @param {Object} ctx - canvas组件的绘图上下文
	 * @param {String} img - 图片
	 * @param {Number} x - 图片的x坐标
	 * @param {Number} y - 图片的y坐标
	 * @param {Number} width - 图片的宽度
	 * @param {Number} height - 图片的高度
	 * @param {Number} r - 图片的圆角半径
	 */
	export function imgfillet(ctx, img, x, y, width, height, r) {
		if (width < 2 * r) r = width / 2;
		if (height < 2 * r) r = height / 2;
		ctx.beginPath();
		ctx.save();
		ctx.setLineWidth(1);
		ctx.setStrokeStyle('#ffffff');
		ctx.moveTo(x + r, y); // 创建开始点
		ctx.lineTo(x + width - r, y); // 创建水平线
		ctx.arcTo(x + width, y, x + width, y + r, r); // 右上角创建弧 
		ctx.lineTo(x + width, y + height); // 创建垂直线
		ctx.lineTo(x + r, y + height); // 创建水平线
		ctx.lineTo(x, y + height); // 创建垂直线
		ctx.arcTo(x, y, x + r, y, r); // 左上角创建弧
		ctx.stroke(); // 画出当前路径的边框
		ctx.clip(); //剪切
		ctx.drawImage(img, x, y, width, height);
		ctx.restore();
		ctx.closePath();
	}
	/**
	 * 绘制四个圆角图片
	 * @param {Object} ctx - canvas组件的绘图上下文
	 * @param {String} img - 图片
	 * @param {Number} x - 图片的x坐标
	 * @param {Number} y - 图片的y坐标
	 * @param {Number} width - 图片的宽度
	 * @param {Number} height - 图片的高度
	 * @param {Number} r - 图片的圆角半径
	 */
	export function imageRound(ctx, img, x, y, width, height, r) {
		if (width < 2 * r) r = width / 2;
		if (height < 2 * r) r = height / 2;
		ctx.beginPath();
		ctx.save();
		ctx.setLineWidth(1);
		ctx.setStrokeStyle('#ffffff');
		ctx.moveTo(x + r, y); // 创建开始点
		ctx.lineTo(x + width - r, y); // 创建水平线
		ctx.arcTo(x + width, y, x + width, y + r, r); // 右上角创建弧 
		ctx.lineTo(x + width, y + height - r); // 创建垂直线
		ctx.arcTo(x + width, y + height, x + width - r, y + height, r); // 右下角创建弧
		ctx.lineTo(x + r, y + height); // 创建水平线
		ctx.arcTo(x, y + height, x, y + height - r, r); // 左下角创建弧
		ctx.lineTo(x, y + r); // 创建垂直线
		ctx.arcTo(x, y, x + r, y, r); // 左上角创建弧
		ctx.stroke(); // 画出当前路径的边框
		ctx.clip(); //剪切
		ctx.drawImage(img, x, y, width, height);
		ctx.restore();
		ctx.closePath();
	}
	/**
	 * 字符串中间几位修改为*号
	 * @param {String} str - 操作字符串
	 * @param {Number} start - 开头不需要变成星号的长度
	 * @param {Number} end - 末尾不需要变成星号的长度,设置默认值为0, 不传就除了设置的开头几位剩余全部变成星号
	 */
	export function changeToStar(str, start, end = 0) {
		let strLen = str.length;
		let stars = ''
		for (let i = 0; i < strLen - start - end; i++) {
			stars += '*'
		}
		str = str.substr(0, start) + stars + str.substr(strLen - end);
		return str;
	}
	/**
	 * 获取当前日期N天后的日期
	 * @param {Number} AddDayCount - 天数
	 */
	export function getDateStr(AddDayCount) {
		var dd = new Date();
		dd.setDate(dd.getDate() + AddDayCount); //获取AddDayCount天后的日期
		var y = dd.getFullYear();
		var m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1); //获取当前月份的日期,不足10补0
		var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate(); //获取当前几号,不足10补0
		return y + "-" + m + "-" + d;
	}
	/**
	 * 获取当前日期的N天前后的日期数组  日期格式2020-07-23
	 * @param {Number} num - 天数
	 */
	export function getAllDate(num) {
		var today = new Date();
		var dateArr = [];
		for (var i = 1; i < num; i++) {
			var newDate = new Date(today.getTime() - i * 1000 * 60 * 60 * 24); // N天前
			var year = newDate.getFullYear();
			var month = (parseInt(newDate.getMonth()) + 1) > 9 ? (parseInt(newDate.getMonth()) + 1) : "0" + (parseInt(
				newDate.getMonth()) + 1);
			var day = (newDate.getDate()) > 9 ? newDate.getDate() : "0" + newDate.getDate();
			var fullDate = `${year}-${month}-${day}`;
			dateArr.unshift(fullDate);
		}
		for (var i = 0; i < num; i++) {
			var newDate = new Date(today.getTime() + i * 1000 * 60 * 60 * 24); // N天后
			var year = newDate.getFullYear();
			var month = (parseInt(newDate.getMonth()) + 1) > 9 ? (parseInt(newDate.getMonth()) + 1) : "0" + (parseInt(
				newDate.getMonth()) + 1);
			var day = (newDate.getDate()) > 9 ? newDate.getDate() : "0" + newDate.getDate();
			var fullDate = `${year}-${month}-${day}`;
			dateArr.push(fullDate);
		}
		return dateArr;
	}
	/**
	 * 获取当期日期是星期几  日期格式2020-07-23
	 * @param {String} datestr - 日期
	 */
	export function getDateIsweek(datestr) {
		var weekArray = new Array("周日", "周一", "周二", "周三", "周四", "周五", "周六");
		var week = weekArray[new Date(datestr).getDay()];
		return week;
	}
	/**
	 * 格式化时间戳为日期
	 * @param {*} date 传入一个时间
	 * @param {*} fmt 时间格式
	 * @param {*} defaultValue 默认值
	 * @return 日期字符串
	 */
	export function dateFormat(date, fmt = "yyyy-MM-dd HH:mm:ss", defaultValue = "") {
	    if (!date) {
	        return defaultValue;
	    }
	    if (typeof date === "string") {
	        date = new Date(date.replace(/-/g, "/"));
	    } else {
	        date = new Date(date);
	    }
	    var o = {
	        "M+": date.getMonth() + 1, //月份
	        "d+": date.getDate(), //日
	        "H+": date.getHours(), //小时
	        "m+": date.getMinutes(), //分
	        "s+": date.getSeconds(), //秒
	        "q+": Math.floor((date.getMonth() + 3) / 3), //季度
	        S: date.getMilliseconds() //毫秒
	    };
	    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
	    for (var k in o)
	        if (new RegExp("(" + k + ")").test(fmt))
	            fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
	    return fmt;
	}
	/**
	 * 格式化时间戳为字符串日期
	 * @param {(Object|string|number)} time
	 * @param {string} cFormat
	 * @return {string | null}
	 */
	export function parseTime(time, cFormat) {
	    if (arguments.length === 0 || !time) {
	        return null
	    }
	    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
	    let date
	    if (typeof time === 'object') {
	        date = time
	    } else {
	        if ((typeof time === 'string')) {
	            if ((/^[0-9]+$/.test(time))) {
	                // support "1548221490638"
	                time = parseInt(time)
	            } else {
	                time = time.replace(new RegExp(/-/gm), '/')
	            }
	        }
	        if ((typeof time === 'number') && (time.toString().length === 10)) {
	            time = time * 1000
	        }
	        date = new Date(time)
	    }
	    const formatObj = {
	        y: date.getFullYear(),
	        m: date.getMonth() + 1,
	        d: date.getDate(),
	        h: date.getHours(),
	        i: date.getMinutes(),
	        s: date.getSeconds(),
	        a: date.getDay()
	    }
	    const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
	        const value = formatObj[key]
	        // Note: getDay() returns 0 on Sunday
	        if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
	        return value.toString().padStart(2, '0')
	    })
	    return time_str
	}
	/**
	 * 深拷贝对象
	 * @param {Object} obj 需要拷贝的对象
	 * @return 拷贝对象
	 */
	export function deepClone(obj) {
	    const _toString = Object.prototype.toString
	    // null, undefined, non-object, function
	    if (!obj || typeof obj !== 'object') {
	        return obj
	    }
	    // DOM Node
	    if (obj.nodeType && 'cloneNode' in obj) {
	        return obj.cloneNode(true)
	    }
	    // Date
	    if (_toString.call(obj) === '[object Date]') {
	        return new Date(obj.getTime())
	    }
	    // RegExp
	    if (_toString.call(obj) === '[object RegExp]') {
	        const flags = []
	        if (obj.global) { flags.push('g') }
	        if (obj.multiline) { flags.push('m') }
	        if (obj.ignoreCase) { flags.push('i') }
	        return new RegExp(obj.source, flags.join(''))
	    }
	    const result = Array.isArray(obj) ? [] : obj.constructor ? new obj.constructor() : { }
	    for (const key in obj) {
	        result[key] = deepClone(obj[key])
	    }
	    return result
	}
	/**
	 * 提取地址栏参数
	 * @param {string} name 需要获取的参数名
	 * @param {string} src 获取的url地址
	 * @return 参数值 {string}
	 */
	export function	getUrlArgument(name, src) {
		return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)')
			.exec(src) || [, ''])[1]
			.replace(/\+/g, '%20')) || null
	}

	/**处理小程序海报网络图片,base64图片 **/
	const fsm = wx.getFileSystemManager();
	const FILE_BASE_NAME = 'file_base64src'; //自定义文件名
	
	/**
	 * 删除本地同名文件
	 * @params {string} 删除文件后缀名
	 **/
	export function removeSave(format = 'png') {
		return new Promise((resolve) => {
			const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
			fsm.unlink({
				filePath: filePath,
				success(res) {
					console.log('文件删除成功');
					resolve(true);
				},
				fail(e) {
					console.log('readdir文件删除失败:', e);
					resolve(true);
				}
			});
		})
	}
	/**
	 * 将base64图片,存储到本地,生成临时url
	 * @params {string} base64
	 * @return {string} 临时url
	 **/
	export function base64ToSave(base64data) {
		return new Promise((resolve) => {
			const [, format] = /data:image\/(\w+);base64,/.exec(base64data) || [];
			const bodyData = base64data.replace(/^data:image\/\w+;base64,/, "");
			if (!format) {
				return (new Error('ERROR_BASE64SRC_PARSE'));
			}
			const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
			const buffer = wx.base64ToArrayBuffer(bodyData);
			fsm.writeFile({
				filePath,
				data: buffer,
				encoding: 'binary',
				success() {
					resolve(filePath);
				},
				fail() {
					return (new Error('ERROR_BASE64SRC_WRITE'));
				},
			});
		})
	}
  /**下载后台返回的文件流 **/
	let link = document.createElement('a');
	let filename = res.headers['content-disposition'].split('=')[1]; //文件名
	filename = decodeURI(filename);  //将文件名转码成中文
	let blob = new Blob([res.data], {type: res.headers['content-type']});  //将文件流转换成blob对象
	link.style.display = 'none';
	link.href = URL.createObjectURL(blob); //文件地址
	link.download = filename; 
	document.body.appendChild(link);
	link.click();
	document.body.removeChild(link);
	/** 操作普通数组 **/
	let arr = [1, 2]
    let num = [{name: '1', id:1}, {name: '2', id: 2}, {name: '4', id: 4}]
    let array = num.filter(val => arr.indexOf(val['id']) > -1)
    console.log(array)   // [{name: '1', id:1}, {name: '2', id: 2}]
	let arr = [1, 2, 3, 4]
    let array = [3, 4, 5, 6] 
    
    // 交集
    let jiao = arr.filter(item => array.indexOf(item) > -1)
    console.log(jiao) //[1, 2]
    
    // 并集
    let bing = arr.concat(array.filter(item => !(arr.indexOf(item) > -1)))
    console.log(bing) // [1, 2, 3, 4, 5, 6]
    
    // 补集 两个数组都没有的
    let bu = arr.filter(item => !(array.indexOf(item) > -1)).concat(array.filter(item => !(arr.indexOf(item) > -1)))
    console.log(bu) // [1, 2, 5, 6]
    
    // 差集
    let chaArr = arr.filter(item => array.indexOf(item) === -1)  //arr与array的差集
    console.log(chaArr) //[1, 2]
    let chaArray = array.filter(item => arr.indexOf(item) === -1) //array与arr的差集
    console.log(chaArray) // [5, 6]
    
    // ES6 Set 对象方法
    // add	添加某个值,返回Set对象本身。
   	// clear	删除所有的键/值对,没有返回值。
    // delete	删除某个键,返回true。如果删除失败,返回false。
    // forEach	对每个元素执行指定操作。
    // has	返回一个布尔值,表示某个键是否在当前 Set 对象之中。
    
    let setArr = [1,2,3,3,1,4];
    [...new Set(setArr)];  // [1, 2, 3, 4]
    Array.from(new Set(setArr));  // [1, 2, 3, 4]
    [...new Set('ababbc')].join('');  // "abc" 字符串去重
    let arr = [1, 2, 3, 4]
    let array = [3, 4, 5, 6]
    
    // 交集
    let jiao = arr.filter(item => new Set(array).has(item))
    console.log(jiao); // [3, 4]
    
    // 并集
    let bing = Array.from(new Set([...arr, ...array]))
    console.log(bing)  // [1, 2, 3, 4, 5, 6]
    
    // 补集 两个数组都没有的
    let bu = [...arr.filter(item => !(new Set(array).has(item))), ...array.filter(item => !(new Set(arr).has(item)))]
    console.log(bu) // [1, 2, 5, 6]
    
    // 差集
    let chaArr = arr.filter(item => !(new Set(array).has(item)))  //arr与array的差集
    let chaArray = array.filter(item => !(new Set(arr).has(item)))  //array与arr的差集
    console.log(chaArr); // [1, 2]
    console.log(chaArray) // [5, 6]
    
	/** 操作对象数组 **/
	let arr = [
      {id:1, name: "产品1", code: 'c001' },
      {id:2, name: "产品2", code: 'c002' },
      {id:3, name: "产品3", code: 'c003' },
    ]
    let array = [
      {id:3, name: "产品3", code: 'c003' },
      {id:4, name: "产品4", code: 'c004' },
      {id:5, name: "产品5", code: 'c005' },
    ]
    
    // 交集
    let jiao = [];
    for(let i = 0,len = arr.length; i< len; i++) {
      for(let j = 0, length = array.length; j < length; j++) {
        if(arr[i].id === array[j].id) {
          jiao.push(arr[i]);
        }
      }
    }
    console.log(jiao)   // [{id: 3, name: '产品3', code: 'c003'}]
    
    // 并集
    let bing = [...arr, ...array] 
    for(let i = 0,len = arr.length; i< len; i++) {
      for(let j = 0, length = array.length; j < length; j++) {
        if(arr[i].id === array[j].id) {
          bing.splice(bing.findIndex(item => item.id === arr[i].id), 1)
        }
      }
    }
    // [{id: 1, name: '产品1', code: 'c001'},{id: 2, name: '产品2', code: 'c002'},{id: 3, name: '产品3', code: 'c003'},{id: 4, name: '产品4', code: 'c004'},{id: 5, name: '产品5', code: 'c005'}]
    console.log(bing)
    
    // 补集 两个数组都没有的
    let bu = [...arr, ...array]
    for(let i = 0,len = arr.length; i< len; i++) {
      for(let j = 0, length = array.length; j < length; j++) {
        if(arr[i].id === array[j].id) {
          bu.splice(bu.findIndex(item => item.id === arr[i].id), 1)
          bu.splice(bu.findIndex(item => item.id === array[j].id), 1)
        }
      }
    }
    // [{id: 1, name: '产品1', code: 'c001'},{id: 2, name: '产品2', code: 'c002'},{id: 4, name: '产品4', code: 'c004'},{id: 5, name: '产品5', code: 'c005'}]
    console.log(bu)
    
    // 差集
    let chaArr = [...arr]
    for(let i = 0 , len = arr.length; i < len; i++) {
      let flag = false;
      for(let j = 0, length = array.length; j < length; j++) {
        if(arr[i].id === array[j].id) {
          flag = true;
        }
      }
      if(flag) {
        chaArr.splice(chaArr.findIndex(item => item.id === arr[i].id), 1)
      }
    }
    console.log(chaArr) //arr与array的差集 [{id: 1, name: '产品1', code: 'c001'},{id: 2, name: '产品2', code: 'c002'}]
    let chaArray = [...array]
    for(let i = 0 , len = arr.length; i < len; i++) {
      let flag = false;
      for(let j = 0, length = array.length; j < length; j++) {
        if(arr[i].id === array[j].id) {
          flag = true;
        }
      }
      if(flag) {
        chaArray.splice(chaArray.findIndex(item => item.id === arr[i].id), 1)
      }
    }
    console.log(chaArray) //array与arr的差集 [{id: 4, name: '产品4', code: 'c004'},{id: 5, name: '产品5', code: 'c005'}]
   // 获取完整地址栏参数
   export const getUrlParams = (url: string, name: string) => {
     const reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
     const r = url.substring(1).match(reg)
     if (r) return decodeURI(r[2])
     return ''
   }
	// 获取?号后的参数(location.search)
	export const getQueryParams = (url: string, name: string) => {
	  const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
	  const r = url.substring(1).match(reg)
	  if (r != null) return decodeURI(r[2])
	  return null
	}
	// 将一个16进制转10进制数字
	export const hex2int = (hex: any) => {
	  var len = hex.length,
	    a = new Array(len),
	    code;
	  for (var i = 0; i < len; i++) {
	    code = hex.charCodeAt(i);
	    if (48 <= code && code < 58) {
	      code -= 48;
	    } else {
	      code = (code & 0xdf) - 65 + 10;
	    }
	    a[i] = code;
	  }
	  return a.reduce(function (acc, c) {
	    acc = 16 * acc + c;
	    return acc;
	  }, 0);
	}
	// 获取8字节hex随机数
	export const getRamNumber = () => {
	  let result = '';
	  for (let i = 0; i < 16; i++) {
	    result += Math.floor(Math.random() * 16).toString(16);
	  }
	  return result.toUpperCase();
	}
	//转小端 低字节在前,高字节在后
	export const dataConversion = (data: any) => {
	  data = data.replace(/\s/g, '').replace(
	    /(.{2})/g, "$1 ");
	  data = data.split(" ").reverse().join("")
	  return data
	}
	// 将一串16进制转成对应的10进制数组
	export const hex2intArr = (str: string) => {
	  if (str.length % 2 !== 0) {
	    console.error('输入的16进制数格式不正确,字符个数不是双数。');
	    return;
	  }
	  const arr = [];
	  for (let i = 0; i < str.length; i += 2) {
	    arr.push(hex2int(str.substr(i, 2)));
	  }
	  return arr;
	};
	//str 转 buff
	export const str2ab = (str: string) => {
	  const buffer = new ArrayBuffer(str.length / 2);
	  let x = new Uint8Array(buffer);
	  for (let i = 0; i < x.length; i++) {
	    x[i] = parseInt(str.substr(2 * i, 2), 16)
	  }
	  return buffer;
	}
	/**
	 * 字符串转arrayBuffer
	 * @param {*} str 需要转换的字符串
	 * @returns 返回 arrayBuffer
	 */
	export const strToArrayBuffer = (str: string) => {
	  var array = new Uint8Array(str.length);
	  for (var i = 0; i < str.length; i++) {
	    array[i] = str.charCodeAt(i);
	  }
	  return array.buffer
	}
	// buff转16进制
	export const ab2hex = (buffer: any) => {
	  let hexArr = Array.prototype.map.call(
	    new Uint8Array(buffer),
	    function (bit) {
	      return ('00' + bit.toString(16)).slice(-2)
	    }
	  )
	  return hexArr.join('');
	}
	// 获取Mac地址
	export const getMacAddress = (advertisData: any) => {
	  const mac = Array.prototype.map
	    .call(new Uint8Array(advertisData), (x) => ("00" + x.toString(16)).slice(-2))
	    .join(":");
	  return mac.toUpperCase();
	}
Copula函数 Copula是处理统计中随机变量相关性问题的一种方法。本文是对Copula函数的各种定义,Copula函数的思想,Copula函数的性质,Copula函数的类型等理论资料总结 阅读详情

相关推荐

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 526

利用java实现正弦曲线的绘制_前端图形学基础(四)——Canvas绘制曲线

点击右上角的关注,不定期前端干货分享!!前端图形学基础(一)——Canvas基础入门前端图形学基础(二)——Canvas基础前端图形学基础(三)——Canvas绘制图片二次贝塞尔曲线CanvasRenderingContext2D.quadraticCurveTo() 是 Canvas 2D API 新增二次贝塞尔曲线路径的方法。它需要2个点。 第一个点是控制点,第二个点是终点。其中需要注意的是起...

weixin_39603778的博客 507

手把手教你用certificate-manager修复Vcenter证书过期问题(附密码重置技巧)

本文详细解析了Vcenter证书过期引发的503服务不可用、密码错误等典型故障现象,并提供了使用certificate-manager工具进行系统性修复的完整步骤。文章重点阐述了证书体系原理、精准诊断方法,并分享了在SSO验证失败时通过vdcadmintool重置密码的关键技巧,帮助管理员快速恢复平台并建立预防性运维策略。

swift5iosmith的博客 460

前端给图片添加算法识别框(canvas绘制图片添加矩形框)

使用canvas给图片添加矩形框,绘制完成后输出base64; 根据后台返回的图片坐标,在图片上绘制矩形框,并显示

m0_58434713的博客 1886

手把手教你用HiNet实现图像隐藏:可逆神经网络实战指南(附代码)

本文提供了一份基于HiNet框架实现图像隐藏的实战指南。通过详细解析可逆神经网络原理,手把手指导环境搭建、模型构建、损失函数设计及训练流程,并附有完整代码。该方法利用单个可逆网络统一隐藏与恢复过程,结合小波变换提升隐蔽性,为信息隐藏应用提供了高效解决方案。

rgv234567的博客 433

Open3D 从体素网格构建八叉树【2025最新版】

从体素网格构建八叉树,博客长期更新,本文最近更新时间为:2025年1月1日。

点云侠的博客 34万+

Vue 74 ,JavaScript 32 ,Canvas绘制图片和区域(前端使用Canvas绘制图片,并在图片上绘制区域)

⭐在前端开发中,有时我们需要在图片上进行一些交互式操作,比如绘制区域、标记等。这种场景下,我们可以使用HTML5的标签元素来实现。Canvas 是 HTML5 提供的一种图形绘制接口,可以通过 JavaScript 在网页上绘制图形、动画和其他视觉效果。这里分享记录,如何在图片上绘制区域。

AI Agent 全栈架构师(AI + GIS + Backend)& 数字芯片系统架构师(FPGA),NorthCity Smile的博客(NcSmile,博主域名:https://ncmile.blog.youkuaiyun.com) 8880

《UDS协议从入门到精通》系列——图解0x14:清除诊断信息

图解0x14:清除诊断信息,简洁易懂,迅速上手!

车载系统攻城狮 4827

项目中常用的js工具类、方法

cosmix.js // 本文件为工具类 'use strict'; var Base64 = { // 转码表 table: [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '

Angela 412

SAP FICO 内部往来对账功能开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO 内部往来对账功能开发说明书(包括开发源代码、测试样例、FS)

我好像病了的博客 1225

OpenClaw 超级 AI 实战专栏【模型推理与实战】(二)官方预训练模型下载与使用

OpenClaw 预训练模型需按「固定目录结构」存放(模型文件夹包含权重 + 配置文件),否则会加载失败;核心流程:下载模型→验证文件完整性→加载模型→传入图片执行推理→可视化结果;常见问题集中在「路径错误」「显存不足」「文件缺失」,按文中方案可快速解决。

qq_36130719的博客 307

js常用的一些工具类方法

1,获取浏览器地址栏参数 function GetUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescap...

qq_40233349的博客 622

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

js 工具类 常用方法

js开头:  /** * JavaScript 基础工具类,存放公共函数 */ var base_utils = base_utils || {};   时间类型的: /** * 获取几天前的时间 * @param n 天数 * @returns yyyy-MM-dd */ base_utils.getBeforeDate = function(n){ var d...

继续,Let's Go! 590

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

js日期时间常用方法工具类

这里引用了moment 模块 /** * 时间日期工具类 */ import moment from 'moment' export default { /** * 获取本周周一和周日日期 */ getCurrentWeekStartAndEnd() { const start = moment().weekday(1).format('YYYY-MM-DD') // 本周一 const end = moment().weekday(7).format('YYYY-

honvin的博客 4378

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

js常用工具类.

一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:【格式化时间】 * 使用方法 * 示例: * 使用方式一: * var now = new Date(); * var nowStr = now.da...

anba7411的博客 249

JavaScript的Math工具类几个常用的方法介绍

Math.ceil(),Math.floor(), Math.round(),Math.random(),Math.max(),Math.min(),Math.pow(x, y),Math.sqrt(x)

weixin_43228946的博客 218

js常用方法(正则工具类)

/* Javascript代码 function obj$(id) 根据id得到对象 function val$(id) 根据id得到对象的值 function trim(str) 删除左边和右边空格 function ltrim(str)

u012448293的专栏 584

vue(utils.js工具类)常用的公共方法的整理

【代码】vue(utils.js工具类)常用的公共方法的整理。

2401_85908455的博客 1809

JavaScript常用方法(工具类的封装)

日期格式化 function formatDateTime(timeStamp) { var date = new Date(); date.setTime(timeStamp); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; ...

weixin_30394981的博客 114

好用的js工具类

【代码】好用的js工具类。

qq_37004501的博客 425

【微信小程序开发】常用方法封装工具类utils.js

微信小程序、工具类、节流、防抖、格式化

weixin_44431073的博客 1532

js html压缩工具类,javascript常用工具类和公共方法合集

在编写javascript代码的时候经常需要使用一些工具了和公共方法,这里收集了一些常用的公共方法,并将它们封装为工具类。Date工具类/********************** date工具类 ***************/Date.prototype.format = function(format){var o = {"M+" : this.getMonth()+1, //month"...

weixin_34961316的博客 165

web中常用的公共方法收集

经常会遇到一些常用的工具类方法,现在将其收集,以备后续使用 1、js之将location.search转化为对象 function change(str) { if(str == undefined) return str = str.substr(1) var arr = str.split("&"), obj = {}, newArr = ...

weixin_34128411的博客 114

封装一个常用的js工具类

/** * @author:水痕 * @timer:2016-07-28 * @email:332904234@qq.com * @version:1.0 * @title:封装一个自己常用的工具类js * @note: */ ; (function(window, document, $) { window.utils = { ////////////

水痕 1万+

Vue常用工具类方法 总结

1.利用Cookie,来设置接口携带的‘token’ 执行命令npm install js-cookie,在js工具类中引入,

az44yao的专栏 1450
上一篇: 实现纯前端数据导出excel
下一篇: 小程序连接蓝牙设备
Linceo
博客等级 码龄8年 13粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值