利用vue3仿苹果系统侧边消息提示效果实例

下面我就给您详细讲解利用vue3仿苹果系统侧边消息提示效果的完整攻略。

1. 概述

本文将介绍如何利用vue3实现仿苹果系统侧边消息提示效果。为了达到这个目的,我们将使用一些vue3的特性,如Teleport,Composition API等。

2. 准备工作

在正式开始实现之前,我们需要完成一些准备工作。

2.1 创建项目

首先,我们需要创建一个新的vue3项目。您可以使用vue-cli来完成这个任务。在终端中输入以下命令创建新的vue3项目:

npm install -g @vue/cli
vue create message-notification

2.2 安装依赖

接下来,我们需要安装几个必要的依赖,包括tailwindcss,@headlessui/vue,autoprefixerpostcss。在终端中输入以下命令安装依赖:

npm install tailwindcss @headlessui/vue autoprefixer postcss --save

2.3 配置样式

由于我们使用了tailwindcss,我们需要在项目中初始化它,为此我们需要创建一个tailwind.config.js文件:

npx tailwindcss init

2.4 组件及相关配置

现在我们已经完成了大部分的准备工作。接下来,我们需要创建两个组件,一个是MessageNotification组件,另一个是MessageList组件,用于显示通知。同时,还需要定义一些相关的vuex状态和方法。

具体代码如下:

<!-- src/components/MessageNotification.vue -->
<template>
  <div>
    <Transition
      enter-active-class="transition ease-out duration-150"
      enter-from-class="transform opacity-0 translate-y-2"
      enter-to-class="transform opacity-100"
      leave-active-class="transition ease-in duration-100"
      leave-from-class="transform opacity-100"
      leave-to-class="transform opacity-0 scale-95"
    >
      <div
        v-show="show"
        class="fixed bottom-0 right-0 mb-4 mr-4 z-50 shadow-lg rounded-lg overflow-hidden"
      >
        <div class="bg-white px-4 py-3 flex items-start">
          <div class="flex-shrink-0">
            <svg
              class="h-6 w-6 text-green-400"
              fill="none"
              stroke-linecap="round"
              stroke-linejoin="round"
              stroke-width="2"
              viewBox="0 0 24 24"
              stroke="currentColor"
            >
              <path d="M5 13l4 4L19 7"></path>
            </svg>
          </div>
          <div class="ml-3">
            <p class="text-sm font-medium text-gray-900">New message from {{ message.from }}</p>
            <p class="mt-1 text-sm text-gray-500">{{ message.content }}</p>
          </div>
        </div>
      </div>
    </Transition>
  </div>
</template>

<script>
import { defineComponent } from 'vue'
import { Transition } from '@headlessui/vue'

export default defineComponent({
  name: 'MessageNotification',
  props: {
    message: {
      type: Object,
    },
  },
  setup(props) {
    const show = true

    return {
      show,
    }
  },
})
</script>
<!-- src/components/MessageList.vue -->
<template>
  <div class="max-h-96 overflow-auto pt-3">
    <div v-for="(message, index) in messages" :key="index">
      <MessageNotification :message="message" />
    </div>
  </div>
</template>

<script>
import { defineComponent } from 'vue'
import MessageNotification from '@/components/MessageNotification.vue'

export default defineComponent({
  name: 'MessageList',
  components: {
    MessageNotification,
  },
  computed: {
    messages() {
      return this.$store.getters.getMessages
    },
  },
})
</script>
// src/store/modules/message.js
const state = {
  messages: [],
}

const getters = {
  getMessages: state => state.messages,
}

const mutations = {
  ADD_MESSAGE: (state, message) => {
    state.messages.push(message)
  },
  REMOVE_MESSAGE: (state, index) => {
    state.messages.splice(index, 1)
  },
}

const actions = {
  addMessage: ({ commit }, message) => {
    commit('ADD_MESSAGE', message)
  },
  removeMessage: ({ commit }, index) => {
    commit('REMOVE_MESSAGE', index)
  },
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions,
}
// src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import store from './store'

import 'tailwindcss/dist/tailwind.css'

const app = createApp(App)

app.use(store)

app.mount('#app')
// src/store/index.js
import { createStore } from 'vuex'
import message from './modules/message'

export default createStore({
  modules: {
    message,
  },
})

3. 示例说明

现在我们已经完成了所有的准备工作。接下来,我们将展示两个例子,说明如何使用我们的MessageNotification组件。

3.1 添加新消息

我们可以在组件挂载后,通过调用store.dispatch()方法,来添加新的消息:

<template>
  <div>
    <MessageList />
  </div>
</template>

<script>
import { defineComponent, onMounted } from 'vue'
import MessageList from '@/components/MessageList.vue'
import { getRandomMessage } from '@/utils/message.js'

export default defineComponent({
  name: 'App',
  components: {
    MessageList,
  },
  setup() {
    onMounted(() => {
      const interval = setInterval(() => {
        const message = getRandomMessage()
        store.dispatch('message/addMessage', message)
      }, 1000)

      return () => clearInterval(interval)
    })
  },
})
</script>

在这个例子中,我们使用了onMounted()钩子,在组件挂载后,每隔一秒钟添加一条随机的消息到消息列表。

3.2 移除消息

我们可以使用v-for来遍历消息列表,并通过点击事件来移除指定的消息:

<template>
  <div class="max-h-96 overflow-auto pt-3">
    <div v-for="(message, index) in messages" :key="index">
      <button
        class="px-2 py-1 text-white bg-red-500"
        @click="removeMessage(index)"
      >
        X
      </button>
      <MessageNotification :message="message" />
    </div>
  </div>
</template>

<script>
import { defineComponent, computed } from 'vue'
import MessageNotification from '@/components/MessageNotification.vue'

export default defineComponent({
  name: 'MessageList',
  components: {
    MessageNotification,
  },
  computed: {
    messages() {
      return this.$store.getters.getMessages
    },
  },
  methods: {
    removeMessage(index) {
      this.$store.dispatch('message/removeMessage', index)
    },
  },
})
</script>

在这个例子中,我们在每条消息前添加了一个删除按钮,当点击按钮时,会触发removeMessage()方法,来移除指定的消息。

4. 总结

本文详细介绍了如何利用vue3实现仿苹果系统侧边消息提示效果。我们通过使用vue3的Teleport和Composition API等特性,来创建组件和定义状态,并展示了两个实例,说明如何使用这个组件。希望这篇文章能够帮助你更好地使用vue3。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用vue3仿苹果系统侧边消息提示效果实例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 一次用vue3简单封装table组件的实战过程

    下面给出使用Vue 3简单封装table组件的完整攻略: 1. 创建组件 首先,我们需要在Vue项目中创建一个table组件。可以通过以下命令创建: vue create my-app 其中,my-app是你的项目名称。 在创建好项目后,我们可以在src/components目录下创建一个table目录,并在其中添加Table.vue文件来实现Table组件…

    Vue 2023年5月28日
    00
  • vue中使用js-xlsx导出excel的实现方法

    当需要在Vue中生成Excel文件时,可以使用js-xlsx库来实现。下面是具体步骤: 步骤一:安装依赖 在终端中输入以下命令安装js-xlsx依赖: npm install xlsx 步骤二:导入依赖 在需要使用js-xlsx的组件上方,引入js-xlsx: import xlsx from ‘xlsx’ 步骤三:生成excel数据 在需要生成excel的…

    Vue 2023年5月27日
    00
  • 如何构建 vue-ssr 项目的方法步骤

    如何构建 Vue SSR 项目的方法步骤 Vue SSR,即 Vue.js 服务器端渲染,能够提高网站的首屏渲染速度,对于 SEO 也有很大的帮助。下面是构建 Vue SSR 项目的完整攻略: 安装依赖和插件 首先需要在项目中安装 vue-server-renderer,命令如下: npm install vue-server-renderer –save…

    Vue 2023年5月27日
    00
  • vue踩坑记录之数组定义和赋值问题

    首先,我需要说明一下本文讨论的vue版本是Vue 2。 一、问题描述:在vue中,我们经常要定义和操作数组。但是,在定义和赋值数组时,可能会遇到某些坑点。主要包括以下两点: 1、不能直接使用数组的方式为data中的数组元素赋值。2、在组件内部定义的数组会被所有组件共享。 下面,我们针对这两个坑点进行分别说明。 二、问题解决: 1、不能直接使用数组的方式为da…

    Vue 2023年5月28日
    00
  • Vue.js实现的购物车功能详解

    下面是“Vue.js实现的购物车功能详解”的完整攻略。 确定需求 在开始Vue.js实现购物车功能之前,我们需要先明确我们的需求,包括: 需要展示商品列表; 需要将商品添加到购物车中; 需要展示购物车中的商品列表; 需要对购物车中的商品进行增删操作; 需要实时展示购物车总价。 准备工作 实现此功能需要准备以下工作: 安装Vue.js的开发环境; 准备好商品数…

    Vue 2023年5月27日
    00
  • Vue实现可移动水平时间轴

    Vue实现可移动水平时间轴 1. 引入样式文件 在head标签内引入需要用到的样式文件,例如: <head> <link rel="stylesheet" href="timeline.css"> </head> 2. 组件的结构 要实现一个时间轴,我们需要用到一个列表(<ul…

    Vue 2023年5月29日
    00
  • Vue内部渲染视图的方法

    下面是关于 Vue 内部渲染视图的方法的详细攻略。 什么是 Vue 内部渲染视图的方法 在 Vue 中,当数据发生变化时,会根据使用的渲染方法重新渲染视图,从而使视图与数据状态保持同步。Vue 内部提供了多种渲染视图的方法,包括基于模板的渲染、基于 JSX 的渲染、手动刷新等。 Vue 模板渲染 Vue 的模板渲染是利用 HTML 模板代码和 Vue 组件选…

    Vue 2023年5月27日
    00
  • vue框架通用化解决个性化文字换行问题实例详解

    对于“vue框架通用化解决个性化文字换行问题实例详解”的攻略,我将按照以下标题进行讲解。 解决方案背景和问题描述 在使用Vue框架开发应用时,我们经常会遇到一些个性化问题,例如文字长度不一致引起的换行问题。在这种情况下,我们需要一种通用的解决方案,能够在不同场景下灵活地适应不同的需要。因此,本文将介绍一种如何解决Vue框架下个性化文字换行问题的通用方案。 具…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部