@z-utils开发工具组

地址

和 zzy-javascript-devtools 有什么差别?

  • 算是zzy-javascript-devtools的重构版本,支持之前的所有内容
  • 对内(开发):
    • 使用rollup重构打包逻辑
    • 全自动化打包生成
    • 自动生成更新日志以及版本号
    • 全自动化生成对应包的readme.md文件
    • 文件分级更加明确
    • 扩展性提升
    • 统一开发格式
  • 对外(使用):
    • 开放cjs模式
    • readmd.md文件更加合理,格式统一
    • 新增对vue的支持,以及纯工具包,避免额外开销(分三个包分别按项目决定用哪个)
    • 未来迭代逐渐开放对hooks函数的支持

渣渣宇的开发工具包@react

安装

npm i @utils/react -S
yarn add @utils/react -S

使用

import { isPhone, bottomVisible, Img } from '@utils/react' // 按需加载

// example:
isPhone(13412341234) // true

bottomVisible() // false

<Img></Img>

更新日志

  • 2023-12-23 version:1.0.1
    • 新增无副作用标识
  • 2023-12-21 version:1.0.0
    • 首次更新

包简述

devtools

JSB_jsMethod
  • app 调用 js 方法 交互事件注册
/**
@param {string} 事件方法
@return Promise<data*/ data-> app提供的参数
>
// example:
JSB_jsMethod('openModel').then(() => {
  this.openModel()
})
JSB_init
  • JSB系列方法初始化
  • 调用JSB_后缀的方法前必须先调用此方法进行初始化
// example:
JSB_init() // 直接使用即可
allEquals
  • 全等判断
  • 在两个变量之间进行深度比较以确定它们是否全等。
/**
@param {any} 对比项A
@param {any} 对比项B
@return boolean
*/
// example:
allEquals({ a: [2, { e: 3 }], b: [4], c: 'foo' }, { a: [2, { e: 3 }], b: [4], c: 'foo' }); // true
copyToClipboard
  • 将字符串复制到剪贴板
/**
@param {string} 拷贝内容
*/
// example:
copyToClipboard('Lorem ipsum') // 'Lorem ipsum' copied to clipboard
bottomVisible
  • 检查页面底部是否可见
/**
@return boolean
*/
JSB_appMethod
  • js调用app方法
/**
@param {string} 事件名
@param {any} 传递给app的参数
@return Promise<void*/
>
// example:
JSB_appMethod(name, data).then(() => console.log('success!'))
deepClone
  • 深拷贝
/**
@param {T} 拷贝内容
@return T
*/
// example:
const o = {
  a: [
    {
      b: 1
    }
  ]
}
const cloneO = deepClone(o)
debounce
  • 防抖
/**
@param {function} 执行函数 
@param {number} wait 间隔时间(ms)
@return function 设置防抖后的函数
*/
// example:
const fn = () => {
  ++a
}
const debounceFn = debounce(fn, 300)

// 执行 debounceFn 即可
changeTimeYear
  • 接受 ms 级的时间戳
  • 时间格式转化年
  • 个位自动补零
/**
@param {string | number} 时间
@return string 时间戳
*/
// example:
changeTimeYear(new Date().valueOf()) // -> YYYY-MM-DD
deleteHTMLTags
  • 从字符串中删除HTML / XML标签。
/**
@param {string} 需要处理的HTML字符串
@return string 处理后的字符串
*/
// example:
const html = '<span>i am zzy</span>'
const pureHTMLCon = deleteHTMLTags(html) // i am zzy
elementIsVisibleInViewport
  • 检查指定的元素在视口中是否可见
/**
@param {HTMLElement} el 被指定的元素
@param {boolean} partiallyVisible = false false:左右可见 true:全屏(上下左右)可见
@return 
*/
// example:
elementIsVisibleInViewport(el); // 需要左右可见
elementIsVisibleInViewport(el, true); // 需要全屏(上下左右)可以见
detectDeviceType
  • 检测移动/PC设备
/**
@return 'Mobile' | 'Desktop'  移动端/PC端
*/
exitFullscreen
  • 关闭全屏模式
formatMoney
  • 金钱格式化,间隔点为3
/**
@param {number | string} val
@return string 
*/
// example:
formatMoney(12345678) // 123,456,78
formateSeconds
  • 格式化 天:时:分:秒
/**
@param {number | string} dosurPlusTimem 剩余时间戳 - 单位为 s
@return string dd:hh:mm:ss
*/
// example:
formateSeconds(86400) // 01:00:00:00
formateSeconds(3600) // 00:01:00:00
formatFileSize
  • B转换到KB,MB,GB并保留两位小数
/**
@param {number} fileSize
@return string 转换后的值
*/
// example: 以 1000 整除模拟,方法内为 1024 标准除
formatFileSize(300421) // 300.421KB
formatFileSize(3004221221) // 3.004GB
getColonTimeFromDate
  • 返回当前24小时制时间的字符串
/**
@param {Date} 当前Date时间
@return string hh:mm:ss
*/
// example:
getColonTimeFromDate3(new Date()) // 18:31:21
getDomStyle
  • 返回指定元素的生效样式
/**
@param {HTMLElement} 指定的元素
@param {any} 指定的样式
@return string
*/
// example:
getDomStyle(document.querySelector('p'), 'font-size') // 14px
generateTree
  • 根据数组生成树结构
/**
@param {IGenerateTreeListItem[]} items 待转化结构 id,children,any
@param {null | number | string = null} parentId 首级id
@param {string = 'parentId'} selectVal tree关联id
@return any tree结构
*/
// example:
const comments = [
  { id: 1, parentId: null },
  { id: 2, parentId: 1 },
  { id: 3, parentId: 1 },
  { id: 4, parentId: 2 },
  { id: 5, parentId: 4 }
];
generateTree(comments)
{
  id: 1,
  children: [
    {
      id: 2,
      children: [
        {
          id: 4,
          children: [
            {
              id: 5,
              children: []
            }
          ]
        }
      ]
    },
    {
      id: 3,
      children: []
    }
  ]
}
formatNowTime
  • 时间戳转化为当前时间
/**
@param {number | string} time
@return string YYYY-MM-DD hh:mm:ss
*/
// example:
formatNowTime(now Date().valueOf()) // 2023-12-20 17:31:22
getScrollPosition
  • 取当前页面的滚动位置
/**
@param {Window | HTMLElement} 可选元素,默认Window位置
@return { x: number; y: number } 当前位置
*/
// example:
getScrollPosition(); // {x: 0, y: 200}
getUrlData
  • 获取目标地址参数
/**
@param {string} 地址
@return { [key: string]: string }
*/
// example:
const url = https://www.baidu.com/s?ie=UTF-8&wd=github
getUrlData(url) // { ie: 'UTF-8', wd: 'github' }
infinityScrolling
  • 无限滚动
  • 回调第一行必须设置 infinityScrollIng 的bol 属性为 false,意味着已经进程已经开始,必须等待结束(失败或者成功)才可以重新为true,才可以进行下一次的回调触发
  • react具体实现组件为 ScrollLoadingBar
/**
@param {HTMLElement} 目标节点
@param {Function} 当目标节点出现在可是区域内后出发此回调。以此实现无限滚动
@param {可选:关闭监听(只有在监听滚动条时才会有效,否则无效,可忽略(针对低版本浏览器启用监听滚动条方式进行处理))} devtools.infinityScrollIng.closeMonitor()
@return 
*/
// example:
devtools.infinityScrollIng(document.querySelector('.bottomScrollBar'), ()=>{
// 回调第一行必须设置 infinityScrollIng 的bol 属性为 false,意味着已经进程已经开始,必须等待结束(失败或者成功)才可以重新为true,才可以进行下一次的回调触发
devtools.infinityScrollIng.bol = false
//  ...some code
devtools.infinityScrollIng.bol = true // done
})
isAndroidPlatform
  • 当前设备是否是 android
/**
@return boolean 是否为安卓系统
*/
isBrowserTabFocused
  • 检查当前标签页是否活动
/**
@return boolean 是否活动
*/
isEmptyObject
  • 判断对象是否为空
/**
@param {object} 目标对象
@return boolean
*/
// example:
if(isEmptyObject(obj)) return
// ...some code
lazyImage
  • Img懒加载实现
  • 需要设置html中的img src为空,data-src属性为目标路径
  • 必须等待加载目标的 data-src 属性赋值完毕,再执行此方法
/**
@param {string} 需要懒加载Img的统一className命名,亦或者不传,直接获取全量img元素
*/
// example:
// html:
<img src={null} data-src="targetSrc" className='lazyImg' />
// js
lazyImage('lazyImg') // lazyImg 类名所有img实现懒加载
preventScroll
  • 固定滚动条
  • 功能描述:一些业务场景,如弹框出现时,需要禁止页面滚动,这是兼容安卓和 iOS 禁止页面滚动的解决方案
/**
@param {number} y轴 Number 需要被定位的 y 或者不传,默认 window.scrollY
@return number 当前被定住的 y 
*/
// example:
preventScroll
launchFullscreen
  • 某个元素开启全屏
/**
@param {HTMLDOM} 接受一个 dom 作为参数
*/
// example:
launchFullscreen(document.querySelectorById('test'))
recoverScroll
  • 恢复滚动条
  • 如果配合 preventScroll 方法使用需要现将 固定前的滚动条高度记录,再恢复时赋值给 recoverScroll 方法
/**
@param {number} 被恢复位置 Y
*/
// example:
recoverScroll(200) y200的高度恢复,相当于滚动至200
scrollToTop
  • 平滑滚动至顶部
  • 该代码段可用于平滑滚动到当前页面的顶部。
rewirteLog
  • 不显示 console.log
  • 重写log为空函数
setDomRem
  • rem实现
  • rem*16px
  • 以蓝湖rem设置为标准 设置16px的rem就是 *8
/**
@param {number = 8} 比例
*/
// example:
setDomRem(16) 1:32(蓝狐设计图)
smoothScroll
  • 滚动到指定元素区域
  • 该代码段可将指定元素平滑滚动到浏览器窗口的可见区域。
/**
@param {keyof HTMLElementTagNameMap} 指定的dom
*/
// example:
smoothScroll11('#fooBar')
typeOf
  • 增强版typeOf
  • typeOf 关键字对于null,date 都会认为是Object,不准确, 使用Object.prototype.toString.call
/**
@param {any} 判断值
@return string
*/
strTrim
  • 去除空格
/**
@param {string} 待处理字符串
@param {1 | 2 | 3 | 4}  去除空格类型 1-所有空格  2-前后空格  3-前空格 4-后空格 默认为1
@return string 处理后的内容
*/
// example:
const str = ' 1233 4'
strTrim(str, 1) // 12334
throttle
  • 节流
/**
@param {Function} func 执行函数
@param {Number} wait 间隔时间 ms
@param { leading?: boolean,trailing?: boolean } 可选options
{leading: 调用后是否立即执行一次,trailing: 结束后是否还要执行一次} 默认都为true,但都不能为false
@return  Function
*/
// example:
const fn = (n) => {
  a += n
}
const throttleFn = throttle((n) => fn(n))

regModules

isAccountNumber
  • 验证银行卡号
  • 10到30位, 覆盖对公/私账户, 参考微信支付
/**
@param {string} account
@return boolean
*/
isCreditCode
  • 验证统一社会信用代码
/**
@param {string} calue
@return boolean
*/
isColor16
  • 验证16进制颜色
/**
@param {string} val
@return boolean
*/
isEmail
  • 邮件 email
/**
@param {string} value
@return boolean
*/
isExternal
  • 判读是否为外链
/**
@param {string} path
@return boolean
*/
isEnglish
  • 是否全部为英文
/**
@param {string} dom
@return boolean
*/
isHttpAndPort
  • 验证必须带端口号的网址(或ip)
/**
@param {string} port
@return boolean
*/
isImageUrl
  • 验证图片链接地址
  • 图片格式可按需增删
/**
@param {string} src
@return boolean
*/
isIdCard
  • 验证身份证
/**
@param {string} idcard
@return boolean
*/
isMoney
  • 价格、金额 带小数的正数,小数点后最多两位
/**
@param {string} value
@return boolean
*/
isLandlineTelephone
  • 验证座机电话(国内),如: 0341-86091234
/**
@param {string} phone
@return boolean
*/
isIMEI
  • 验证手机机身码(IMEI)
/**
@param {string} imei
@return boolean
*/
isName
  • 是否为汉字(姓名)
/**
@param {string} name
@return boolean
*/
isPassword
  • 密码校验
  • a-z A-Z 0-9 long 6 < val < 21
/**
@param {string} value
@return boolean
*/
isPhone
  • 手机号
/**
@param {string} value
@return boolean
*/
isPassport
  • 验证护照(包含香港、澳门)
/**
@param {string} value
@return boolean
*/
isPhoneStrict
  • 验证手机号中国(严谨), 根据工信部2019年最新公布的手机号段
/**
@param {string} value
@return boolean
*/
isPostcode
  • 验证邮政编码(中国)
/**
@param {string} value
@return boolean
*/
isThunderLink
  • 验证迅雷链接
/**
@param {string} url
@return boolean
*/
isTrainNum
  • 验证火车车次
/**
@param {string} value
@return boolean
*/
isUrl
  • 验证链接是否有效
/**
@param {string} value
@return boolean
*/
isVersion
  • 验证版本号格式必须为X.Y.Z
/**
@param {string} value
@return boolean
*/
isWeChatNum
  • 验证微信号
  • 6至20位,以字母开头,字母,数字,减号,下划线
/**
@param {string} value
@return boolean
*/
isVideoUrl
  • 验证视频链接地址
/**
@param {string} value
@return boolean
*/
isWindowsFilePath
  • 验证window下"文件"路径
/**
@param {string} value
@return boolean
*/
isWindowsFolderPath
  • 验证window"文件夹"路径
/**
@param {string} value
@return boolean
*/
isInteger
  • 是否为整数
/**
@param {string} dom
@return boolean
*/
isLicensePlateNumber
  • 验证车牌号(新能源+非新能源)
/**
@param {string} val
@return boolean
*/

components

ErrorBoundary
  • 错误边界
  • 请在App.js中用此组件将 Route组件包裹即可展示错误之后的UI信息
  • 它在渲染期间、生命周期方法和整个组件树的构造函数中捕获错误
  • 无法捕获 事件处理,异步代码等错误

NoData
  • 无数据显示组件
/**
say: string,
  src: any,
  style: { [key: string]: string }
@param {src} 空时显示图片
@param {string} 空时显示文案
@param {{ [key: string]: string }} 样式
*/
Img
  • 此组件用于图片懒加载,配合 zzy-javascript-devtools - devtools.lazyImage() 方法使用>
  • 必须等待加载目标的 data-src 属性赋值完毕,再执行此方法
/**
@param {String} className 赋予的类名
@param {String} src 目标地址
@param {Function} click 具有点击事件能力
*/
exmaple:
ScrollLoadingBar
  • 无限滚动触发块
  • 直接链接触发事件即可
  • 需要在触发事件内结束时 赋值 infinityScrolling.bol = true
/**

  getMoreData: Function
  getDataBol: boolean
@param {boolean} getDataBol = true 是否还需要从进行下一次触发
@param {Function} getMoreData 触发后的回调
*/
exmaple:
// getMoreData首次进入时会触发一轮,所以直接在这里进行排除
<ScrollLoadingBar
  getMoreData={() => (pageIndex > 1 ? getDoctorList(true) : null)}
  getDataBol={doctorHasMore}
></ScrollLoadingBar>
TopBar
  • 顶部栏
  • 默认5.5rem,rem数值需要自主调整
/**
@param {0 | 1 | null} type: 0 - 黑色主题,1 - 白色,不传  默认为白色主题,背景为空(透明)
@param {boolean} noArrow 是否隐藏左侧箭头
@param {Function} arrowBack 左侧箭头点击触发
@param {string} title 标题
@param {string} rigTxt 右侧文字 不传则隐藏
@param {Function} clickRigTxt 右侧点击事件
*/
exmaple:
<TopBar arrowBack={back} title="首页" />

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/265800.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java web的住院管理系统论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

Linux 操作系统(用户注册、删除、权限修改等)

添加用户 格式&#xff1a;useradd 用户名 ( 添加用户 ) passwd 用户名 (给用户设置密码) Linux 用户切换原则&#xff1a; 高权限向低权限切换无需输入密码 低权限向高权限或同级用户切换需要输入密码 用户切换&#xff1a;su su – 用户名 &#xff08;用户切换&#x…

【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

蓝牙技术在物联网中的应用

随着蓝牙技术的不断演进和发展&#xff0c;蓝牙已经从单一的传统蓝牙技术发展成集传统蓝牙。高速蓝牙和低耗能蓝牙于一体的综合技术&#xff0c;不同的应用标准更是超过40个越来越广的技术领域和越来越多的应用场景&#xff0c;使得目前的蓝牙技术成为包含传感器技术、识别技术…

DRF从入门到精通三(反序列化数据校验源码分析、断言Assert、DRF之请求、响应)

文章目录 一、反序列化数据校验源码分析二、断言Assert三、DRF之请求、响应Request类和Response类请求中的Request 能够解析前端传入的编码格式响应中的Response能够响应的编码格式 一、反序列化数据校验源码分析 反序列化数据校验&#xff0c;校验顺序为&#xff1a;先校验字段…

懂机器学习?先来回答这三个问题 >>

机器学习是一种数据分析技术&#xff0c;让计算机学习人类和动物与生俱来的能力&#xff1a;从经验中学习。 机器学习算法使用计算方法直接从数据中“学习”信息&#xff0c;而不依赖于预定方程作为模型。 随着可用于学习的样本数量的增加&#xff0c;算法也会相应地提高性能。…

探索栈数据结构:深入了解其实用与实现(c语言实现栈)

上次结束了链表部分的内容&#xff1a;链接未来&#xff1a;深入理解链表数据结构&#xff08;二.c语言实现带头双向循环链表&#xff09; 然而&#xff0c;当我们涉及特定问题时&#xff0c;另一个非常有用的数据结构也开始显得至关重要——栈 栈与链表有着截然不同的特性&a…

MySQL数据库基础和基本的增删改查操作

目录 前瞻 数据库的基本概念 数据库管理系统&#xff08;DBMS&#xff09; 数据库系统(DBS) 数据库类型和常用数据库 关系型数据库 SQL 非关系型数据库 NoSQL SQL语句 简介 SQL语句分类 常用的数据类型 MySQL的六大约束特性 SQL语句的使用 创建及删除数据库和表 …

H5小游戏加固方案

今年的中国游戏产业年会上&#xff0c;小游戏成了万众瞩目的行业新风口。据伽马数据统计&#xff1a;2023年小游戏市场规模可达200亿元&#xff0c;同比增长300% 。 小游戏有着分发更精准、用户转化率更高、研发成本更低、场景适用性更强等优势&#xff0c;具备巨大的市场潜力…

openGauss学习笔记-171 openGauss 数据库运维-备份与恢复-导入数据-深层复制

文章目录 openGauss学习笔记-171 openGauss 数据库运维-备份与恢复-导入数据-深层复制171.1 使用CREATE TABLE执行深层复制171.1.1 操作步骤 171.2 使用CREATE TABLE LIKE执行深层复制171.2.1 操作步骤 171.3 通过创建临时表并截断原始表来执行深层复制171.3.1 操作步骤 openGa…

服务器数据恢复-昆腾存储StorNext文件系统下raid5数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;StorNext文件存储系统。 共有9个分别配置了24块磁盘的磁盘柜&#xff0c;其中8个磁盘柜存放普通数据&#xff0c;1个磁盘柜存放元数据。 存放元数据的磁盘柜中的24块磁盘组建了8组RAID1阵列和1组4盘RAID10阵列&#…

Java 虚拟机中的内存结构

1 内存结构 1.1 程序计数器 1.1.1 定义 Program Counter Register 程序计数器&#xff08;寄存器&#xff09; 作用&#xff1a;是记住下一条 jvm 指令的执行地址 特点&#xff1a; 是线程私有的&#xff08;每个线程独有自己的一份&#xff09;不会存在内存溢出 1.1.2 作…

、写入Shellcode到注册表上线

其实本质就是将shellcode写入到注册表中&#xff0c;然后读取注册表中的shellcode&#xff0c;然后创建线程去执行shellcode。 如下图: 写入注册表shellcode 这里将shellcode写入到注册表中&#xff0c;在我们需要的时候再去读取然后执行。 这里用到如下两个Windows API函…

Zookeeper-应用实战

Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。 ZooKeeper官方的Java客户端API。 第三方的Java客户端API&#xff0c;比如Curator。 ZooKeeper官方的客户端API提供了基本的操作:创建会话、创建节点、读取节点、更新数据、…

Leetcode—415.字符串相加【简单】

2023每日刷题&#xff08;六十八&#xff09; Leetcode—415.字符串相加 实现代码 class Solution { public:string addStrings(string num1, string num2) {string ans;int len1 num1.size();int len2 num2.size();int i len1 - 1, j len2 - 1;int sum 0, c 0;while(i…

面试题 01.01. 判定字符是否唯一(优质解法)

链接&#xff1a;面试题 01.01. 判定字符是否唯一 代码&#xff1a; class Solution {public boolean isUnique(String astr) {//s[i]仅包含小写字母&#xff0c;数据范围小于 32 位&#xff0c;我们可以使用 int 变量的比特位来代替数组// 每个小写字符对应 bitMap 中的一个比…

DETR 【目标检测里程碑的任务】

paper with code - DETR 标题 End-to-End Object Detection with Transformers end-to-end 意味着去掉了NMS的操作&#xff08;生成很多的预测框&#xff0c;nms 去掉冗余的预测框&#xff09;。因为有了NMS &#xff0c;所以调参&#xff0c;训练都会多了一道工序&#xff0c…

小程序本地文件读、写、追加数据操作,以及修改文件内容

小程序系统文件管理器 FileSystemManager 要操作/读取本地文件,首先需要创建文件或文件夹,然后再对文件进行读写操作; 首先创建文件 FileSystemManager.writeFile 可直接创建文件并写入内容 定义文件路径,此路径在读写操作时保持一致 const path = `${wx.env.USER_DATA…

在Jetpack Compose中使用ExoPlayer实现直播流和音频均衡器

在Jetpack Compose中使用ExoPlayer实现直播流和音频均衡器 背景 ExoPlayer与Media3的能力结合&#xff0c;为Android应用程序播放多媒体内容提供了强大的解决方案。在本教程中&#xff0c;我们将介绍如何设置带有Media3的ExoPlayer来支持使用M3U8 URL进行直播流。此外&#x…

html网页编写语言

html是一门语言&#xff0c;所有的网页都是用html这门语言编写出来的。 HTML&#xff08;HyperText Markup Language&#xff09;&#xff1a;超文本标记语言。 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片&…