Vue3常用插件

标签: 无 分类: 未分类 创建时间:2021-10-26 02:33:20 更新时间:2025-09-26 04:44:39

1.vue3-seamless-scroll无缝滚动列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<template>
<div class="scroll-wrap">
<div class="scroll-header">
<ul class="scroll-ul">
<li class="scroll-li">
<span style="min-width: 80px; width: calc(100% - 180px)">标题</span>
<span style="width: 180px">日期</span>
</li>
</ul>
</div>
<div class="scroll-content">
<vue3-seamless-scroll class="scroll-list" :list="list" :hover="true" :step="0.4" :wheel="true" :isWatch="true">
<ul class="scroll-ul" v-for="(item, index) in list" :key="index">
<li class="scroll-li">
<span style="min-width: 80px; width: calc(100% - 180px)">{{ item.title }}</span>
<span style="width: 180px">{{ item.date }}</span>
</li>
</ul>
</vue3-seamless-scroll>
</div>
</div>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { Vue3SeamlessScroll } from "vue3-seamless-scroll";

const list = ref([
{
title: "Vue3.0 无缝滚动组件展示数据第1条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第2条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第3条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第4条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第5条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第6条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第7条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第8条",
date: Date.now(),
},
{
title: "Vue3.0 无缝滚动组件展示数据第9条",
date: Date.now(),
},
]);
</script>

<style scoped>
.scroll-wrap {
width: 500px;
height: 350px;
overflow: hidden;
}
.scroll-header,
.scroll-content {
width: 100%;
display: flex;
}
.scroll-list {
width: 100%;
overflow: hidden;
}
.scroll-ul {
width: 100%;
display: flex;
flex-direction: column;
}
.scroll-li {
width: 100%;
display: flex;
line-height: 35px;
}
.scroll-li > span {
display: flex;
height: 35px;
line-height: 35px;
border-top: 1px solid #dcdfe6;
border-left: 1px solid #dcdfe6;
padding-left: 5px;
overflow: hidden;
}
.scroll-li > span:last-child {
border-right: 1px solid #dcdfe6;
}
.scroll-header .scroll-li {
background-color: #F8F9FF;
}
.scroll-header .scroll-li > span {
font-weight: bold;
border-top: none;
}
.scroll-content .scroll-ul:last-child .scroll-li {
border-bottom: 1px solid #dcdfe6;
}
</style>

注意
(1) 在动态请求后台数据填充 list 的时候,一定要给一个初始值,否则数据不会更新。

1
2
3
4
// 错误
const list=ref([])
// 正确
const list=ref([{}])

(2) 动态请求的时候,初始数据列表最好有多条,否则会一直弹出警告 Duplicate keys found during update,至于多少条,估计要七八条数据吧。

参考文章:
【1】.基于vue的无缝滚动组件 这个是vue2.0版本的
【2】.基于vue3实现的vue3-seamless-scroll无缝滚动 这个是vue3.0版本的,但是直接使用npm安装无法使用的,不知道作者怎么引入的,要想真正的使用,还是要手动更改。
【3】.xfy520 / vue3-seamless-scroll 只能基于这个库重新创建自己的了
【4】.vue中实现自动滚动表格 分为表头和内容两部分,配合vue-seamless-scroll
【5】.vue3.0实现循环滚动数据-vue-seamless-scroll的使用 插件其实还是2.0版本的vue-seamless-scroll,只不过在引用的时候,使用了了vue3.0的方法
【6】.Vue3 列表自动滚动播放(表头固定、列表内容自动滚动播放)+ vue3-seamless-scroll - 附完整示例 这里提供了完整的代码,可以在 setup 中使用。
【7】.Vue3 无缝滚动组件:vue3-seamless-scroll 安装与配置全攻略 这里用了 defineComponent 进行了注册
【8】.vue3-seamless-scroll 这里是原始文件。
【9】.解决vue3-seamless-scroll动态数据不滚动的方法 关键在于,一定要给用于加载到滚动组件里面的数据一个初值!

2.vue3-pdf

最后我选择了 vue3-pdf 作为 pdf 的插件。但是这个插件有些问题,那就是没有找到销毁插件的方法。

参考文章:
【1】.TaTo30 /vue-pdf
【2】.vue3 实现预览pdf的几种方式(vue3-pdf, iframe流展示,vue-office/pdf)
【3】.andolphtellis /vue3-pdfjs
【4】.vue3-pdfjs 这个是示例
【5】.PDF.js使用总结
【6】.Vue3 实现 PDF 文件在线预览功能 这是一个自定义样式的例子。

3.pdf.js

我尝试了很久,始终无法把 pdfjs 集成到 vite+vue3中,其中的工作路径这个问题,让我困扰了很久。
(1) 安装

1
pnpm add vue-pdf-embed

(2) 使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<template>
<BasePopPanel
type="center"
height="auto"
left="1050px"
width="800px"
title="文件查看"
>
<VuePdfEmbed annotation-layer text-layer :source="pdfSource" />
</BasePopPanel>
</template>

<script setup lang='ts'>
import BasePopPanel from '@/components/BasePopPanel/index.vue'
import VuePdfEmbed from 'vue-pdf-embed'

// optional styles
import 'vue-pdf-embed/dist/styles/annotationLayer.css'
import 'vue-pdf-embed/dist/styles/textLayer.css'

// either URL, Base64, binary, or document proxy
const pdfSource = 'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf'
</script>

<style scoped>

</style>

参考文章:
【1】.pdfjs-dist 在vite4.x 下的使用问题 vite 4.3 下,在程序中手动挂载 pdfjsWorker 对象到 window上
【2】.基于最新 pdf.js 在 Vue3 中预览pdf的方法 “pdfjs-dist”: “^3.5.141”
【3】.vue3+vite使用vue-pdf-embed或者pdf-vue3预览 PDF 文件(能躲避 XSS 攻击,需要 pdf 文件的 base64 或者字节数组形式) 1.使用vue-pdf-embed。2.使用 pdf-vue3。
【4】.vue-pdf-embed 这个仓库的人数有点少
【5】.Hello World Walkthrough 这里有一个使用 pdf.js 的例子,可以参考一下,这也是官方的教程。Hello World using base64 encoded PDF、Previous/Next example
【6】.基于最新 pdf.js 在 Vue3 中预览pdf的方法 安装了 pdfjs-dist,使用了 canvas,引入了 pdfjs-dist/build/pdf.worker.entry。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件(ititchuan@gmail.com)通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
ititchuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。