help.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. import { appVersionCode } from '@/http/configAPI.js'
  2. export function getQueryString(name) {
  3. let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  4. let r = window.location.search.substr(1).match(reg);
  5. if (r != null) {
  6. return window.decodeURIComponent(r[2]);
  7. }
  8. return null;
  9. }
  10. export function getQueryStringByUrl(url = "", name = "") {
  11. let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  12. let r = url.split("?")[1].match(reg);
  13. if (r != null) {
  14. return window.decodeURIComponent(r[2]);
  15. }
  16. return null;
  17. }
  18. export function debounce(fn, delay) {
  19. let timer; // 定时器
  20. return function (...args) {
  21. // 形成闭包
  22. // args 为函数调用时传的参数。
  23. let context = this;
  24. timer && clearTimeout(timer); // 当函数再次执行时,清除定时器,重新开始计时
  25. // 利用定时器,让指定函数延迟执行。
  26. timer = setTimeout(function () {
  27. // 执行传入的指定函数,利用apply更改this绑定和传参
  28. fn.apply(context, args);
  29. }, delay);
  30. };
  31. }
  32. export function throttle(fn, thresh) {
  33. var timeout;
  34. var start = new Date();
  35. var threshhold = thresh || 500;
  36. return function () {
  37. var context = this,
  38. args = arguments,
  39. curr = new Date() - 0;
  40. clearTimeout(timeout); //总是干掉事件回调
  41. if (curr - start >= threshhold) {
  42. fn.apply(context, args); //只执行一部分方法,这些方法是在某个时间段内执行一次
  43. start = curr;
  44. } else {
  45. // 让方法在脱离事件后也能执行一次
  46. timeout = setTimeout(function () {
  47. fn.apply(context, args);
  48. }, threshhold);
  49. }
  50. };
  51. }
  52. export function setStorage(key, value) {
  53. return localStorage.setItem(key, JSON.stringify(value) || '');
  54. }
  55. export function getStorage(key) {
  56. const item = localStorage.getItem(key);
  57. try {
  58. return item ? JSON.parse(item) : "";
  59. } catch (e) {
  60. return item;
  61. }
  62. }
  63. export function guid() {
  64. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
  65. var r = (Math.random() * 16) | 0,
  66. v = c == "x" ? r : (r & 0x3) | 0x8;
  67. return v.toString(16);
  68. });
  69. }
  70. export function scaleNumber(num) {
  71. let length = num.toString().split(".")[1].length;
  72. let scale = "1";
  73. for (let i = 0; i < length; i++) {
  74. scale += "0";
  75. }
  76. let val = num * scale;
  77. return {
  78. val,
  79. scale,
  80. };
  81. }
  82. export function getBit(value) {
  83. const reg = /([0-9]+\.[0-9]{4})[0-9]*/;
  84. if (value) {
  85. let str = value.toString();
  86. str = str.replace(reg, "$1");
  87. return str;
  88. } else {
  89. return value;
  90. }
  91. }
  92. export function getTargetElementWhenClick(e) {
  93. const { target, path } = e;
  94. let result = null;
  95. if (Array.isArray(path) && path.length > 0) {
  96. result = path.find((item) => item.denetClickLogkey)
  97. }
  98. return result
  99. }
  100. export function getCookie(name) {
  101. var strcookie = document.cookie; //获取cookie字符串
  102. var arrcookie = strcookie.split("; "); //分割
  103. //遍历匹配
  104. for (var i = 0; i < arrcookie.length; i++) {
  105. var arr = arrcookie[i].split("=");
  106. if (arr[0] == name) {
  107. return arr[1];
  108. }
  109. }
  110. return "";
  111. }
  112. export function nextTick(fn, time = 50) {
  113. return new Promise((resolve, reject) => {
  114. setTimeout(() => {
  115. if (fn) fn();
  116. resolve();
  117. }, time);
  118. });
  119. }
  120. export function getBrowser() {
  121. let browser;
  122. let UserAgent = navigator.userAgent.toLowerCase();
  123. if (UserAgent.indexOf("chrome") > -1 && UserAgent.indexOf("safari") > -1) {
  124. browser = `Chrome`;
  125. } else if (UserAgent.indexOf("firefox") > -1) {
  126. browser = `Firefox`;
  127. } else if (UserAgent.indexOf("opera") > -1) {
  128. browser = `Opera`;
  129. } else if (
  130. UserAgent.indexOf("safari") > -1 &&
  131. UserAgent.indexOf("chrome") == -1
  132. ) {
  133. browser = `Safari`;
  134. } else if (UserAgent.indexOf("edge") > -1) {
  135. browser = `Edge`;
  136. } else {
  137. browser = `Other`;
  138. }
  139. return browser;
  140. }
  141. export function getOffsetRect(element) {
  142. var oTop = element.offsetTop;
  143. var oLeft = element.offsetLeft;
  144. var current = element.offsetParent;
  145. while (current !== null) {
  146. oTop += current.offsetTop;
  147. oLeft += current.offsetLeft;
  148. current = current.offsetParent;
  149. }
  150. return {
  151. top: oTop,
  152. left: oLeft,
  153. };
  154. }
  155. export function formatSecondsAsTime(secs) {
  156. if (secs <= 0) {
  157. return "00:00:00";
  158. }
  159. var hr = Math.floor(secs / 3600);
  160. var min = Math.floor((secs - hr * 3600) / 60);
  161. var sec = Math.floor(secs - hr * 3600 - min * 60);
  162. var text;
  163. if (hr < 10) {
  164. hr = "0" + hr;
  165. }
  166. if (min < 10) {
  167. min = "0" + min;
  168. }
  169. if (sec < 10) {
  170. sec = "0" + sec;
  171. }
  172. text = hr + ":" + min + ":" + sec;
  173. return text;
  174. }
  175. // 抽奖红包 left
  176. export function formatSecondsAsDaysOrTime(secs, showLeft = true) {
  177. if (secs <= 0) {
  178. return "00:00:00";
  179. }
  180. let text = "";
  181. var hr = Math.floor(secs / 3600);
  182. if (hr >= 24) {
  183. let day = parseInt(hr / 24)
  184. text = showLeft ? `${day} days left` : `${day} days`
  185. } else {
  186. text = formatSecondsAsTime(secs);
  187. }
  188. return text;
  189. }
  190. // 时间格式化 => *d *h
  191. export function formatSecondsAsDayHour(secs) {
  192. let text = "";
  193. if (secs <= 0) {
  194. return "0h";
  195. }
  196. var hr = Math.floor(secs / 3600);
  197. if (hr >= 24) {
  198. let day = parseInt(hr / 24);
  199. text += `${day}d `;
  200. }
  201. let hour = parseInt(hr % 24);
  202. if (hour > 0) {
  203. text += `${hour}h`;
  204. }
  205. return text;
  206. }
  207. export function checkURL(URL) {
  208. var str = URL;
  209. //判断URL地址的正则表达式为:http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
  210. // /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/
  211. var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
  212. var objExp = new RegExp(Expression);
  213. if (objExp.test(str) == true) {
  214. return true;
  215. } else {
  216. return false;
  217. }
  218. }
  219. let $_data = []
  220. export function $(key, cache = true) {
  221. if (!key || typeof (key) != 'string') {
  222. return null
  223. }
  224. // 不使用缓存
  225. if (!cache) {
  226. return document.querySelector(key)
  227. }
  228. let _dom
  229. for (let i in $_data) {
  230. if ($_data[i].key == key) {
  231. _dom = $_data[i].element
  232. break
  233. }
  234. }
  235. // 没有缓存
  236. if (!_dom) {
  237. _dom = document.querySelector(key)
  238. if (_dom) {
  239. $_data.push({ key, element: _dom })
  240. }
  241. }
  242. return _dom
  243. }
  244. export const getInnerIframeURL = (url) => {
  245. let iframeUrl = url;
  246. if (url.includes('?')) {
  247. iframeUrl += `&appVersionCode=${appVersionCode}`;
  248. } else {
  249. iframeUrl += `?appVersionCode=${appVersionCode}`;
  250. }
  251. return iframeUrl;
  252. }