utils工具
export default {
isActivityTime,
longPress,
appendScript,
appendLink,
preloadFont,
addStyleToHead,
isWx,
isComWx,
getUUid,
objToUrl,
jsonp,
clickLog,
exposureLog,
sendLog,
getUrlParam,
loadRes,
_localStorage,
filterTag,
random,
numberToChinese,
DOM,
parseQueryString,
stringifyQueryString,
_sessionStorage,
scrollIntoId,
downloadUrlFile,
}
function isActivityTime(startTime, endTime, systemTime = Date.now(), isReturnCode = false) {
console.table([
{
startTime,
endTime,
systemTime,
isReturnCode,
startTimeStr: new Date(startTime).toLocaleString(),
endTimeStr: new Date(endTime).toLocaleString(),
systemTimeStr: new Date(systemTime).toLocaleString()
}
])
const isFail = (!startTime || !endTime || startTime == endTime)
const startResult = (systemTime > startTime)
const endResult = systemTime <= endTime
const result = (startResult && endResult)
if (isReturnCode) {
if (isFail) {
return 1
} else if (!startResult) {
return 2
} else if (!endResult) {
return 3
} else {
return 4
}
} else {
return (!isFail && result)
}
}
function longPress(fn = () => { }, dom) {
let timeout = 0;
const $this = dom;
$this.addEventListener('touchstart', () => {
timeout = setTimeout(fn, 800);
}, false);
$this.addEventListener('touchend', () => {
clearTimeout(timeout);
}, false);
}
export function touchMove(fn = () => { }, dom, direction) {
let timeout = 0;
const $this = dom;
let startClientX = 0
let startClientY = 0
let moveClientX = 0
let moveClientY = 0
$this.addEventListener('touchstart', (e) => {
startClientX = e.touches[0].clientX
startClientY = e.touches[0].clientY
timeout = setTimeout(() => {
console.info("startClientY", startClientY)
console.info("moveClientY", moveClientY)
if (moveClientY - startClientY < 15) {
return
}
fn()
}, 200);
}, false);
$this.addEventListener('touchmove', (e) => {
moveClientX = e.touches[0].clientX
moveClientY = e.touches[0].clientY
}, false);
$this.addEventListener('touchend', () => clearTimeout(timeout), false);
}
function appendScript(url) {
return new Promise((resolve, reject) => {
const el = document.createElement('script')
el.src = url
el.onload = function () {
resolve()
}
el.onerror = function () {
reject(`append script failed: ${url}`)
document.head.removeChild(el)
}
document.head.appendChild(el)
})
}
export const AS_CONST = {
JS: "script",
FONT: "font",
STYLE: "style",
AUDIO: "audio",
VIDEO: "video",
DOCUMENT: "document",
IMAGE: "image",
FETCH: "fetch",
WORKER: "worker"
}
function appendLink(url, type = AS_CONST.FONT, onload, onerror) {
return new Promise((resolve) => {
const link = document.createElement('link')
link.rel = 'preload'
link.href = url
link.as = type
link.crossOrigin = 'anonymous'
link.onload = () => {
onload && onload()
resolve(true)
document.head.removeChild(link)
}
link.onerror = () => {
onerror && onerror()
resolve(false)
document.head.removeChild(link)
}
document.head.appendChild(link)
})
}
function addStyleToHead(styleInnerHTML) {
const style = document.createElement('style')
style.id = Math.random()
style.innerHTML = styleInnerHTML
document.getElementsByTagName('head')[0].appendChild(style)
}
function preloadFont(url, fontName) {
appendLink(url, "font", addStyleToHead(`
@font-face {
font-family: '${fontName}';
src: url('${url}')
}
`))
}
function isWx() {
return /micromessenger/i.test(navigator.userAgent);
}
function isComWx() {
return /wxwork/i.test(navigator.userAgent);
}
function getUUid() {
crypto.randomUUID()
}
function jsonp(url, params) {
const src = url + '?' + objToUrl(params);
const scriptEl = document.createElement('script');
scriptEl.src = src;
scriptEl.onload = function () {
document.body.removeChild(scriptEl);
};
scriptEl.onerror = function () {
document.body.removeChild(scriptEl);
};
document.body.appendChild(scriptEl);
}
function objToUrl(data) {
data = data ?? false
if (!data) return "";
const arr = [];
for (const param in data) {
arr.push(encodeURIComponent(param) + '=' + encodeURIComponent(data[param]));
}
arr.push('_=' + Date.now());
return arr.join('&');
}
function sendLog(type, id, params = {}) {
const projectID = CFG.projectId;
const appID = CFG.appID
const domain = '//embedlog.duiba.com.cn';
const dpm = `${appID || 'appID'}.110.${id}.1`;
const dcm = `202.${projectID || 'projectID'}.0.0`;
const params = {
appId: appID,
dpm,
dcm,
domain
};
Object.assign(params, params)
const isExposure = (type == "exposure");
if (isExposure) {
jsonp('//embedlog.duiba.com.cn/exposure/standard', params);
} else {
jsonp('/log/click', params);
}
}
function clickLog(id, params) {
sendLog("click", id, params)
}
function exposureLog(id, params) {
sendLog("exposure", id, params)
}
export function getUrlParam(name) {
let reg = new RegExp('(^|&?)' + name + '=([^&]*)(&|$)', 'i')
let r = window.location.href.substr(1).match(reg)
if (r != null) {
return decodeURI(r[2])
}
return undefined
}
export const loadRes = function (name, type, fn) {
let ref
if (type === 'js') {
ref = document.createElement('script')
ref.setAttribute('type', 'text/JavaScript')
ref.setAttribute('src', name)
} else if (type === 'css') {
ref = document.createElement('link')
ref.setAttribute('rel', 'stylesheet')
ref.setAttribute('type', 'text/css')
ref.setAttribute('href', name)
} else if (type === 'style') {
ref = document.createElement('style')
ref.innerhtml = name
}
if (typeof ref !== 'undefined') {
document.getElementsByTagName('head')[0].appendChild(ref)
ref.onload = function () {
typeof fn === 'function' && fn()
}
}
}
export const _localStorage = {
set: function (name, value, day) {
let d = new Date()
let time = 0
day = (typeof (day) === 'undefined' || !day) ? 1 : day
time = d.setHours(d.getHours() + (24 * day))
localStorage.setItem(name, JSON.stringify({
data: value,
time: time
}))
},
get: function (name) {
let data = localStorage.getItem(name)
if (!data) {
return null
}
let obj = JSON.parse(data)
if (new Date().getTime() > obj.time) {
localStorage.removeItem(name)
return null
} else {
return obj.data
}
},
clear: function (name) {
if (name) {
localStorage.removeItem(name)
} else {
localStorage.clear()
}
}
}
export const filterTag = function (str) {
str = str.replace(/&/ig, '&')
str = str.replace(/</ig, '<')
str = str.replace(/>/ig, '>')
str = str.replace(' ', ' ')
return str
}
export const random = function (min, max) {
if (arguments.length === 2) {
return Math.floor(min + Math.random() * ((max + 1) - min))
} else {
return null
}
}
export const numberToChinese = function (num) {
let AA = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十')
let BB = new Array('', '十', '百', '仟', '萬', '億', '点', '')
let a = ('' + num).replace(/(^0*)/g, '').split('.')
let k = 0
let re = ''
for (let i = a[0].length - 1; i >= 0; i--) {
switch (k) {
case 0:
re = BB[7] + re
break
case 4:
if (!new RegExp('0{4}//d{' + (a[0].length - i - 1) + '}$').test(a[0])) {
re = BB[4] + re
}
break
case 8:
re = BB[5] + re
BB[7] = BB[5]
k = 0
break
}
if (k % 4 === 2 && a[0].charAt(i + 2) !== 0 && a[0].charAt(i + 1) === 0) {
re = AA[0] + re
}
if (a[0].charAt(i) !== 0) {
re = AA[a[0].charAt(i)] + BB[k % 4] + re
}
k++
}
if (a.length > 1) {
re += BB[6]
for (let i = 0; i < a[1].length; i++) {
re += AA[a[1].charAt(i)]
}
}
if (re === '一十') {
re = '十'
}
if (re.match(/^一/) && re.length === 3) {
re = re.replace('一', '')
}
return re
}
export const DOM = {
$: function (selector) {
let type = selector.substring(0, 1)
if (type === '#') {
if (document.querySelecotor) return document.querySelector(selector)
return document.getElementById(selector.substring(1))
} else if (type === '.') {
if (document.querySelecotorAll) return document.querySelectorAll(selector)
return document.getElementsByClassName(selector.substring(1))
} else {
return document['querySelectorAll' ? 'querySelectorAll' : 'getElementsByTagName'](selector)
}
},
hasClass: function (ele, name) {
return ele.className.match(new RegExp('(\\s|^)' + name + '(\\s|$)'))
},
addClass: function (ele, name) {
if (!this.hasClass(ele, name)) ele.className += ' ' + name
},
removeClass: function (ele, name) {
if (this.hasClass(ele, name)) {
let reg = new RegExp('(\\s|^)' + name + '(\\s|$)')
ele.className = ele.className.replace(reg, '')
}
},
replaceClass: function (ele, newName, oldName) {
this.removeClass(ele, oldName)
this.addClass(ele, newName)
},
siblings: function (ele) {
console.log(ele.parentNode)
let chid = ele.parentNode.children,
eleMatch = []
for (let i = 0, len = chid.length; i < len; i++) {
if (chid[i] !== ele) {
eleMatch.push(chid[i])
}
}
return eleMatch
},
getByStyle: function (obj, name) {
if (obj.currentStyle) {
return obj.currentStyle[name]
} else {
return getComputedStyle(obj, false)[name]
}
},
domToString: function (htmlDOM) {
var div = document.createElement('div')
div.appendChild(htmlDOM)
return div.innerHTML
},
stringToDom: function (htmlString) {
var div = document.createElement('div')
div.innerHTML = htmlString
return div.children[0]
}
}
export const parseQueryString = function (url) {
url = !url ? window.location.href : url;
if (url.indexOf('?') === -1) {
return {};
}
let search = url[0] === '?' ? url.substr(1) : url.substring(url.lastIndexOf('?') + 1);
if (search === '') {
return {};
}
search = search.split('&');
let query = {};
for (let i = 0; i < search.length; i++) {
let pair = search[i].split('=');
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
}
return query;
}
export const stringifyQueryString = function (obj) {
if (!obj) return '';
let pairs = [];
for (let key in obj) {
let value = obj[key];
if (value instanceof Array) {
for (let i = 0; i < value.length; ++i) {
pairs.push(encodeURIComponent(key + '[' + i + ']') + '=' + encodeURIComponent(value[i]));
}
continue;
}
pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
return pairs.join('&');
}
export function scrollIntoId(id) {
document.getElementById(id).scrollIntoView();
}
export const _sessionStorage = {
getItem(key) {
let info = sessionStorage.getItem(key)
if (info) {
const { time, inTime, key, value } = info = JSON.parse(info)
const nowTime = new Date().getTime()
console.log('时间对比 nowTime,inTime,time', nowTime, inTime, time)
if (!time || (nowTime - inTime <= time)) {
return value
} else {
console.log('说明已经过期')
sessionStorage.removeItem(key)
}
}
},
setItem(key, value, time) {
sessionStorage.setItem(key, JSON.stringify({
time,
inTime: new Date().getTime(),
key,
value
}))
},
removeItem(key) {
console.log('手动清除session')
sessionStorage.removeItem(key)
},
}
export function downloadUrlFile(url, name) {
console.log('下載的數據 saveAs ==》data', data)
var urlObject = window.URL || window.webkitURL || window;
var export_blob = new Blob([data]);
console.log('document.createElementNS', document.createElementNS)
if (window.navigator.msSaveBlob) {
try {
window.navigator.msSaveBlob(export_blob, `${name}.mp3`)
} catch (e) {
console.log(e);
}
} else {
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
save_link.href = urlObject.createObjectURL(export_blob);
save_link.download = name;
save_link.click();
}
}