Vue3 -- teleport传送门

2023-11-17

teleport传送门

Teleport 是一种能够移动 DOM到Vue根节点之外的技术。

例: 蒙层特效

目标效果

点击按钮这个页面显示一个满屏的半透明的黑色蒙层,再次点击隐藏蒙层。

代码演示

首先创建DOM结构:

			<div class="area">
                <button @click="handleClick">按钮</button>
                <div class="mask" v-show="show" @click="handleClick"></div>
            </div>

然后绑定样式:

		/* 父容器样式 */
  		.area{
            position: absolute;
            left: 50%;
            top: 50%;
            width: 100px;
            height: 150px;
            transform: translate(-50%, -50%);
            background-color: #ccc;
        }
        /* 蒙层样式 */
        .mask{
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            background-color: #000;
            opacity: 0.5;
        }

最后写上绑定的方法和数据:

			data(){
                return{
                    show: false
                }
            },
            methods:{
                handleClick(){
                    this.show = !this.show;
                }
            },

页面效果

在这里插入图片描述
点击按钮,触发点击事件后页面效果。
在这里插入图片描述

未使用teleport存在的问题

在未使用teleport标签情况下、蒙层div受父容器影响。蒙层铺满父容器,但并未铺满整个屏幕。

使用teleport实现目标效果

使用teleport标签、将蒙层div传送到body节点下,实现目标效果。

 			<div class="area">
                <button @click="handleClick">按钮</button>
                <teleport to="body">
                    <div class="mask" v-show="show" @click="handleClick"></div>
                </teleport>
            </div>

页面结构:
在这里插入图片描述

页面效果:
在这里插入图片描述

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue3 -- teleport传送门</title>
    <!-- 使用CDN引入Vue -->
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .area{
            position: absolute;
            left: 50%;
            top: 50%;
            width: 100px;
            height: 150px;
            transform: translate(-50%, -50%);
            background-color: #ccc;
        }
        .mask{
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            background-color: #000;
            opacity: 0.5;
        }
    </style>
</head>
<body>
    <div id="root"></div>
    <script>
        const app = Vue.createApp({
            data(){
                return{
                    show: false
                }
            },
            methods:{
                handleClick(){
                    this.show = !this.show;
                }
            },
            template:`
            <div class="area">
                <button @click="handleClick">按钮</button>
                <teleport to="body">
                    <div class="mask" v-show="show" @click="handleClick"></div>
                </teleport>
            </div>
            `
        });
        const vm = app.mount('#root');
    </script>
</body>
</html>

总结

使用Teleport能够移动DOM,避免其受父容器的影响

结语

本小节到此结束,谢谢大家的观看!

如有问题欢迎各位指正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3 -- teleport传送门 的相关文章

  • 如何在mozilla firefox上获得线性渐变效果

    我正在使用下面的CSS来获得线性渐变效果 但它在mozilla firefox中不起作用 你们中的任何人都知道它吗 请帮助在firefox中也获得相同的效果 CSS 是 background image webkit linear grad
  • 使用 z-index 的链接在 Firefox 和 IE 中无法单击,即使它位于顶部

    我试图让文本链接出现在部分透明图像的顶部 而该图像又位于纯色背景的顶部 我希望在打印页面时打印链接文本和图像 但不打印彩色背景 这就是为什么我不使用背景图财产 问题在于 虽然链接显示在图像顶部 并且图像按需要显示在背景顶部 但无法单击该链接
  • 在 Javascript 中访问表格单元格的内容

    我有一个嵌套在 HTML 表格单元格元素内的复选框 如何从 Javascript 访问内部复选框 我见过的所有示例都改变了内部 HTML 本身或视觉属性 这不是我感兴趣的 我尝试过 childNodes 数组 但显然它是空的 如果你不使用
  • 如何使用 XPath 通过 CSS 类查找元素?

    我的网页里有一个div with a class named Test 我怎样才能找到它XPath 该选择器应该可以工作 但如果将其替换为适合的标记 则会更有效 contains class Test 或者 因为我们知道所寻找的元素是div
  • CSS3 - 性能最佳实践是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何向 div 添加“闪耀”叠加层?

    如何添加如下图所示的漂亮叠加层 考虑以下 HTML 我将如何添加这样的覆盖层 我知道我可以在它上面使用渐变 并对角应用它 但我也可以弯曲它吗 div class photostrip div class overlay div img sr
  • 单独的数据间隔 bootstrap 轮播 4

    我想为 Bootstrap 4 轮播上的每张幻灯片设置单独的数据间隔 我尝试了一些其他的 javascript 片段 但是它们似乎不适用于我的代码 例如Bootstrap 4 轮播堆栈溢出 https stackoverflow com q
  • 在 Safari 中提交表单后无法对 DOM 进行样式更改

    在 Safari 中提交表单后 我在对 DOM 进行样式更改时遇到问题 有谁知道它是否可能 这是 Safari 预期的浏览器行为吗 我设置了一个非常简单的示例 以便您可以看到实际问题 http jamesmichaelking com st
  • 推荐的 HTML 格式化程序脚本/实用程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • setTimeout 用于加载下拉列表中的项目

    我在用setTimeout克服 中提到的缓慢处理脚本警告 禁用 Internet Explorer 中的长时间运行脚本消息 https stackoverflow com questions 4460263 disabling the lo
  • 开放式 WebSocket 连接存在哪些安全问题?

    我正在构建一个使用 websockets 的应用程序 我只允许经过身份验证的用户在登录并被授予会话 ID 后打开与服务器的 Websocket 连接 一旦我与经过身份验证的用户打开了 Websocket 连接 当前 页面 就会保存打开的 W
  • jQuery数据表设置列设计和成功回调中的值

    我为我的数据表编写了以下代码 它用我的数据库中的内容填充表 如下所示 if datatable null datatable destroy datatable tableProducts DataTable pageLength 50 b
  • 使绝对定位的div扩展父div高度

    正如你在下面的 CSS 中看到的 我想要child2将自己定位在之前child1 这是因为我目前正在开发的网站也应该在移动设备上运行 在移动设备上child2应该位于底部 因为它包含我想要在移动设备上的内容下方的导航 为什么不是 2 个母版
  • 获取输入图像类型选择的图片并加载到图像标签中

    所以 我有一个用于上传 img 文件的输入框 我想要做的是从该数据 或选定的源 中获取数据并将其路由到图像标签的 src 属性中 像这样的东西 http jsfiddle net QC2c4 http jsfiddle net QC2c4
  • CreateJs Canvas 形状在 Windows Phone 上丢失坐标

    我正在制作一个 Createjs 和 html5 项目 在其中绘制一个形状 红色圆圈 当我单击圆圈时它会发出警报 它在所有台式机和 Android 手机上都能正常工作 除非我在 Windows Phone 中打开它 否则它在普通屏幕上工作正
  • HTML/CSS:页面左侧的导航栏

    我发现创建这样具有良好语义的布局很尴尬 左侧是大约 150 像素宽的列 其中包含导航元素 我想将网站这部分的 HTML 放在 HTML 代码的开头 然后有一个简单的方法来强制页面的其余部分不侵占左侧的区域 150 像素列 我考虑过一些选择
  • 电子邮件模板中的剪贴板功能

    我想在电子邮件模板中发送优惠券代码 一个小按钮 用于复制剪贴板上输入元素的内容 通过电子邮件模板 我的意思是我想发送一封电子邮件 其中包含优惠券代码 并且电子邮件模板中会有一个按钮 允许我将其复制到剪贴板 这可以做到吗 任何帮助将不胜感激
  • 将 div 附加到另一个 div 的右侧

    我有一个 div 它就像一个容器 里面有 2 个图像 一张图像位于 div 的左侧 另一张图像位于右侧 我的容器是Bootstrap的容器 它们都用 div 包裹 并且div s position is fixed 我的问题是我无法找到要附
  • Flexbox 列的垂直间距相等

    我在CSS中努力让我的Flexbox在垂直等距的列中显示项目 从而使列的每行之间的空间均匀 html body flex container margin 0 height 100 width 100 body font family Dr
  • 从“class”名称中删除/替换不需要的前缀信息

    我正进入 状态style从后端 它带有不需要的前缀 我会替换没有前缀的相同内容 正确的方法是什么 这就是我得到的

随机推荐

  • Redis基础--认识redis和对比同类型产品

    一 redis定义与应用 Nosql定义 NoSQL是不同于传统的关系数据库的数据库管理系统的统称 其两者最重要的区别是NoSQL不使用SQL作为查询语言 MySQL定义 MySQL是一种关系型数据库 关系型数据库的一个常见用法是存储长期的
  • 如何大批量压缩图片

    一 ImageMagick ImageMagick 是一个功能强大的命令行图像处理工具 可以用于批量处理图片 它支持各种图像格式和操作 包括压缩和优化 二 使用 ImageMagick 进行大批量压缩指定路径的图片 你可以通过以下步骤实现
  • JavaScript中的内存回收机制

    JS的内存回收 在js中 垃圾回收器每隔一段时间就会找出那些不再使用的数据 并释放其所占用的内存空间 以全局变量和局部变量来说 函数中的局部变量在函数执行结束后这些变量已经不再被需要 所以垃圾回收器会识别并释放它们 而对于全局变量 垃圾回收
  • 宝塔中 nodejs项目 nginx 网站基础/代理设置

    上面是一些基础配置就不写了 吧请求全部代理到 nodejs 项目 location 如果使用pm2等启动node项目 需要加header头 防止读取不到客户端IP proxy set header Host proxy host proxy
  • 生态伙伴

    提到时间管理 想必大多数人的第一反应就是 番茄工作法 番茄工作法是意大利人弗朗西斯科 西里洛于1992年创立的 他和我们大多数人一样 是一个重度拖延症患者 在他大学生活的前几年 曾一度苦于学习效率低下 于是他做了个简单的实验 他找来形状像番
  • JMeter下载及使用

    前言 我是个前端 只是一次偶然的机会被安排用了一次JMeter 做了下步骤记录 所以内容比较基础 想深入研究的兄弟可以再多找找哈 一 下载 官网地址 Apache JMeter Download Apache JMeter 下载zip包 应
  • 计算机网络的软件系统包括哪几部分,系统软件由哪几部分组成?

    系统软件用于实现计算机系统的管理 调度 监视和服务等功能 其目的是方便用户 提高计算机使用效率 扩充系统的功能 通常将系统软件分为以下六类 1 操作系统操作系统是控制和管理计算机各种资源 自动调度用户作业程序 处理各种中断的软件 操作系统的
  • 邮件发送接收原理

    概述 电子邮件是因特网上使用得非常多的一种应用 它可以非常方便的使相隔很远的人进行通信 它主要的特点就是操作简单 快捷 当你发送一封邮件的时候 它首先会发送到收件人的邮件服务器上 并放入收件人的信箱中 如果你在某一个邮件服务器提供商那里申请
  • 建站系列(二)--- 域名、IP地址、URL、端口详解

    目录 相关系列文章 前言 一 IP地址 二 域名与IP地址 三 域名与URL 四 IP地址与端口号 相关系列文章 建站系列 一 网站基本常识 建站系列 二 域名 IP地址 URL 端口详解 建站系列 三 网络协议 建站系列 四 Web服务器
  • Altium Designer 9 学习笔记(二)制作完整的原理图并在此基础上导出PCB版图

    首先 先说下本次练习对象 简单的光敏小夜灯 1 制作原理图 按制图流程 1 1 新建工程及原理图 F N J B 一套连招创建PCB工程 然后右键为新建的工程添加原理图文件 完成后如下图所示 1 2 加载元器件并生成序号 1 2 1 加入电
  • excel转换pdf方法 (aspose.cells亲测有效)

    AsposeUtils java package com lmp test utils import com aspose cells License import com aspose cells PdfSaveOptions impor
  • 北航学长:DCIC 2021的算法方案讲解

    作者 阿水 北京航空航天大学 Datawhale成员 DCIC 作为每年具有重要影响力的政府赛事 除了高认可 高奖金 最重要的是开放了政府和企业的真实数据 具有研究和落地价值 但对于刚参加赛事的同学 还是有难度的 希望通过分享让更初学者也能
  • 网管员牢记10种较为常见服务器管理错误

    网络管理阶层的工作就是保证网络的正常工作 从而使得职工们的工作不被打断 可问题在于事物并非总是按照理想状况发展 事实上经常会出现平地起风波的状况 其间有许多原因 这里我们只讨论10种较为常见的网管错误 1 UPS 不间断电源 的使用问题 某
  • Python+Requests-2-接口自动化脚本实现(虫师-Django接口测试实例)

    编写脚本前分析项目架构 需求 python脚本实现 添加发布会信息 的接口测试 以邮件形式发送测试报告 1 新建一个case目录 存放测试用例 2 新建一个config目录 存放配置信息和读取配置信息 3 新建一个db fixture目录
  • vue项目打包部署到服务器

    目录 一 打包项目 二 修改Nginx的配置 三 部署 四 开放端口号 一 打包项目 1 在 vue config js 文件中找到并修改 主要是publicPath 与outputDir 两项配置 若项目中有baseUrl 替换为publ
  • 【嵌入式学习-C语言篇】 char & short & int 的使用

    嵌入式学习 C语言篇 char short int 的使用 三种数据类型常用场景 智能家居 网关协议中mac地址上报 网关 网关 Gateway 又称网间连接器 协议转换器 网关在传输层以上实现网络互连 是最复杂的网络互连设备 仅用于两个高
  • STM32 进阶教程 7 -  C与C++混合编程

    前言 在嵌入式开发过程中经常会用到第三个芯片 设备 这些第三方的芯片提供的DEMO程序或驱动程序有时候是C 如果先前的系统用C语言写的就会出现点问题 往往需先将C 的驱动程序自已手动改成C语言再用 本节给大家介给一下如何在KEL MDK环境
  • html cgi改变字体颜色,在CGI文件中导致错误的HTML变量

    我在从我的cgi文件中打印特定变量时出现问题 我收到这个变量 从我的网页中调用totalCost 然后尝试打印它 但没有任何反应 所有其他变量可以从网页成功接收 并通过我的cgi文件打印到另一个网页上 除了这一个 我检查过大小写敏感但是没有
  • jQuery 入门教程(14): 添加HTML元素

    使用jQuery可以方便的添加新的HTML元素 下面的方法用于添加HTML元素 append 在指定的元素的尾部添加一个新内容 prepend 在指定的元素里前部添加新内容 after 在指定元素后添加新内容 before 在指定元素的前面
  • Vue3 -- teleport传送门

    目录 teleport传送门 例 蒙层特效 目标效果 代码演示 页面效果 未使用teleport存在的问题 使用teleport实现目标效果 完整代码 总结 teleport传送门 Teleport 是一种能够移动 DOM到Vue根节点之外