bunny-admin-element-thin-i18n/other-views/able/directives.vue

164 lines
4.2 KiB
Vue
Raw Normal View History

2024-05-11 14:48:02 +08:00
<script setup lang="ts">
import { ref } from "vue";
import { message } from "@/utils/message";
defineOptions({
name: "Directives"
});
const search = ref("");
const searchTwo = ref("");
const searchThree = ref("");
const searchFour = ref("");
const searchFive = ref("");
const searchSix = ref("copy");
const text = ref("可复制的文本");
const long = ref(false);
const cbText = ref("");
const idx = ref(0);
function onInput() {
message(search.value);
}
function onInputTwo() {
message(searchTwo.value);
}
function onInputThree({ name, sex }) {
message(`${name}${sex}${searchThree.value}`);
}
function onInputFour() {
message(searchFour.value);
}
function onInputFive({ name, sex }) {
message(`${name}${sex}${searchFive.value}`);
}
function onLongpress() {
long.value = true;
}
function onCustomLongpress() {
long.value = true;
}
function onCbLongpress() {
idx.value += 1;
long.value = true;
cbText.value = `持续回调${idx.value}`;
}
function onReset() {
long.value = false;
cbText.value = "";
idx.value = 0;
}
</script>
<template>
<el-card shadow="never">
<template #header>
<div class="card-header">
<p class="font-medium">自定义防抖截流文本复制长按指令</p>
<el-link
class="mt-2"
href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/able/directives.vue"
target="_blank"
>
代码位置 src/views/able/directives.vue
</el-link>
</div>
</template>
<div class="mb-2">
防抖指令连续输入只会执行第一次点击事件立即执行
<el-input
v-model="search"
v-optimize="{
event: 'input',
fn: onInput,
immediate: true,
timeout: 1000
}"
class="!w-[200px]"
clearable
@clear="onInput"
/>
</div>
<div class="mb-2">
防抖指令连续输入只会执行最后一次事件延后执行
<el-input
v-model="searchTwo"
v-optimize="{ event: 'input', fn: onInputTwo, timeout: 400 }"
class="!w-[200px]"
clearable
/>
</div>
<div>
防抖指令连续输入只会执行最后一次事件延后执行传参用法
<el-input
v-model="searchThree"
v-optimize="{
event: 'input',
fn: onInputThree,
timeout: 400,
params: { name: '小明', sex: '男' }
}"
class="!w-[200px]"
clearable
/>
</div>
<el-divider />
<div class="mb-2">
节流指令连续输入每一秒只会执行一次事件
<el-input
v-model="searchFour"
v-optimize:throttle="{ event: 'input', fn: onInputFour, timeout: 1000 }"
class="!w-[200px]"
clearable
/>
</div>
<div>
节流指令连续输入每一秒只会执行一次事件传参用法
<el-input
v-model="searchFive"
v-optimize:throttle="{
event: 'input',
fn: onInputFive,
params: { name: '小明', sex: '男' }
}"
class="!w-[200px]"
clearable
/>
</div>
<el-divider />
<div class="mb-2">
文本复制指令双击输入框内容即可复制
<el-input v-model="searchSix" v-copy="searchSix" class="!w-[200px]" />
</div>
<div>
文本复制指令自定义触发事件单击复制
<span v-copy:click="text" class="text-sky-500">{{ text }}</span>
</div>
<el-divider />
<el-space wrap>
长按指令
<el-button v-longpress="onLongpress">长按默认500ms</el-button>
<el-button v-longpress:1000="onCustomLongpress">
自定义长按时长1000ms
</el-button>
<el-button v-longpress:2000:200="onCbLongpress">
2秒后每200ms持续回调
</el-button>
<el-button @click="onReset"> 重置状态 </el-button>
<el-tag :type="long ? 'success' : 'info'" class="ml-2" size="large">
{{ long ? "当前为长按状态" : "当前非长按状态" }}
</el-tag>
<el-tag v-if="cbText" type="danger" class="ml-2" size="large">
{{ cbText }}
</el-tag>
</el-space>
</el-card>
</template>