封装 vue3 入场动画 插件 并发布到 npm

news2024/9/20 18:44:22

准备

vue create entry-animate

只需要简单的项目框架即可,router\vuex 都不用;

封装过程

  1. src 目录下新建 package,package文件夹是存放我们封装的组件的;
  2. 还需要加一个入口文件,在 package 中加一个 index.js 文件,通过后期引入main.js 文件的时候,注册成全局组件;
  3. 目录图片
  4. 我写了一个 Vue3 的动画入场效果,就是一个列表,一项一项的渐变进入的效果,其实组件随便写就好了,开心就行 对应的文件 =>  package/entryList/index.vue 
    <template>
      <div
        class="list-container gradientAnimation"
        :style="{ animationDelay: `${index * speed}ms` }"
      >
        <slot> </slot>
      </div>
    </template>
    
    <script>
    import { defineComponent } from "vue";
    
    export default defineComponent({
      name: "entryList",
      // 注册你的组件
      props: {
        // 列表的下标
        index: {
          type: Number,
          default: 0,
        },
    
        // 出现的速度
        speed: {
          type: Number,
          default: 100,
        },
      },
      // 定义一个组件的 emitted 事件,当在 emits 选项中定义了原生事件 (如 click) 时,将使用组件中的事件替代原生事件侦听器。
    });
    </script>
    
    <style scoped>
    .gradientAnimation {
      animation-name: gradient;
      animation-duration: 0.85s;
      animation-fill-mode: forwards;
      opacity: 0;
    }
    
    /* 不带前缀的放到最后 */
    @keyframes gradient {
      0% {
        opacity: 0;
        transform: translate(-100px, 0px);
      }
    
      100% {
        opacity: 1;
        transform: translate(0px, 0px);
      }
    }
    </style>
    
  5. 封装好了,可以先在 app 文件中进行测试
    目录:src/App.vue
    <script setup>
    import { reactive } from "vue";
    import entryList from "./package/entryList/index.vue";
    
    const list = reactive([
      1, 2, 3, 4, 5, 7, 8, 7, 4, 5, 1, 2, 4, 4, 84, 2, 1, 2, 1, 2, 3, 4, 5, 7, 8, 7,
      4, 5, 1, 2, 4, 4, 84, 2, 1, 2, 1, 2, 3, 4, 5, 7, 8, 7, 4, 5, 1, 2, 4, 4, 84,
      2, 1, 2, 1, 2, 3, 4, 5, 7, 8, 7, 4, 5, 1, 2, 4, 4, 84, 2, 1, 2, 1, 2, 3, 4, 5,
      7, 8, 7, 4, 5, 1, 2, 4, 4, 84, 2, 1, 2,
    ]);
    </script>
    
    <template>
      <div class="list-contaienr">
        <div class="" v-for="(item, index) in list" :key="index" v-entry="index">
          <entryList :index="index">
            <div class="item">
              {{ item }}
            </div>
          </entryList>
        </div>
      </div>
    </template>
    
    <style scoped>
    .list-contaienr {
      text-align: center;
      width: 100%;
      background: #c0c7b5;
    }
    
    .item {
      background-color: #fff;
      margin-bottom: 10px;
    }
    
    .gradientAnimation {
      animation-name: gradient;
      animation-duration: 0.85s;
      animation-fill-mode: forwards;
      opacity: 0;
    }
    
    /* 不带前缀的放到最后 */
    @keyframes gradient {
      0% {
        opacity: 0;
        transform: translate(-100px, 0px);
      }
    
      100% {
        opacity: 1;
        transform: translate(0px, 0px);
      }
    }
    </style>
    
  6. 注册全局组件,使用Vue提供的install方法,这个方法会在使用Vue.use(plugin)时被调用,这样就能让我们需要导出的组件注册到全局, 就可以在任意组件中像使用子组件一样直接使用导出的组件

    rc/package/index.js
    import entryList from "./entryList/index.vue";
    
    // --target lib 指定打包的目录
    // --name 打包后的文件名
    // --dest 打包后的文件夹名称
    
    const componentArr = [entryList];
    
    export default {
      install: (app) => {
        // 注册组件
        componentArr.forEach((item) => {
          app.component(item.name, item); // item.name就是引入组件中的name属性,所以每个组件都需要name
        });
      },
    };
    

    发布

  7. 修改打包配置命令 package.json
    
    // --target lib 指定打包的目录
    // --name 打包后的文件名
    // --dest 打包后的文件夹名称
    
    
      "scripts": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
        "lint": "vue-cli-service lint",
        "package": "vue-cli-service build --target lib ./src/package/index.js --name entry-animate --dest entry-animate"
      },
  8. 执行打包命令
    npm run package
    
  9. 打包完成之后,会在src 同级目录下生成一个 entry-animate 的文件夹。其实对应的就是 --dest 的 名字了
  10.  cd 切换到 entry-animate 目录下。初始化 package.json 文件,执行命令 npm init -y 初始化 package.json 文件即可
    具体的配置如下
    {
      "name": "entry-animate",
      "version": "1.0.0",
      "description": "",
      "main": "entry-animate.common.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "private": false, // 是否设为私有包
      "license": "ISC"
    }

注册 NPM 的账号(有npm账号可跳过此步)

  1. 可去npm官网注册: https://www.npmjs.com;
    也可以通过命令行注册

    首先得将npm镜像源切换为官方的源,大部分人的镜像源可能为淘宝镜像源,其他的也不行,想发布就得切换为npm官方镜像源

    npm config set registry=https://registry.npmjs.org
    

    注册

    npm adduser
    

    依次填入账号、密码、邮箱, 填写完成后邮箱会收到一个npm发的一次性密码(也就是验证码) 再次填入即可,如果还未填写就报错,多半是得需要

  2. npm publish
    


    发布成功的图

  3. npm中文网 官网  然后去 npm 上查找一下自己发的包 我的 entry-animate 

使用

  1.  安装
    npm i entry-animate

  2.  mian.js 文件中引入
  3. 使用

 具体的效果,就不上传视频了

 搞定收工,这样发布就完成了,以后就能从npm 拉包进行项目开发了

npm 链接 entry-animate - npm


 

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

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

相关文章

BHQ-2 Maleimide,BHQ2 马来酰亚胺,用于检测生物分子的存在和浓度变化

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ BHQ-2 Mal&#xff0c;BHQ2 Maleimide&#xff0c;BHQ-2 马来酰亚胺 PART1----​Product structure&#xff1a; PART2----​Product specifications&#xff1a; 1.CAS No&#xff1a;N/A 2.Molecular formula&#xff1…

linux跑代码,程序终止了,但资源没有释放。

linux跑代码&#xff0c;程序终止了&#xff0c;但资源没有释放。 程序终止&#xff0c;但是资源没有释放. kill -9 5062完成。 linux终止进程

Aspose.cell excel转pdf日期格式不正确yyyy/MM/dd变成MM/dd/yyyy

最近使用Aspose.cell将excel转pdf过程中excel中时间格式列的显示和excel表里的值显示不一样。 excel里日期格式 yyyy/MM/dd pdf里日期格式MM/dd/yyyy 主要原因&#xff1a;linux和windows里内置的时间格式不一致&#xff0c;当代码部署到linux服务器的时候转换格式就会发生不一…

独立站不能忽略的小细节

一个产品最重要的地方就是细节&#xff0c;正所谓细节决定成败&#xff0c;做好细节消费者才感到自己被重视而不是被敷衍&#xff0c;才愿意下单买商家的产品。做独立站的时候&#xff0c;我们也应该去思考以下四个小细节&#xff0c;自己是否有好好注意呢&#xff1f; 1、网站…

龙芯3A5000板卡在高性能工作站的应用方案-迅为电子

将龙芯3A5000应用于高性能工作站时&#xff0c;可以考虑以下方案&#xff1a; 多核计算能力&#xff1a;龙芯3A5000拥有多核心处理器&#xff0c;具备强大的计算能力。在高性能工作站中&#xff0c;可以利用多核心的处理能力来支持复杂的工程设计、科学计算和数据处理任务。…

springboot配置自定义数据源(Druid德鲁伊)的步骤。

今天和大家分享下在Springboot中配置自定义数据源Druid的两种方法及步骤。 方法一&#xff1a; 1.在pom.xml配置依赖(注释里面的内容) 2.配置自己的数据源设置&#xff0c;我是在yaml文件中配置的&#xff0c;顺便提醒一下&#xff0c;在配置yaml文件的时候缩进问题一定要注意…

河南省委网信办副主任赵小平一行莅临麒麟信安调研

7月5日下午&#xff0c;河南省委网信办副主任赵小平、河南省委网信办网络安全协调处处长刘宝献、河南省委网信办网络安全协调处副处长马芊培、河南省委网信办网络安全协调处干部李阳、河南省委网信办综合处干部韩飞等领导一行莅临麒麟信安调研网络安全产业相关情况。湖南省委网…

危险的指针---字符指针和字符数组指针所导致的段错误

前言 &#xff08;1&#xff09;今天在编写采用平台总线模型的LED点灯程序时候&#xff0c;发现每次装载驱动&#xff0c;都会报如下错误&#xff0c;最后一行报错说段错误。 &#xff08;2&#xff09;我一开始以为是因为自己的平台总线模型写错了&#xff0c;花了很长时间进行…

【JavaScript 07】函数声明 地位平等 函数提升 属性方法 作用域 参数 arguments对象 闭包 IIFE立即调用函数表达式 eval命令

函数 1 概述1.1 声明1.2 重复声明 1.3 圆括号/return/recursion1.4 一等公民1.5 函数提升 2 函数属性与方法2.1 name属性2.2 length属性2.3 toString() 3 函数作用域3.1 概念3.2 函数内部变量提升3.3 函数本身作用域 4 参数4.1 概念4.2 省略4.3 传递4.4 同名4.5 arguments 对象…

SSIS对SQL Server向Mysql数据转发表数据 (一)

开发工具 Visual Stuido 2019 、SSIS、SQL Server 2016、Mysql 8.0.30 1、配置VS2019的添加相应的功能&#xff0c;勾选SQL Server Data Tools,下载就行我用的VS2019版本还需要下载下面几个插件&#xff0c;链接我放在下面了 Microsoft Analysis Services Projects - Visual St…

城市内涝的原因有哪些?如何解决?

内涝是指由于强降水或连续性降水超过城市排水能力致使城市内产生积水灾害的现象。造成内涝的客观原因是降雨强度大&#xff0c;范围集中。降雨特别急的地方可能形成积水&#xff0c;降雨强度比较大、时间比较长也有可能形成积水。城市内涝的发生会引发交通瘫痪&#xff0c;甚至…

第二节 我用Python论证乖离率(BIAS)真的靠谱吗?

视频地址&#xff1a;点我查看文章配套视频&#xff0c;持续更新中~&#xff01; 什么是BIAS 乖离率也称为Y值&#xff0c;是用股价指数与移动平均线的比值关系来描述股票价格与移动平均线之间的偏离程度。乖离率指标是根据葛兰威尔八大买卖原则推演而来的&#xff0c;其原则是…

GPT4ALL私有化部署 01 | Python环境

进入以下链接&#xff1a; https://www.python.org/downloads/release/python-3100/ 滑动到底部 选择你系统对应的版本&#xff0c;如果你是win&#xff0c;那么大概率是win-64bit 有可能你会因为网络的问题导致下载不了&#xff0c;我提供了 链接 接着只需要打开 等待…

用于事实核查的知识图谱比较推理:问题定义和算法 7.24+7.26

用于事实核查的知识图谱比较推理&#xff1a;问题定义和算法 摘要介绍问题定义知识段&#xff08;Knowledge Segment KS&#xff09;共性不一致性集体共性集体不一致性成对比较推理集体比较推理 知识片段提取Predictate-Predictate Similarity特定边的知识段特定子图知识段 比较…

Vite构建的vue3项目修改网站标题和图标

1.准备一张.ico后缀的图片&#xff0c;这里推荐文件转换器&#xff0c;可以将常见的图片格式转为.ico格式图片。 2.修改网站标题和图标 网站的标题和图标都可以在项目根路径下的index.html下修改。 2.1 网站标题修改<title>标签体内容即可。 2.2 网站图标修改如图<…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(8)-Fiddler如何设置捕获会话

1.简介 前边几篇宏哥介绍了Fiddler界面内容以及作用。今天宏哥就讲解和分享如何设置Fiddler后&#xff0c;我们就可以捕获会话&#xff0c;进行抓包了。 2.捕获会话的设备 常见的捕获会话的设备分为PC&#xff08;电脑&#xff09;端和手机&#xff08;Android和IOS苹果&…

【yolov8系列】将yolov8-seg 模型部署到瑞芯微RK3566上

前言 之前记录过【yolov5系列】将模型部署到瑞芯微RK3566上&#xff0c;整体比较流畅&#xff0c;记录了onnx转rknn的相关环境配置&#xff0c;使用的rk版本为rknn-toolkit2-v1.4.0。当前库已经更新为1.5&#xff0c;这里还是沿用1.4的版本进行记录。本篇博客是在上篇博客&…

重发布及路由策略

目录 重发布 作用 条件 规则 名词解释点 点 向 单点重发布 双点重发布 路由策略 控制层流量和数据层流量 抓流量 ACL列表 前缀列表( ip-prefix) 实例演示 做策略 过滤策略(过滤器-策略) 路由策略(route-policy) 基本配置 路由策略使用 配置实验 重发布 在…

Python 中一个好用的股票开源库akshare

背景 从小编真实接触股票已经有10年之久了&#xff0c;因为大学的专业就是数据与应用数据&#xff08;金融学方向&#xff09;&#xff0c;大三、大四学期时学习了很多涉及金融相关的课程&#xff0c;特别是在大四时&#xff0c;老师还专门给每位同学开通了模拟炒股的账户&…

合并 K 个升序链表——力扣23

题目描述 法一 顺序合并 class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2){ListNode* dummy new ListNode(-1); //创建一个新的头节点 ListNode *curdummy, *aPtr l1, *bPtr l2;while(aPtr && bPtr){if(aPtr->val < bPtr->…