ansnid-anse/src/hooks/useCopy.ts
2023-08-16 11:34:07 +08:00

42 lines
1.1 KiB
TypeScript

import { createEffect, createSignal } from 'solid-js'
import { writeClipboard } from '@solid-primitives/clipboard'
export const useClipboardCopy = (source: string, delay = 1000) => {
const [copied, setCopied] = createSignal(false)
//判断平台
const isMobile = () => {
let flag = navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
);
return flag;
}
//手机端复制功能
const h5CopyText = (text: string) => {
var tempInput = document.createElement("input");
tempInput.value = text;
document.body.appendChild(tempInput);
tempInput.select();
document.execCommand("copy");
document.body.removeChild(tempInput);
};
const copy = async () => {
if (isMobile()) {
//复制功能
writeClipboard(source)
} else {
h5CopyText(source)
}
setCopied(true)
}
createEffect(() => {
if (copied()) {
const timer = setTimeout(() => setCopied(false), delay)
return () => clearTimeout(timer)
}
})
return [copied, copy] as const
}