str.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. * 检查对象是否为空
  3. * 为空则返回true
  4. * @param {Object} obj
  5. * @returns {boolean}
  6. */
  7. export const isEmpty = (obj: Object) => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object
  8. /**
  9. * 等待一段时间再执行
  10. * @param {number} milliseconds 等待毫秒
  11. * @returns {Promise<unknown>}
  12. */
  13. export const wait = async (milliseconds: number) => new Promise((resolve) => setTimeout(resolve, milliseconds))
  14. /**
  15. * 在元素后插入 HTML 字符串
  16. * @param {string} html
  17. * @param {HTMLDivElement} el
  18. */
  19. export const insertHTMLAfter = (html: string, el: HTMLDivElement) => el.insertAdjacentHTML('afterend', html)
  20. /**
  21. * 随机排列数组
  22. * @param arr
  23. */
  24. export const shuffle = (arr: any[]) => arr.sort(() => 0.5 - Math.random())
  25. /**
  26. * 计算数组的平均值
  27. * @param arr
  28. * @returns {number}
  29. */
  30. export const average = (arr: number[]) => arr.reduce((a, b) => a + b) / arr.length
  31. /**
  32. * 是否是合法手机号
  33. * @param phone
  34. * @returns {boolean}
  35. */
  36. export const isMobile = (phone: string) => /^1[0-9]{10}$/.test(phone)
  37. /**
  38. * 是否是合法邮箱
  39. * @param email
  40. * @returns {boolean}
  41. */
  42. export const isEmail = (email: string) => /^.+@.+\..+$/i.test(email)
  43. /**
  44. * 获取滚动的坐标
  45. * @param {Window} el
  46. * @returns {{x : any, y : any}}
  47. */
  48. declare global {
  49. interface Window {
  50. scrollLeft?: number
  51. scrollTop?: number
  52. }
  53. }
  54. export const getScrollPosition = (el = window) => ({
  55. x: el.scrollX !== undefined ? el.scrollX : el.scrollLeft,
  56. y: el.scrollY !== undefined ? el.scrollY : el.scrollTop
  57. })
  58. /**
  59. * 滚动到顶部
  60. */
  61. export const scrollToTop = () => {
  62. const c = document.documentElement.scrollTop || document.body.scrollTop
  63. if (c > 0) {
  64. window.requestAnimationFrame(scrollToTop)
  65. window.scrollTo(0, c - c / 8)
  66. }
  67. }
  68. export function maskPhoneNumber(phoneNumber: string) {
  69. return phoneNumber.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2');
  70. }