一、前言
适用场景:
- 复制文本
- 复制链接
- 复制段落
- 复制账号、手机号
- ···
二、实现方法
1、clipboard API
- 剪贴板 clipboard API 提供了响应剪贴板命令(剪切、复制和粘贴)与异步读写系统剪贴板的能力;
- 本次仅演示复制文本,其他Api可自行探索。
<template>
<div class="box">
<button style="margin: 20px" class="copy" @click="copy(data.text)">复制</button>
</div>
</template>
<script setup>
import { ref, reactive, toRefs, watch, computed, defineProps } from "vue";
import { useStore } from "vuex";
import { useRoute, useRouter } from "vue-router";
const route = useRoute();
const router = useRouter();
const store = useStore();
const data = reactive({
text:'这是一段内容'
});
const copy = (val) => {
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(val)
} else {
const textArea = document.createElement('textarea')
textArea.value = val
document.body.appendChild(textArea)
textArea.focus()
textArea.select()
return new Promise((res, rej) => {
document.execCommand('copy') ? res() : rej()
textArea.remove()
})
}
};
</script>
<style scoped lang="scss"></style>
2、vue-clipboard3插件
npm install --save vue-clipboard3
import useClipboard from 'vue-clipboard3';
const { toClipboard } = useClipboard();
const copy = async (val) => {
try {
await toClipboard(val);
console.log('复制成功!')
} catch (e) {
console.log(e);
}
};