Vue3的自定义指令怎么迁移到nuxt3

一、找到Vue3中指令的源码

const DISTANCE = 100; // 距离
const ANIMATIONTIME = 500; // 500毫秒
let distance: number | null = null,animationtime: number | null = null;
const map = new WeakMap();
const ob = new IntersectionObserver((entries) => {for (const entrie of entries) {if (entrie.isIntersecting) {const animation = map.get(entrie.target);if (animation) {animation.play();ob.unobserve(entrie.target);}}}
});function isBelowViewport(el: HTMLElement) {const rect = el.getBoundingClientRect();return rect.top - (distance || DISTANCE) > window.innerHeight;
}export default {mounted(el: HTMLElement, binding: any) {if (binding.value) {// console.log(binding.value);distance = binding.value.px;animationtime = binding.value.time;}if (!isBelowViewport(el)) {return;}const animation = el.animate([{opacity: 0,transform: `translateY(${distance || DISTANCE}px)`,},{opacity: 1,transform: `translateY(0px)`,},],{duration: animationtime || ANIMATIONTIME,fill: "forwards",easing: "ease-in-out",});animation.pause();map.set(el, animation);ob.observe(el);},unmounted(el:HTMLElement) {ob.unobserve(el);},
};

二、源码迁移到nuxt3

存放目录为指定的的plugins文件夹,没有这个文件夹自己新建
然后新建一个文件xx.ts用于存放修改之后的指令代码, 我这里使用toTop.ts
所以路径是 plugins/toTop.ts 下面是文件内容

const DISTANCE = 100; // 距离
const ANIMATIONTIME = 500; // 500毫秒
let distance: number | null = null,animationtime: number | null = null;
const map = new WeakMap();
const ob =process.client &&new IntersectionObserver((entries) => {for (const entrie of entries) {if (entrie.isIntersecting) {const animation = map.get(entrie.target);if (animation) {animation.play();ob.unobserve(entrie.target);}}}});function isBelowViewport(el: HTMLElement) {const rect = el.getBoundingClientRect();return rect.top - (distance || DISTANCE) > window.innerHeight;
}export default defineNuxtPlugin((nuxtApp) => {nuxtApp.vueApp.directive("top", {mounted(el, binding) {if (binding.value) {// console.log(binding.value);distance = binding.value.px;animationtime = binding.value.time;}if (!isBelowViewport(el)) {return;}const animation = el.animate([{opacity: 0,transform: `translateY(${distance || DISTANCE}px)`,},{opacity: 1,transform: `translateY(0px)`,},],{duration: animationtime || ANIMATIONTIME,fill: "forwards",easing: "ease-in-out",});animation.pause();map.set(el, animation);ob.observe(el);},unmounted(el: HTMLElement) {ob.unobserve(el);},getSSRProps(binding, vnode) {// 你可以在这里提供SSR特定的propsreturn {};},});
});

三、注册指令

在 nuxt.config.ts 文件中


export default defineNuxtConfig({// ...其他配置plugins: ["/plugins/toTop.ts"],// ...其他配置
});

参考的官方文档

地址

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

体育馆运动场地预定小程序的独特优势与用户体验

随着人们健康意识的提高,体育馆成为了大家进行锻炼和运动的重要场所。为了更好地满足用户的需求,体育馆需要开发一款预定场地的小程序,为用户提供便捷、高效的预定服务。本文将介绍如何使用乔拓云平台开发体育馆运动场地预定小程序&#xff0…

ubuntu安装农历日历

1、安装liblunar-date-2.0-0和gir1.2-lunar-date-2.0 链接:https://pkgs.org/download/gir1.2-lunar-date-2.0 选择amd64的deb文件 复制下图网址下载 下图中为依赖项,下载liblunar-date-2.0-0 同样选择amd64版本 复制下图中地址进行下载 下载完成后切换…

vue-admin-template框架

vue-admin-template框架地址:项目地址 项目预览地址:项目预览 框架简介:这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。 …

从零学习Linux操作系统 第二十部分 mariadb数据库的管理

一、对于数据库的基本介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracle mongodb db2 sqlite sqlserver … 3.Mysql (SUN -----> Oracle) 4.mariadb (Mysql的一种) 数据库中的常用名词 1.字段 :表格中的表头 2.表 &…

Lucene 查询原理

Lucene 查询原理 - 知乎 前言 Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检…

python 如何获取一个文件夹的创立时间

问题描述: 之前创建的文件夹,忘记了创建时间,如何通过程序获取第一次的创立时间呢? 代码实现: import os import platform from datetime import datetime def get_creation_time(path):if platform.system() Windo…

【C语言】socket编程接收问题

一、recv()函数接收到的返回值为0表示对端已经关闭 在TCP套接字编程中,通过recv()函数接收到的返回值为0通常表示对端已经关闭了套接字的发送部分。这是因为TCP是一个基于连接的协议,其中有定义明确的连接建立和终止流程;当对端调用close()或…

用甘特图有效管理多个项目进度

当公司或组织同时承担多个项目时,合理规划各项目的时间节点与资源分配对确保高效完成至关重要。采用甘特图可以直观地展示多个项目的时间进程、关键里程碑以及资源分配情况,便于从宏观层面全面把控各项目的动态。 在线甘特图软件 zz-plan.com 提供了非常强大的时间轴规划功能,支…

SparkSql---用户自定义函数UDFUDAF

文章目录 1.UDF2.UDAF2.1 UDF函数实现原理2.2需求:计算用户平均年龄2.2.1 使用RDD实现2.2.2 使用UDAF弱类型实现2.2.3 使用UDAF强类型实现 1.UDF 用户可以通过 spark.udf 功能添加自定义函数,实现自定义功能。 如:实现需求在用户name前加上"Name:…

河南冷链物流盛典 华鼎科技引领行业创新共筑冷链强省梦

近日,由河南省商务厅指导、河南省物流协会主办的在郑州举行,本次大会以“创新驱动未来”为主题,近300名冷链物流行业精英、专家学者等参加了本届盛典。 河南省委、省政府高度重视物流业发展,出台了《河南省“十四五”现代物流业发展规划》、…

js数组/对象的深拷贝与浅拷贝

文章目录 一、js中的深拷贝和浅拷贝二、浅拷贝1、Object.assign()2、利用es6扩展运算符(...) 二、深拷贝1、JSON 序列化和反序列化2、js原生代码实现3、使用第三方库lodash等 四、总结 一、js中的深拷贝和浅拷贝 在JS中,深拷贝和浅拷贝是针对…

分析一个项目(微信小程序篇)二

目录 首页: 发现: 购物车: 我的: 分析一个项目讲究的是如何进行对项目的解析分解,进一步了解项目的整体结构,熟悉项目的结构,能够知道每个组件所处在哪个位置,发挥什么作用。 接…