feat: 添加打字机组件demo

This commit is contained in:
xiaoxian521 2022-10-19 18:54:26 +08:00
parent f9cf804627
commit 5dbba0f3ff
8 changed files with 87 additions and 1 deletions

View File

@ -48,6 +48,7 @@ menus:
hsflowChart: Flow Chart hsflowChart: Flow Chart
hsseamless: Seamless Scroll hsseamless: Seamless Scroll
hscontextmenu: Context Menu hscontextmenu: Context Menu
hstypeit: Typeit Components
hsmenus: MultiLevel Menu hsmenus: MultiLevel Menu
hsmenu1: Menu1 hsmenu1: Menu1
hsmenu1-1: Menu1-1 hsmenu1-1: Menu1-1

View File

@ -48,6 +48,7 @@ menus:
hsflowChart: 流程图 hsflowChart: 流程图
hsseamless: 无缝滚动 hsseamless: 无缝滚动
hscontextmenu: 右键菜单 hscontextmenu: 右键菜单
hstypeit: 打字机组件
hsmenus: 多级菜单 hsmenus: 多级菜单
hsmenu1: 菜单1 hsmenu1: 菜单1
hsmenu1-1: 菜单1-1 hsmenu1-1: 菜单1-1

View File

@ -67,6 +67,7 @@
"responsive-storage": "^2.1.0", "responsive-storage": "^2.1.0",
"sortablejs": "^1.15.0", "sortablejs": "^1.15.0",
"swiper": "^8.4.3", "swiper": "^8.4.3",
"typeit": "^8.7.0",
"v-contextmenu": "3.0.0", "v-contextmenu": "3.0.0",
"vue": "^3.2.40", "vue": "^3.2.40",
"vue-form-create2": "^1.2.8", "vue-form-create2": "^1.2.8",

10
pnpm-lock.yaml generated
View File

@ -100,6 +100,7 @@ specifiers:
swiper: ^8.4.3 swiper: ^8.4.3
tailwindcss: ^3.1.8 tailwindcss: ^3.1.8
terser: ^5.15.0 terser: ^5.15.0
typeit: ^8.7.0
typescript: ^4.7.4 typescript: ^4.7.4
unplugin-vue-define-options: 0.7.3 unplugin-vue-define-options: 0.7.3
v-contextmenu: 3.0.0 v-contextmenu: 3.0.0
@ -163,6 +164,7 @@ dependencies:
responsive-storage: 2.1.0 responsive-storage: 2.1.0
sortablejs: 1.15.0 sortablejs: 1.15.0
swiper: 8.4.3 swiper: 8.4.3
typeit: 8.7.0
v-contextmenu: 3.0.0_vue@3.2.40 v-contextmenu: 3.0.0_vue@3.2.40
vue: 3.2.40 vue: 3.2.40
vue-form-create2: 1.2.9 vue-form-create2: 1.2.9
@ -8493,6 +8495,14 @@ packages:
} }
dev: false dev: false
/typeit/8.7.0:
resolution:
{
integrity: sha512-MeraWJAquZr0EPo2yRYQnSdAxIuzgS5s4JEvzOdp63ZRRpETxtiHYvCJiK4aJA6FuScz3oUJkjmjQsLrx6VOMA==
}
requiresBuild: true
dev: false
/typescript/4.8.4: /typescript/4.8.4:
resolution: resolution:
{ {

View File

@ -0,0 +1,44 @@
import { h, defineComponent } from "vue";
import TypeIt from "typeit";
// 打字机效果组件(只是简单的封装下,更多配置项参考 https://www.typeitjs.com/docs/vanilla/usage#options
export default defineComponent({
name: "TypeIt",
props: {
/** 打字速度,以每一步之间的毫秒数为单位 */
speed: {
type: Number,
default: 200
},
values: {
type: Array,
defalut: []
},
className: {
type: String,
default: "type-it"
},
cursor: {
type: Boolean,
default: true
}
},
render() {
return h(
"span",
{
class: this.className
},
{
default: () => []
}
);
},
mounted() {
new TypeIt(`.${this.className}`, {
strings: this.values,
speed: this.speed,
cursor: this.cursor
}).go();
}
});

View File

@ -101,6 +101,14 @@ const componentsRouter: RouteConfigsTable = {
meta: { meta: {
title: $t("menus.hscontextmenu") title: $t("menus.hscontextmenu")
} }
},
{
path: "/components/typeit",
name: "Typeit",
component: () => import("/@/views/components/typeit/index.vue"),
meta: {
title: $t("menus.hstypeit")
}
} }
] ]
}; };

View File

@ -0,0 +1,18 @@
<script setup lang="ts">
import TypeIt from "/@/components/ReTypeit";
defineOptions({
name: "Typeit"
});
</script>
<template>
<el-card>
<template #header>
<div class="card-header">
<span class="font-medium"> 打字机组件 </span>
</div>
</template>
<TypeIt :values="['test1', 'test2', 'test3']" />
</el-card>
</template>

View File

@ -4,6 +4,7 @@ import Motion from "./utils/motion";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { loginRules } from "./utils/rule"; import { loginRules } from "./utils/rule";
import phone from "./components/phone.vue"; import phone from "./components/phone.vue";
import TypeIt from "/@/components/ReTypeit";
import qrCode from "./components/qrCode.vue"; import qrCode from "./components/qrCode.vue";
import regist from "./components/regist.vue"; import regist from "./components/regist.vue";
import update from "./components/update.vue"; import update from "./components/update.vue";
@ -162,7 +163,9 @@ onBeforeUnmount(() => {
<div class="login-form"> <div class="login-form">
<avatar class="avatar" /> <avatar class="avatar" />
<Motion> <Motion>
<h2 class="outline-none">{{ title }}</h2> <h2 class="outline-none">
<TypeIt :values="[title]" :cursor="false" :speed="150" />
</h2>
</Motion> </Motion>
<el-form <el-form