这是我参与更文挑战的第11天,活动详情查看: 更文挑战
一些常用Javascript函数
- 相对时间
/**
* @param {String|Number} timeStamp 时间戳
* @returns {String} 相对时间字符串
*/
export const getRelativeTime = timeStamp => {
// 判断当前传入的时间戳是秒格式还是毫秒
const IS_MILLISECOND = isMillisecond(timeStamp)
// 如果是毫秒格式则转为秒格式
if (IS_MILLISECOND) Math.floor(timeStamp /= 1000)
// 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型
timeStamp = Number(timeStamp)
// 获取当前时间时间戳
const currentTime = Math.floor(Date.parse(new Date()) / 1000)
// 判断传入时间戳是否早于当前时间戳
const IS_EARLY = isEarly(timeStamp, currentTime)
// 获取两个时间戳差值
let diff = currentTime - timeStamp
// 如果IS_EARLY为false则差值取反
if (!IS_EARLY) diff = -diff
let resStr = ''
const dirStr = IS_EARLY ? '前' : '后'
// 少于等于59秒
if (diff <= 59) resStr = diff + '秒' + dirStr
// 多于59秒,少于等于59分钟59秒
else if (diff > 59 && diff <= 3599) resStr = Math.floor(diff / 60) + '分钟' + dirStr
// 多于59分钟59秒,少于等于23小时59分钟59秒
else if (diff > 3599 && diff <= 86399) resStr = Math.floor(diff / 3600) + '小时' + dirStr
// 多于23小时59分钟59秒,少于等于29天59分钟59秒
else if (diff > 86399 && diff <= 2623859) resStr = Math.floor(diff / 86400) + '天' + dirStr
// 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前
else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) resStr = getDate(timeStamp)
else resStr = getDate(timeStamp, 'year')
return resStr
}
- 当前浏览器名称
/**
* @returns {String} 当前浏览器名称
*/
export const getExplorer = () => {
const ua = window.navigator.userAgent
const isExplorer = (exp) => {
return ua.indexOf(exp) > -1
}
if (isExplorer('MSIE')) return 'IE'
else if (isExplorer('Firefox')) return 'Firefox'
else if (isExplorer('Chrome')) return 'Chrome'
else if (isExplorer('Opera')) return 'Opera'
else if (isExplorer('Safari')) return 'Safari'
}
- object是否相同
/**
* @param {*} obj1 对象
* @param {*} obj2 对象
* @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串
*/
export const objEqual = (obj1, obj2) => {
const keysArr1 = Object.keys(obj1)
const keysArr2 = Object.keys(obj2)
if (keysArr1.length !== keysArr2.length) return false
else if (keysArr1.length === 0 && keysArr2.length === 0) return true
/* eslint-disable-next-line */
else return !keysArr1.some(key => obj1[key] != obj2[key])
}
- localStorage一些方法
import { validatenull } from '@/libs/validate'
import store from 'storejs'
/**
* 存储localStorage
*/
export const setStore = (params) => {
let name = params.name,
content = params.content,
type = params.type,
datetime = params.datetime;
name = `${process.env.VUE_APP_NAME}-${name}`
const obj = {
dataType: typeof (content),
content: content,
datetime: new Date().getTime()
}
if(type) obj.type = type;
try {
if(type){
window.sessionStorage.setItem(name, JSON.stringify(obj))
}else{
// localforage.setItem(name, JSON.stringify(obj))
store.set(name, JSON.stringify(obj));
}
} catch(e){
console.log(e);
}
}
/**
* 获取localStorage
*/
export const getStore = (params) => {
let {
name,
type
} = params
let obj = {}
let content
name = `${process.env.VUE_APP_NAME}-${name}`
obj = store.get(name);
if (validatenull(obj)) obj = window.sessionStorage.getItem(name)
if (validatenull(obj)) return
obj = obj?JSON.parse(obj):{}
if (obj.dataType === 'string') {
content = obj.content
} else if (obj.dataType === 'number') {
content = Number(obj.content)
} else if (obj.dataType === 'boolean') {
content = eval(obj.content)
} else if (obj.dataType === 'object') {
content = obj.content
}
return content
}
/**
* 删除localStorage
*/
export const removeStore = name => {
name = `${process.env.VUE_APP_NAME}-${name}`
store.remove(name)
window.sessionStorage.removeItem(name)
}
- 获取文件MD5
//获取文件md5
const getFileMd5 = (file,callback) => {
let fileReader = new FileReader(),
//文件每块分割2M,计算分割详情
chunkSize = 2097152,
chunks = Math.ceil(file.size / chunkSize),
currentChunk = 0,
//创建md5对象(基于SparkMD5)
spark = new SparkMD5()
//每块文件读取完毕之后的处理
fileReader.onload = function (e) {
//每块交由sparkMD5进行计算
spark.appendBinary(e.target.result)
currentChunk++
//如果文件处理完成计算MD5,如果还有分片继续处理
if (currentChunk < chunks) {
loadNext()
} else {
callback(spark.end())
}
}
//处理单片文件的上传
function loadNext () {
var start = currentChunk * chunkSize,
end = start + chunkSize >= file.size ? file.size : start + chunkSize
fileReader.readAsBinaryString(file.slice(start, end))
}
loadNext()
};
- 以上所述是给大家介绍的详解JS,希望对大家有所帮助