이번에는 vue+toast 팝업 컴포넌트 사용 사례에 대한 자세한 설명을 가져왔습니다. vue+toast 팝업 컴포넌트 사용 시 주의사항은 무엇인가요? .
모든 사람이 일반 vue 구성 요소를 작성하고 정의 -> 가져오기 -> 등록 -> 사용을 한 번에 할 수 있다고 믿습니다. 하지만 오늘 팝업 구성 요소를 사용자 정의하려면 어떻게 해야 할까요?
먼저 여기에서 분석해 보겠습니다. 팝업 구성 요소의 특성(요구 사항)은 다음과 같습니다.
0. 경량 - 구성 요소가 1Kib 미만입니다(실제로 패키지 크기는 0.8k 미만)
1. 일반적으로 여러 위치에서 사용됩니다. 각 페이지에서 반복 참조 +Register
1. 일반적으로 js와 상호 작용합니다. 에 작성할 필요가 없습니다. <toast :show="true" text="弹窗消息"></toast>
오늘은 위 두 가지 요구 사항을 기반으로 vue 기반 토스트 팝업 컴포넌트를 구현하겠습니다. .다음 사진은 최종 렌더링입니다.
1. 먼저 일반 vue 컴포넌트를 작성합니다.파일 위치/src/toast/toast.vue
<template> <p class="wrap">我是弹窗</p> </template> <style scoped> .wrap{ position: fixed; left: 50%; top:50%; background: rgba(0,0,0,.35); padding: 10px; border-radius: 5px; transform: translate(-50%,-50%); color:#fff; } </style>2. 이 페이지에서는 효과와 오류를 쉽게 볼 수 있도록 구성요소를 소개합니다
<template>
<p id="app">
<toast></toast>
</p>
</template>
<script>
import toast from './toast/toast'
export default {
components: {toast},
}
</script>
보시다시피 정적 팝업 레이어가 표시됩니다. 다음 보기 동적 팝업 구현 방법
먼저 /src/toast/ 디렉터리에 새로운 index.js를 생성한 후 index.js에 다음 코드를 입력합니다. (코드가 심하게 결합되어 있으므로 생략하겠습니다.) 한 줄씩 분할 설명, 인라인 주석으로 변경)파일 위치/src/toast/index.jsimport vue from 'vue' // 这里就是我们刚刚创建的那个静态组件 import toastComponent from './toast.vue' // 返回一个 扩展实例构造器 const ToastConstructor = vue.extend(toastComponent) // 定义弹出组件的函数 接收2个参数, 要显示的文本 和 显示时间 function showToast(text, duration = 2000) { // 实例化一个 toast.vue const toastDom = new ToastConstructor({ el: document.createElement('p'), data() { return { text:text, show:true } } }) // 把 实例化的 toast.vue 添加到 body 里 document.body.appendChild(toastDom.$el) // 过了 duration 时间后隐藏 setTimeout(() => {toastDom.show = false} ,duration) } // 注册为全局组件的函数 function registryToast() { // 将组件注册到 vue 的 原型链里去, // 这样就可以在所有 vue 的实例里面使用 this.$toast() vue.prototype.$toast = showToast }export 기본 레지스트리Toast첨부된 파일은 vue.extend 공식 문서 4번 사용해 보세요.
여기로 이동하세요. 처음에는 전역적으로 등록되고 동적으로 로드될 수 있는 토스트 구성 요소를 완성했습니다. 다음으로 이를 시험해보고 vue의
항목 파일을 살펴보겠습니다(스캐폴딩이 생성된 경우 . /src/main.js) 컴포넌트를 등록합니다.파일 위치/src/main.js
import toastRegistry from './toast/index' // 这里也可以直接执行 toastRegistry() Vue.use(toastRegistry) 我们稍微修改一下使用方式,把 第二步 的引用静态组件的代码,改成如下 <template> <p id="app"> <input type="button" value="显示弹窗" @click="showToast"> </p> </template> <script> export default { methods: { showToast () { this.$toast('我是弹出消息') } } } </script>
더 이상 페이지에서 컴포넌트를 소개하고 등록할 필요가 없으며 이를 직접 사용할 수 있습니다. $toast().
이제 처음에는 팝업 창을 구현했지만 여전히 애니메이션이 부족하고 현재 팝업 및 toast/index.js의 showToast 함수를 살짝 수정해 보겠습니다. (댓글이 있는 부분은 변경사항이 있습니다.)
파일 위치/src/toast/index.jsfunction showToast(text, duration = 2000) { const toastDom = new ToastConstructor({ el: document.createElement('p'), data() { return { text:text, showWrap:true, // 是否显示组件 showContent:true // 作用:在隐藏组件之前,显示隐藏动画 } } }) document.body.appendChild(toastDom.$el) // 提前 250ms 执行淡出动画(因为我们再css里面设置的隐藏动画持续是250ms) setTimeout(() => {toastDom.showContent = false} ,duration - 1250) // 过了 duration 时间后隐藏整个组件 setTimeout(() => {toastDom.showWrap = false} ,duration) }그런 다음 toast.vue 스타일파일 위치/src/toast/toast.vue
<template> <p class="wrap" v-if="showWrap" :class="showContent ?'fadein':'fadeout'">{{text}}</p> </template> <style scoped> .wrap{ position: fixed; left: 50%; top:50%; background: rgba(0,0,0,.35); padding: 10px; border-radius: 5px; transform: translate(-50%,-50%); color:#fff; } .fadein { animation: animate_in 0.25s; } .fadeout { animation: animate_out 0.25s; opacity: 0; } @keyframes animate_in { 0% { opacity: 0; } 100%{ opacity: 1; } } @keyframes animate_out { 0% { opacity: 1; } 100%{ opacity: 0; } } </style>완료, 토스트 구성 요소가 처음에 완료되었습니다
Summary
vue.extend 함수는 구성 요소를 생성할 수 있습니다. 생성자 이 함수를 사용하여 vue 구성 요소 인스턴스를 생성할 수 있습니다
추천 자료:
위 내용은 vue+toast 팝업 컴포넌트 사용 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!