help.js 7.6 KB

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