vue3-Teleport笔记

news2024/11/19 14:50:03

简单来写一下Teleport

src/components/TeleportLearn.vue

<script setup>

</script>

<template>
  <div>
    <Teleport to="body">
        <div>你好</div>
    </Teleport>
  </div>
</template>

<style scoped>

</style>

src/App.vue

<script setup>
import TeleportLearn from './components/TeleportLearn.vue'
</script>

<template>
  <div>
    <TeleportLearn></TeleportLearn>
  </div>
</template>

<style scoped>

</style>

在这里插入图片描述

元素在body
我们在App.vue中写入hello,你会发现这个传送门在id="app"元素的下面

<script setup>
import TeleportLearn from './components/TeleportLearn.vue'
</script>

<template>
  <div>
    <TeleportLearn></TeleportLearn>
    <span>hello</span>
  </div>
</template>

<style scoped>

</style>

这时你肯定相当与html中的某一个DOM API很像原生JS DOM中的insertAdjacentElementAPI,更确切的说是createElementAPI

insertAdjacentElementAPI

<!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>move</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="app">
    </div>
</body>
<script type="text/javascript">
    const app = document.getElementById('app')
    const element = document.createElement('div')
    element.innerText = '你好啊'
    app.insertAdjacentElement('afterend',element)

</script>
</html>

createElementAPI

<!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>move</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="app">
        
    </div>
</body>
<script type="text/javascript">
    const body = document.querySelector('body')
    const app = document.getElementById('app')
    const element = document.createElement('div')
    element.innerText = '你好啊'
    body.appendChild(element)

</script>
</html>

在这里插入图片描述
关于原生html,js,css写出覆盖的样式详情可以看这篇

稍微升级一下

我们给这个Teleport来一个if判断

src/components/TeleportLearn.vue

<script setup>

defineProps({
    a:{
        type: Boolean
    }
})
</script>

<template>
  <div>
    <Teleport to="body" v-if="a">
        <div>你好</div>
    </Teleport>
  </div>
</template>

<style scoped>

</style>

src/App.vue

<script setup>
import TeleportLearn from './components/TeleportLearn.vue'
import {ref,reactive} from "vue"
let a = ref(false)
function isTrue(){
  if(a.value === true){
    a.value = false
  }else{
    a.value = true
  }
}
</script>

<template>
  <div>
    <button @click="isTrue">展开</button>
    <TeleportLearn :a="a"></TeleportLearn>
    <span>hello</span>
  </div>
</template>

<style scoped>

</style>

这样就做到了显示与不显示的区别了

其实你会发现这样在Teleport上写class一点用处也没有,因为Teleport把元素传到body了后Teleport就不在了,所以根本就没有class样式,所以我们得这么写

<script setup>

defineProps({
    a:{
        type: Boolean
    }
})
</script>

<template>
  <div>
    <Teleport to="body" v-if="a">
        <div class="hello">你好</div>
    </Teleport>
  </div>
</template>

<style scoped>

.hello{
    position: absolute;/*要写absolute(绝对定位) */
    left: 0px;
    top: 0px;
    width: 100vw;
    height: 100vh;
    background: rgba(200, 200, 200, 0.3);
}
</style>

在这里插入图片描述
你就会发现,很乱(…)这是取决与你的样式的

.hello{
    position: absolute;/*要写absolute(绝对定位) */
    left: 0px;
    top: 20px;
    width: 100px;
    height: 100px;
    /* background: rgba(200, 200, 200, 0.3); */
    background: rgba(255, 255, 255, 1);
}

你就会发现hello字样被覆盖掉了,假如我们放一张图片代替hello
在这里插入图片描述
这里分享一下bilibili的2023/1/8还在的春节封面和封面上的logo(不在了,说明bilibili把资源释放(删除)了)

App.vue

<script setup>
import TeleportLearn from './components/TeleportLearn.vue'
import {ref,reactive} from "vue"
let a = ref(false)
function isTrue(){
  if(a.value === true){
    a.value = false
  }else{
    a.value = true
  }
}
</script>

<template>
  <div class="AppAll">
    <button @click="isTrue">展开</button>
    <TeleportLearn :a="a"></TeleportLearn>
    <img src="../public/image/bilibili.jpg" alt="">
  </div>
</template>

<style scoped>
.AppAll{
  width: 100vw;
  height: 100vh;
  background: rgba(200, 200, 200, 0.5);
}
</style>

vue的@mousemove事件

src/components/mouseLearn.vue

<script setup>
function mousemoveFunc(){
    console.log('@')
}
</script>

<template>
  <div>
    <div @mousemove="mousemoveFunc()">@mousemove</div>
  </div>
</template>

<style scoped>


</style>

现象: 鼠标一移入则触发(在元素上移动一直触发)直到移出

<script setup>
function mouseleaveFunc(){
    console.log('+')
}
</script>

<template>
  <div>
    <div @mouseleave="mouseleaveFunc">@mouseleave</div>
  </div>
</template>

<style scoped>


</style>

现象: 移入元素后移出元素触发

升级一下Teleport(让他靠近bilibili样式)

<script setup>
import TeleportLearn from './components/TeleportLearn.vue'
import MouseLearn from './components/MouseLearn.vue'
import {ref,reactive} from "vue"
let a = ref(false)
function mousemoveFunc(){
  a.value = true
}
function mouseleaveFunc(){
  a.value = false
}
</script>

<template>
  <div class="AppAll">
    <button @mouseover="mousemoveFunc()" @mouseleave="mouseleaveFunc()">展开</button>
    <TeleportLearn :a="a"></TeleportLearn>
    <!-- <MouseLearn /> -->
    <img src="../public/image/bilibili.jpg" alt="">
  </div>
</template>

<style scoped>
.AppAll{
  width: 100vw;
  height: 100vh;
  background: rgba(200, 200, 200, 0.5);
}
</style>

我们仔细看bilibili的导航栏会发现它有四种状态

改变前
改变前
改变中
改变中
改变后
改变后
我们就想到了式vue3的过渡

vue3过渡

  • v-enter-from:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
  • v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
  • v-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter-from 被移除),在过渡/动画完成之后移除。
  • v-leave-from:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
  • v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
  • v-leave-to:离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave-from 被删除),在过渡/动画完成之后移除。

我这里给出的代码是src/components/GuoDu.vue

<script setup>
import {ref,reactive} from "vue"
let b = ref(false)
function show(){
    if(b.value === true){
        b.value = false
    }else{
        b.value = true
    }
}
</script>

<template>
  <div>
    <button @click="show()">显示/隐藏</button><!--一定要有样式的改变-->
    <transition name="wo">
        <p v-if="b">hello</p>
    </transition>
  </div>
</template>

<style scoped>
.wo-enter-from{
    transition: all 0.5s;
    color: red;
}
.wo-enter-active{
    transition: all 0.5s;
    color: yellowgreen
}
.wo-enter-to{
    transition: all 0.5s;
    color: skyblue;
}
.wo-leave-from{
    transition: all 0.5s;
    color: orange;
}
.wo-leave-active{
    transition: all 0.5s;
    color: green;
}
.wo-leave-to{
    transition: all 0.5s;
    color: pink;
}
</style>

出现的效果先是黄绿>天蓝>>
也就是v-enter-active>v-enter-to>v-leave-to

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NVMe IO数据传输如何选择PRP or SGL?

在Host与Controller之间有数据交互时&#xff0c;Controller会多次访问Host内存。比如执行NVMe Read/Write:当Host下发NVMe Write命令时&#xff0c;Host会先放数据放在Host内存中&#xff0c;然后通知Controller过来取数据。Controller接到信息后&#xff0c;会通过PCIe Memor…

Python下载ts文件视频并合并

目录 一、ts文件的由来 二、下载ts文件 1.下载index.m3u8&#xff0c;并做相应处理 2.下载ts文件 三、合并ts文件 一、ts文件的由来 ts文件&#xff0c;ts即"Transport Stream"的缩写&#xff0c;特点就是要求从视频流的任一片段开始都是可以独立解码的&#x…

C 程序设计教程(06)—— C 语言的运算符与表达式

C 程序设计教程&#xff08;06&#xff09;—— C 语言的运算符与表达式 该专栏主要介绍 C 语言的基本语法&#xff0c;作为《程序设计语言》课程的课件与参考资料&#xff0c;用于《程序设计语言》课程的教学&#xff0c;供入门级用户阅读。 目录C 程序设计教程&#xff08;0…

【每日一题】【LeetCode】【第七天】盛最多水的容器

解决之路 因为是周日&#xff0c;找个中等题挑战一下。 题目描述 测试案例&#xff08;部分&#xff09; 第一次 想一下&#xff0c;因为涉及到底乘高&#xff0c;所以不能排序。逆序也没必要。 简化一下题干&#xff0c;盛水最多&#xff0c;也就是算面积最大&#xff0c…

【北邮果园大三上】运筹学期中前

第一章.线性规划 1.1例题 根据现实世界中的问题建立模型 一般表达式 ①和式 ②向量式 1.2变化标准&#xff1a; 1.3线性规划求解的基础原理和单纯解法 1.3.1解 ①基础概念 基 可行解与基础解 其他分类 ②判断举例 原式子&#xff1a; 判断标准 将一个未知数作为常熟&#…

从Wireshark看TCP连接的建立与关闭

http://t.zoukankan.com/jonathanlin-p-4282582.html TCP是一种面向连接、可靠的协议。TCP连接的建立与断开&#xff0c;都是需要经过通信双方的协商。用一句话概括就是&#xff1a;三次握手say hello&#xff08;建立连接&#xff09;&#xff1b;四次握手say goodbye&#x…

蓝桥杯Python组排序算法与函数

目录 一、排序算法 二、排序函数 1、Python 的 sort() 函数和 sorted() 函数 2、sort() 例子 3、sorted() 例子 4、部分排序 三、例题 1、统计数字&#xff08;lanqiaoOJ题号535&#xff09; 2、错误票据&#xff08;lanqiaoOJ题号205&#xff09; 3、奖学金&#xf…

线程池 - ThreadPoolExecutor 详解

线程池 - ThreadPoolExecutor 详解 线程池 ThreadPoolExecutor 源码解析参考 juc 专栏系列文章。 基本概述 线程池&#xff1a;一个容纳多个线程的容器&#xff0c;容器中的线程可以重复使用&#xff0c;省去了频繁创建和销毁线程对象的操作。 线程池作用&#xff1a; 降低资…

【基础】Elasticsearch 基础

Elasticsearch 基本概念及使用Elasticsearch 基本概念ES 的简介及使用场景ES 基本概念ES 与 Kibana 的安装Elasticsearch 分词器ES 内置分词器ik 分词器的安装和使用Elasticsearch 基本使用索引操作数据的增删改查DSL 查询聚合查询批量操作Elasticsearch 基本概念 ES 的简介及…

多线程锁相关

日升时奋斗&#xff0c;日落时自省 目录 1、常见的锁策略 1.1、悲观锁vs乐观锁 1.2、轻量级锁vs重量级锁 1.3、自旋锁vs挂起等待锁 1.4、互斥锁vs读写锁 1.5、公平锁vs非公平锁 1.6可重入锁vs不可重入锁 2、CAS 2.1、CAS解析 2.2、CAS的应用场景 2.2.1、实现原子类 …

JavaSE学习day2_03, 算数运算符

5. 算术运算符 5.1 分类&#xff1a; - * / % 5.2 细节&#xff1a; 1.运算规则。跟小学数学是一模一样的 2.如果是整数跟整数进行计算&#xff0c;结果只能是整数。直接去掉小数部分&#xff0c;保留整数。如5/22,而不是2.5. 3.如果想要结果中有小数&#xff0c;需要有小…

(二)K8S Namespace 和 Label

Namespace 1、K8S集群中默认的Namespace为default&#xff0c;通过Namespace可以实现Pod之间的相互隔离&#xff08;如测试环境、生成环境的隔离&#xff09; 2、通过K8S的资源配置机制限定不同的Namespace对CPU、内存的使用&#xff0c;再通过K8S授权机制将不同的Namespace交…

启动ruoyi框架(初学)

启动ruoyi框架&#xff08;初学&#xff09;&#xff08;RuoYi&#xff09; Ruo Yi启动ruoyi框架&#xff08;初学&#xff09;&#xff08;[RuoYi](http://doc.ruoyi.vip/)&#xff09;一、简介二、项目启动1.前端模组&#xff1a;RUOYI-UI2.后端模组&#xff1a;3.环境要求&a…

Java版阿里云/腾讯云域名动态映射DDNS到动态IPv4或IPv6

1 介绍 利用业余时间&#xff0c;整合了一下阿里云和腾讯云动态域名映射&#xff0c;并将其使用spring boot做了一下封装&#xff0c;正好可以把家里的闲置电脑和IP v6利用起来&#xff0c;具体使用方法如下&#xff0c;或者参考对应项目的readme文档 2 地址 aliyun-ddns&am…

数据分析-深度学习 Day3

youtube课程地址&#xff1a;&#xff08;实时更新&#xff09;https://www.youtube.com/playlist?listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2Jwww.youtube.com/playlist?listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2JB站课程地址&#xff1a;李宏毅2021机器学习【week3】&#xff1a…

基于tensorflow框架bert的自然灾害描述文本分类详细教程

概述: 使用tensorflow框架: 预测给定的推文是否与真正的灾难有关。如果是这样,预测一个1。如果不是,预测一个0 数据展示:

Java之String概述、对象创建原理和常见面试题、String类常用API、案例

目录String、ArrayList前言String简单介绍Arraylist简单介绍String 概述String类的特点详解总结String类创建对象的两种方式两种方式有什么区别吗&#xff1f;总结String常见面试题String类常用API-字符串内容比较总结String类常用API-遍历、替换、截取、分割操作String案例验证…

内存管理(C/C++)

内存管理&#xff08;C/C&#xff09;C/C内存分布C语言中的动态内存管理方式C中动态内存管理new / delete 操作内置类型new 和 delete 操作自定义类型operator new 和 operator delete 函数operator new 和 operator delete 函数new 和 delete 的实现原理内置类型自定义类型定位…

【人工智能原理自学】激活函数:给机器注入灵魂

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。 &#x1f514;本文讲解激活函数&#xff1a;给机器注入灵魂&#xff0c;一起卷起来叭&#xff01; 目录一、“分…

已解决pandas正确创建DataFrame对象的四种方法(通过list列表、dict字典、ndarray、Series对象创建)

已解决&#xff08;pandas创建DataFrame对象失败&#xff09;ValueError: 4 columns passed, passed data had 2 columns 文章目录报错代码报错翻译报错原因解决方法创建DataFrame对象的四种方法1. list列表构建DataFrame2. dict字典构建DataFrame3. ndarray创建DataFrame4. Se…