tiefen_space_h5/utils/tools.js

154 lines
4.3 KiB
JavaScript
Raw Normal View History

2024-07-02 23:08:38 +08:00
//格式化时间戳
export function formatDeadline(timestamp) {
2024-07-06 11:05:19 +08:00
const date = new Date(timestamp * 1000); // 时间戳以秒为单位需要乘以1000转换成毫秒
const year = date.getFullYear();
const month = ("0" + (date.getMonth() + 1)).slice(-2);
const day = ("0" + date.getDate()).slice(-2);
const hours = ("0" + date.getHours()).slice(-2);
const minutes = ("0" + date.getMinutes()).slice(-2);
const seconds = ("0" + date.getSeconds()).slice(-2);
2024-07-02 23:08:38 +08:00
2024-07-06 11:05:19 +08:00
return `${year}${month}${day}${hours}:${minutes}:${seconds}`;
}
2024-10-22 17:24:02 +08:00
export function formatTimestamp(timestamp) {
const now = new Date();
const date = new Date(timestamp * 1000);
// 检查是否是今天
if (now.toDateString() === date.toDateString()) {
return date.toLocaleTimeString(undefined, {
hour: "numeric",
minute: "numeric",
});
}
// 获取昨天的日期
const yesterday = new Date(now);
yesterday.setDate(now.getDate() - 1);
// 检查是否是昨天
if (yesterday.toDateString() === date.toDateString()) {
return `昨天 ${date.getHours()}:${String(date.getMinutes()).padStart(
2,
"0"
)}`;
}
// 检查是否是今年
if (now.getFullYear() === date.getFullYear()) {
return `${
date.getMonth() + 1
}-${date.getDate()} ${date.getHours()}:${String(date.getMinutes()).padStart(
2,
"0"
)}`;
}
// 不是今年,返回完整日期和时间
return `${date.getFullYear()}-${
date.getMonth() + 1
}-${date.getDate()} ${date.getHours()}:${String(date.getMinutes()).padStart(
2,
"0"
)}`;
}
2024-07-06 11:05:19 +08:00
// 防抖函数
export function debounce(fn, delay) {
let timer = null;
return (fnn) => {
//清除上一次的延时器
if (timer) {
clearTimeout(timer);
// return;
2024-08-05 18:59:30 +08:00
// console.log(timer);
2024-07-06 11:05:19 +08:00
}
//重新设置新的延时器
timer = setTimeout(() => {
//修改this指向问题
// fn.apply(this,value)
fn(fnn);
}, delay);
};
}
2024-07-06 16:03:15 +08:00
export function utf8Length(str) {
let length = 0;
for (let i = 0; i < str.length; i++) {
const code = str.charCodeAt(i);
if (code < 0x80) {
// 0xxxxxxx
length += 0.5;
} else if (code < 0x800) {
// 110xxxxx 10xxxxxx
length += 2;
} else if (code < 0x10000) {
// 1110xxxx 10xxxxxx 10xxxxxx
length += 1;
} else if (code <= 0x10ffff) {
// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
length += 4;
}
}
return length;
}
2024-11-06 11:52:28 +08:00
export function getVideoBase64(url) {
return new Promise((resolve, reject) => {
// 创建 video 元素
const video = document.createElement("video");
// 设置跨域属性
video.crossOrigin = "anonymous";
// 设置视频 URL
video.src = url;
// 设置视频画面宽度
video.width = "90";
// 设置视频画面高度
video.height = "90";
// 设置视频播放位置为第一帧
video.currentTime = 1;
// 设置预加载方式为自动加载
video.preload = "auto";
// 创建 canvas 元素
const canvas = document.createElement("canvas");
// 将 canvas 的宽度和高度设置为视频画面的宽度和高度
canvas.width = video.width;
canvas.height = video.height;
// 判断是否为 iOS 系统
if (/(iPad|iPhone|iPod)/gi.test(navigator.userAgent)) {
// 在 iOS 系统中,需要手动触发视频加载,然后设置自动播放和静音属性
video.load();
// video.autoplay = true;
// 在 iOS 系统中,监听 loadedmetadata 事件可以保证视频数据已经全部加载完毕
}
video.muted = true;
video.addEventListener("loadeddata", function () {
setTimeout(function () {
console.log("监听到了listen:", "loadeddata");
canvas
.getContext("2d")
.drawImage(video, 0, 0, canvas.width, canvas.height); //绘制canvas
const dataURL = canvas.toDataURL("image/jpeg"); //转换为base64
video.setAttribute("poster", dataURL);
console.log(dataURL, "dataURL");
resolve(dataURL);
// 清除内存
canvas.remove();
video.remove();
}, 100);
});
// 监听视频事件,在发生错误时 Promise 会 reject
video.addEventListener("error", function () {
reject(new Error("视频加载错误"));
// 清除内存
canvas.remove();
video.remove();
});
});
}