123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- import { appVersionCode } from '@/http/configAPI.js'
- import FingerprintJS from '@fingerprintjs/fingerprintjs'
- var moment = require('moment')
- export function getQueryString(name) {
- let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
- let r = window.location.search.substr(1).match(reg);
- if (r != null) {
- return window.decodeURIComponent(r[2]);
- }
- return null;
- }
- export function getQueryStringByUrl(url = "", name = "") {
- let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
- let r = url.split("?")[1].match(reg);
- if (r != null) {
- return window.decodeURIComponent(r[2]);
- }
- return null;
- }
- export function debounce(fn, delay) {
- let timer; // 定时器
- return function (...args) {
- // 形成闭包
- // args 为函数调用时传的参数。
- let context = this;
- timer && clearTimeout(timer); // 当函数再次执行时,清除定时器,重新开始计时
- // 利用定时器,让指定函数延迟执行。
- timer = setTimeout(function () {
- // 执行传入的指定函数,利用apply更改this绑定和传参
- fn.apply(context, args);
- }, delay);
- };
- }
- export function throttle(fn, thresh) {
- var timeout;
- var start = new Date();
- var threshhold = thresh || 500;
- return function () {
- var context = this,
- args = arguments,
- curr = new Date() - 0;
- clearTimeout(timeout); //总是干掉事件回调
- if (curr - start >= threshhold) {
- fn.apply(context, args); //只执行一部分方法,这些方法是在某个时间段内执行一次
- start = curr;
- } else {
- // 让方法在脱离事件后也能执行一次
- timeout = setTimeout(function () {
- fn.apply(context, args);
- }, threshhold);
- }
- };
- }
- export function setStorage(key, value) {
- return localStorage.setItem(key, JSON.stringify(value) || '');
- }
- export function getStorage(key) {
- const item = localStorage.getItem(key);
- try {
- return item ? JSON.parse(item) : "";
- } catch (e) {
- return item;
- }
- }
- export function guid() {
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
- var r = (Math.random() * 16) | 0,
- v = c == "x" ? r : (r & 0x3) | 0x8;
- return v.toString(16);
- });
- }
- export function scaleNumber(num) {
- let length = num.toString().split(".")[1].length;
- let scale = "1";
- for (let i = 0; i < length; i++) {
- scale += "0";
- }
- let val = num * scale;
- return {
- val,
- scale,
- };
- }
- export function getBit(value) {
- const reg = /([0-9]+\.[0-9]{4})[0-9]*/;
- if (value) {
- let str = value.toString();
- str = str.replace(reg, "$1");
- return str;
- } else {
- return value;
- }
- }
- export function getTargetElementWhenClick(e) {
- const { target, path } = e;
- let result = null;
- if (Array.isArray(path) && path.length > 0) {
- result = path.find((item) => item.denetClickLogkey)
- }
- return result
- }
- export function setCookie(cname, cvalue, exdays) {
- var d = new Date();
- d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
- var expires = "expires=" + d.toGMTString();
- document.cookie = cname + "=" + cvalue + "; " + expires;
- }
- export function getCookie(name) {
- var strcookie = document.cookie; //获取cookie字符串
- var arrcookie = strcookie.split("; "); //分割
- //遍历匹配
- for (var i = 0; i < arrcookie.length; i++) {
- var arr = arrcookie[i].split("=");
- if (arr[0] == name) {
- return arr[1];
- }
- }
- return "";
- }
- export function nextTick(fn, time = 50) {
- return new Promise((resolve, reject) => {
- setTimeout(() => {
- if (fn) fn();
- resolve();
- }, time);
- });
- }
- export function getBrowser() {
- let browser;
- let UserAgent = navigator.userAgent.toLowerCase();
- if (UserAgent.indexOf("chrome") > -1 && UserAgent.indexOf("safari") > -1) {
- browser = `Chrome`;
- } else if (UserAgent.indexOf("firefox") > -1) {
- browser = `Firefox`;
- } else if (UserAgent.indexOf("opera") > -1) {
- browser = `Opera`;
- } else if (
- UserAgent.indexOf("safari") > -1 &&
- UserAgent.indexOf("chrome") == -1
- ) {
- browser = `Safari`;
- } else if (UserAgent.indexOf("edge") > -1) {
- browser = `Edge`;
- } else {
- browser = `Other`;
- }
- return browser;
- }
- export function getOffsetRect(element) {
- var oTop = element.offsetTop;
- var oLeft = element.offsetLeft;
- var current = element.offsetParent;
- while (current !== null) {
- oTop += current.offsetTop;
- oLeft += current.offsetLeft;
- current = current.offsetParent;
- }
- return {
- top: oTop,
- left: oLeft,
- };
- }
- export function formatSecondsAsTime(secs) {
- if (secs <= 0) {
- return "00:00:00";
- }
- var hr = Math.floor(secs / 3600);
- var min = Math.floor((secs - hr * 3600) / 60);
- var sec = Math.floor(secs - hr * 3600 - min * 60);
- var text;
- if (hr < 10) {
- hr = "0" + hr;
- }
- if (min < 10) {
- min = "0" + min;
- }
- if (sec < 10) {
- sec = "0" + sec;
- }
- text = hr + ":" + min + ":" + sec;
- return text;
- }
- // 抽奖红包 left
- export function formatSecondsAsDaysOrTime(secs, showLeft = true) {
- if (secs <= 0) {
- return "00:00:00";
- }
- let text = "";
- var hr = Math.floor(secs / 3600);
- if (hr >= 24) {
- let day = parseInt(hr / 24)
- text = showLeft ? `${day} days left` : `${day} days`
- } else {
- text = formatSecondsAsTime(secs);
- }
- return text;
- }
- // 时间格式化 => *d *h
- export function formatSecondsAsDayHour(secs) {
- let text = "";
- if (secs <= 0) {
- return "0h";
- }
- var hr = Math.floor(secs / 3600);
- if (hr >= 24) {
- let day = parseInt(hr / 24);
- text += `${day}d `;
- }
- let hour = parseInt(hr % 24);
- if (hour > 0) {
- text += `${hour}h`;
- }
- return text;
- }
- export function checkURL(URL) {
- var str = URL;
- //判断URL地址的正则表达式为:http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
- // /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/
- var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
- var objExp = new RegExp(Expression);
- if (objExp.test(str) == true) {
- return true;
- } else {
- return false;
- }
- }
- let $_data = []
- export function $(key, cache = true) {
- if (!key || typeof (key) != 'string') {
- return null
- }
- // 不使用缓存
- if (!cache) {
- return document.querySelector(key)
- }
- let _dom
- for (let i in $_data) {
- if ($_data[i].key == key) {
- _dom = $_data[i].element
- break
- }
- }
- // 没有缓存
- if (!_dom) {
- _dom = document.querySelector(key)
- if (_dom) {
- $_data.push({ key, element: _dom })
- }
- }
- return _dom
- }
- export const getInnerIframeURL = (url) => {
- let iframeUrl = url;
- if (url.includes('?')) {
- iframeUrl += `&appVersionCode=${appVersionCode}`;
- } else {
- iframeUrl += `?appVersionCode=${appVersionCode}`;
- }
- return iframeUrl;
- }
- export const getVisitorId = async () => {
- const fpPromise = FingerprintJS.load();
- let result = {};
- const fp = await fpPromise
- result = await fp.get();
- return result;
- }
- export const getBeforeTimeFormat = (timestamp) => {
- let _d1 = moment(new Date().getTime())
- let _d2 = moment(timestamp)
- const plural = (n, s) => {
- let _str = `${n} ${s} ago`
- if (n > 1) {
- _str = `${n} ${s}s ago`
- }
- return _str
- }
- let _d = moment.duration(_d1.diff(_d2)).days()
- if (_d) {
- return plural(_d, 'day')
- }
- let _h = moment.duration(_d1.diff(_d2)).hours()
- if (_h) {
- return plural(_h, 'hour')
- }
- let _m = moment.duration(_d1.diff(_d2)).minutes()
- if (_m) {
- return plural(_m, 'min')
- }
- let _s = moment.duration(_d1.diff(_d2)).seconds()
- return plural(_s, 'sec')
- }
- export function isMobileTwitter() {
- let isMobile = false;
- if(window.location.href.startsWith('https://mobile.twitter.com')) {
- isMobile = true;
- }
- return isMobile;
- }
|