Vue3 实现模态框组件

这篇具有很好参考价值的文章主要介绍了Vue3 实现模态框组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vue3 实现模态框组件

基于 Vue 3 实现模态框,并且单击遮罩层可关闭模态框

下面是一个基于 Vue 3 实现的模态框,并且点击遮罩层可关闭模态框的示例代码:

<template>
  <div class="modal-wrapper" v-show="visible" @click.self="closeModal">
    <div class="modal">
      <div class="header">
        <h2>{{ title }}</h2>
        <button @click="closeModal">X</button>
      </div>
      <div class="content">
        <slot></slot>
      </div>
    </div>
  </div>
</template>

<script>
  import { ref } from "vue";

  export default {
    name: "Modal",
    props: {
      title: {
        type: String,
        required: true,
      },
    },
    setup(props, { emit }) {
      const visible = ref(false);

      const openModal = () => {
        visible.value = true;
      };

      const closeModal = () => {
        visible.value = false;
        emit("close");
      };

      return {
        visible,
        openModal,
        closeModal,
      };
    },
  };
</script>

<style scoped>
  .modal-wrapper {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 9999;
  }

  .modal {
    background-color: white;
    padding: 20px;
    border-radius: 5px;
  }

  .header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
  }

  .header h2 {
    margin: 0;
  }

  .header button {
    border: none;
    background-color: transparent;
    font-size: 20px;
    cursor: pointer;
  }

  .content {
    max-height: 400px;
    overflow: auto;
  }
</style>

在这个示例中,定义了一个名为 Modal 的组件,并且通过 props 属性接收了一个 title 属性,表示模态框的标题。在 setup 函数中,使用 ref 函数创建了一个名为 visible 的响应式数据,表示模态框是否可见。还定义了 openModalcloseModal 函数,分别用于打开和关闭模态框,并且通过 emit 函数触发了一个 close 事件,以便在模态框关闭时可以执行其他操作。

在模板中,使用 v-show 指令根据 visible 的值来控制模态框的显示和隐藏。还在外层包裹了一个 div 元素,并且使用了 @click.self 修饰符来监听单击遮罩层的事件,并且调用了 closeModal 函数来关闭模态框。在模态框内部,使用了插槽来动态渲染模态框的内容,并且在头部添加了一个关闭按钮,以便用户手动关闭模态框。

最后,在样式中定义了模态框的样式,包括遮罩层、模态框头部、模态框内容等。通过这个示例,可以实现一个简单的模态框,并且单击遮罩层可关闭模态框。

基于原生 JavaScript、HTML、CSS 实现模态框,并且单击遮罩层可关闭模态框

下面是一个基于原生 JavaScript、HTML、CSS 实现的模态框,并且单击遮罩层可关闭模态框的示例代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Modal Dialog</title>
    <style>
      .modal-overlay {
        display: none;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.5);
        z-index: 9999;
      }

      .modal {
        display: none;
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background-color: white;
        padding: 20px;
        border-radius: 5px;
        z-index: 10000;
      }

      .modal-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 10px;
      }

      .modal-header h2 {
        margin: 0;
      }

      .modal-close {
        border: none;
        background-color: transparent;
        font-size: 20px;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <button id="openModalBtn">Open Modal</button>

    <div class="modal-overlay" id="modalOverlay">
      <div class="modal" id="modal">
        <div class="modal-header">
          <h2>Modal Header</h2>
          <button class="modal-close" id="modalCloseBtn">X</button>
        </div>
        <div class="modal-body">
          <p>Modal content goes here.</p>
        </div>
      </div>
    </div>

    <script>
      const openModalBtn = document.getElementById("openModalBtn");
      const modalOverlay = document.getElementById("modalOverlay");
      const modal = document.getElementById("modal");
      const modalCloseBtn = document.getElementById("modalCloseBtn");

      openModalBtn.addEventListener("click", () => {
        modalOverlay.style.display = "block";
        modal.style.display = "block";
      });

      modalCloseBtn.addEventListener("click", () => {
        modalOverlay.style.display = "none";
        modal.style.display = "none";
      });

      modalOverlay.addEventListener("click", (event) => {
        if (event.target === modalOverlay) {
          modalOverlay.style.display = "none";
          modal.style.display = "none";
        }
      });
    </script>
  </body>
</html>

在这个示例中,通过 HTML 定义了一个按钮和一个模态框,模态框包括一个遮罩层和一个内部内容区域。在 CSS 中,定义了遮罩层和模态框的样式,并且使用了 display: none 将它们初始隐藏。

在 JavaScript 中,首先获取了需要操作的 DOM 元素。在打开模态框时,将遮罩层和模态框的 display 属性设置为 block,以显示它们。在关闭模态框时,将它们的 display 属性设置为 none,以隐藏它们。在处理遮罩层单击事件时,判断当前点击的元素是否为遮罩层本身,如果是,则关闭模态框。

通过这个示例,可以实现一个简单的模态框,并且单击遮罩层可关闭模态框。文章来源地址https://www.toymoban.com/news/detail-445865.html

到了这里,关于Vue3 实现模态框组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包