help.js 5.9 KB

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