42 lines
1.1 KiB
TypeScript
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
|
|
} |