常用业务js组件:canvas绘图、时间戳转换、正则验证、深拷贝等

新@mosowe2/j(t)s文档地址

mosowejs不再推荐,推荐使用@mosowe2/js

注意:@mosowe2/js@2.0.1版本开始,前缀统一添加m_,新增@mosowe2/ts包
注意:@mosowe2/js@2.0.1版本开始,前缀统一添加m_,新增@mosowe2/ts包
注意:@mosowe2/js@2.0.1版本开始,前缀统一添加m_,新增@mosowe2/ts包

先推荐一个npm包【mosowejs】,对没错,用我的专用名称命名的js,点击可以查看示例,手机,PC均可,内部包含了N多日常开发用到的:

  1. 正则验证(手机号,座机号,中英文,数字,url等等),
  2. 常用的一些方法(时间格式化-年月日时分秒季度周数天数,数字千分位,数据脱敏,数据千分位,复制等等等),
  3. 一些数据类型判断(移动端PC判断、object,number,string…)
  4. 常用canvas绘图(海报图,裁剪类的有涂抹裁剪,多边形裁剪)基于document开发,同类的跨端插件uniapp点此

二维码

方法:CreateQrCode(text,options)

返回二维码图片

属性类型必填默认说明
textstring-要转为二维码的数据
optionsoptionsProps{}二维码相关配置

optionsProps

属性类型必填默认说明
typeNumbernumber4
errorCorrectLevel‘L’ | ‘M’ | ‘Q’ | ‘H’‘M’
sizenumber500如果数据太长生成不了二维码,可以把此处的数值改大

缓存

sessions
方法说明
sessions.get(key:string)sessionStorage获取缓存,内部已JSON.parse(),无需再转
sessions.set(key:string,value:any)sessionStorage设置缓存,内部处理JSON.stringify(),无需再转
sessions.remove(key:string)sessionStorage删除缓存
sessions.clear()sessionStorage清空缓存
local
方法说明
local.get(key:string)localStorage获取缓存,内部已JSON.parse(),无需再转
local.set(key:string,value:any)localStorage设置缓存,内部处理JSON.stringify(),无需再转
local.remove(key:string)localStorage删除缓存
local.clear()localStorage清空缓存

函数

时间格式化

方法:DateFormat(timeTemp,fmt)

返回格式化后的时间

属性类型必填默认说明
timeTempnumber-时间戳,毫秒级
fmtstringYYYY-MM-DD hh:mm:ss要转换的格式
数字千分位

方法:NumberDot(value,float)

返回格式化后的数字

属性类型必填默认说明
valuenumber-要转的数字
floatbooleanfalse小数位是否要转
数据脱敏

方法:ReplaceStar(value,start,end)

返回脱敏后的数据

如果value.length < start+end,或者value不为字符串类型,则原值返回,控制台报错,但不影响进程

属性类型必填默认说明
timeTempstring-要脱敏的数据
startnumber3数据前不脱敏位数
endnumber4数据后不脱敏位数
判断是否带有小数位

方法:NumberIsFloat(number,maxLen)

返回boolean

属性类型必填默认说明
numbernumber-要判断的数字
maxLennumber-判断小数位个数,即最多保留小数位
数字转万且千分位

方法:NumberWan(value,float)

返回格式化后的数字

属性类型必填默认说明
valuenumber-要换的数字
floatnumber2保留的小数位数
离屏文件选择

方法:OutScreenFileChoose(options)

返回promise,值为选择的文件

options

属性类型必填默认说明
fileNamestringfile接口上传需要的文件字段名
acceptstringimage/*上传文件类型
multiplebooleanfalse是否多选
formDatabooleanfalse选择后返回的数据是否需要formData
复制

方法:Copy(value)

属性类型必填默认说明
valueany-要复制的内容
深拷贝

方法:DeepClone(value)

返回拷贝后的数据

属性类型必填默认说明
valueany-要深拷贝的值
file转base64

方法:FileToBase64(file)

返回promise, 值为base64数据

属性类型必填默认说明
filefile-要转的文件
base64转blob(file文件)

方法:Base64toBlob(base64)

返回promise,值为blob数据

属性类型必填默认说明
base64base64-要转的base64数据
删除对象中的空

方法:DeleteEmptyObj(obj)

返回处理后的数据

属性类型必填默认说明
objobject-要处理的json数据
资源文件下载到本地

方法:FileDownload(link,name)

处理后直接调起浏览器的下载

这是一个汇总的下载方式,主要是处理一些图片下载,文档类型下载

你也可以使用XMLHttpRequest单独下载文档类型文件

或者使用XMLHttpRequest + WebImageToBase64下载图片类型文件

但是我建议使用 FileDownload 这个总入口下载图片、文档类型文件

属性类型必填默认说明
linkstring-文件地址
namestring-文件下载后的名称,默认是文件地址的最后一截名称
下载文件

方法:XMLHttpRequest(link,name,type)

属性类型必填默认说明
linkstring-文件下载地址,图片为base64
namestring-文件保存的名称
typestring-文件类型,图片:image,非图片:file
网络图片转为本地base64或blob

方法:WebImageToBase64(imgUrl)

返回promise,值为base64或blob

属性类型必填默认说明
imgUrlstring-网络图片地址
防抖

方法:Debounce(callback,time)

只执行最后一次事件

属性类型必填默认说明
callbackfunction-回调函数
timenumber300间隔时间,毫秒
节流

方法:Throttle(callback,time)

一段时间内只执行一次事件

属性类型必填默认说明
callbackfunction-回调函数
timenumber300间隔时间,毫秒

canvas

canvas图片合成

方法:CanvasImageCompose(config)

返回promise,值为图像base64,或者空

config

属性类型必填默认说明
listcanvasImageComposeListItem-要渲染的数据列表
imgType‘jpeg’ | ‘png’jpeg输出图像格式
heightnumber1330canvas高度
widthnumber750canvas宽度

canvasImageComposeListItem

属性类型必填默认说明
typestring-元素类型:image图片,text文本,rect矩形(线条),arc圆形,qr二维码
xnumber-X轴坐标
ynumber-Y轴坐标
contentstring-image:图片数据,text:文字,rect及arc:不使用此字段
widthnumber-图片、矩形(线条)、圆形宽度
heightnumber-图片、矩形(线条)高度
arcbooleanfalsetype=image时:是否绘制圆形图片
arcType‘cover’ | ‘scale’ | ‘clip’cover裁剪圆形图片模式,默认cover平铺,scale缩放,clip裁剪
arcClipXYSnumber-arcType=clip时裁剪坐标及缩放等级,1为不缩放,例[20,30,1]
colorstring#000000绘制文本、矩形(线条)的颜色,默认:#000000
fontnumber-绘制文本的字号大小,字体样式,格式示例’20px sans-serif’
align‘left’ | ‘right’ | ‘center’left绘制文本的对齐方式,默认:left
maxWidthnumber-绘制文本的最大宽度,文字长度超过该值会被压缩
globalAlphanumber1透明度:0~1,默认1
canvas涂抹裁剪

方法:CanvasDaubClip(config)

返回promise,值为图像base64,或者空,或handleClip为true的时候,返回object,需调用object.clip()方法手动裁剪,clip()返回promise,裁剪之后的图片大小与触摸区域大小一致,预览可能会放大裁剪的图片,移动端绘制速度慢了可能会出现首尾链接现象

config

属性类型必填默认说明
imagestring-图片路径
elstring-挂载的元素id名称,没有则默认全屏
widthnumber300裁剪区宽度
heightnumber300裁剪区高度
radiusnumber20涂抹半径
alphanumber0.6蒙层透明度
handleClipbooleanfalse是否手动裁剪,false则松手就裁剪,调用clip()方法触发手动裁剪,参考后面示例
shadestring#000000遮罩层的颜色(#号开头的)或者图片(base64或有效路径)
canvas多边形裁剪

方法:CanvasPolygonClip(config)

返回promise,值为object,执行object.clip()方法手动裁剪,该方法返回promise,值为base64或者空

config

属性类型必填默认说明
imagestring-图片路径
elstring-挂载元素,没有则默认全屏,因该方法需要手动裁剪,所以建议配置该属性,通过clip()裁剪,请看示例
sidenumber3边数,不能小于3,边数越多可越接近圆
radiusnumber150半径,点到中心距离
rectbooleanfalse是否为正矩形,为true时,side失效
rectWidthnumber=radius正矩形的宽,没有或为0,默认取radius
rectHeightnumber=radius正矩形的长,没有或为0,默认取radius
alphanumber0.6裁剪蒙层透明度,默认0.6
innerbooleanfalse是否为内多边形,默认false
innerTimesnumber0.5内多边形时,靠内的点半径为radius*innerTimes, 默认0.5
widthnumber宽度,仅pc端有效,pc默认50vw,移动端固定全屏
heightnumber高度,仅pc端有效,pc默认100vh,移动端固定全屏
rotatebooleantrue是否可旋转,默认true

示例:

// 触摸裁剪及多边形裁剪可参考此示例
let handleSideClip:any = null

// 选择文件并打开裁剪
const beginClip = () => {
  OutScreenFileChoose()
  .then(async (res:any) => {
    handleSideClip = await CanvasPolygonClip({
       image: res[0],
       el:'showClip'
    })
  })
}
  

// 手动触发裁剪
  const DaubClip = async ()=> {
    if (handleSideClip) {
      // data为裁剪的图片
      const data = await handleSideClip.clip()
    }
    handleSideClip = null
  }

正则

手机号

正则内容:Mobile = /^1[3456789]\d{9}$/

校验方法:IsMobile(value:string)

座机

正则内容:StudioCamera = /^0\d{2,3}-\d{6,8}$/

校验方法:IsStudioCamera(value:string)

邮箱

正则内容:Email = /^\w+(\.)?(\w+)?@[0-9a-z]+(\.[a-z]+){1,3}$/

校验方法:IsEmail(value:string)

身份证

正则内容:IdCard = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/

校验方法:IsIdCard(value:string)

数字

正则内容:Digit = /^\d+$/

校验方法:IsDigit(value:string|number)

数字字母

正则内容:DigitLetter = /^[A-Za-z0-9]+$/

校验方法:IsDigitLetter(value:string|number)

中文

正则内容:Chinese = /^[\u4e00-\u9fa5]+$/

校验方法:IsChinese(value:string)

中文,英文,数字,下滑线

正则内容:CnEnNuLine = /^[\u4e00-\u9fa5A-Za-z0-9_]+$/

校验方法:IsCnEnNuLine(value:string)

英文

正则内容:English = /^[A-Za-z]+$/

校验方法:IsEnglish(value:string)

大写英文

正则内容:CapitalEnglish = /^[A-Z]+$/

校验方法:IsCapitalEnglish(value:string)

ipv4

正则内容:Ipv4 = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/

校验方法:IsIpv4(value:string)

http,https地址

正则内容:Url = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=]+$/

校验方法:IsUrl(value:string)

邮编

正则内容:PostCode = /^[0-8]\d{5}$/

校验方法:IsPostCode(value:string)

社会信用代码编码规则

正则内容:SocialCreditCode = /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/

校验方法:IsSocialCreditCode(value:string)

判断

除判断手机设备及false/true,其他基于Object.prototype.toString.call()方法判断

是否是手机设备

方法:IsPhone()

是否是object

方法:IsObject(value:any)

是否是数组

方法:IsArray(value:any)

是否是数字

方法:IsNumber(value:any)

是否是字符串

方法:IsString(value:any)

是否是时间

方法:IsDate(value:any)

是否是Boolean类型

方法:IsBoolean(value:any)

是否是函数

方法:IsFunction(value:any)

是否为null

方法:IsNull(value:any)

是否为undefind

方法:IsUndefined(value:any)

是否为false

方法:IsFalse(value:any)

是否为true

方法:IsTrue(value:any)

安装

npm install mosowejs

使用

全引入:

import mosowe from 'mosowejs'
mosowe.Copy(123)

按需引入:

import {Copy} from 'mosowejs'
Copy(123)

git码云地址:

https://gitee.com/mosowe/mosowejs

业余之时,摸鱼之内,细想近些年做项目,总是或多或少的用到很多的js方法,总是没有一个综合性的来包裹自己开发的插件啥的,所以最近打算把他们全都合并一下,也许有漏掉的。

如果你有其他建议或需求,欢迎留言评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mosowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值