vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/components)

Vueuse 是一个功能强大的 Vue.js 生态系统工具库,提供了可重用的组件和函数,帮助开发者更轻松地构建复杂的应用程序。

官网 :https://vueuse.org/core/useWindowScroll/

安装 VueUse

npm i @vueuse/core @vueuse/components

(可选)安装自动导入,添加到 imports 中

      // 需自动导入方法的库
      imports: [
        'vue',
        'pinia',
        '@vueuse/core',
        '@vueuse/components'
      ]

工具库

获取鼠标坐标 useMouse()

在这里插入图片描述

<script setup lang="ts">
const { x, y } = useMouse()
</script>

<template>
  <div>
    <p>x:{{ x }}</p>
    <p>y:{{ y }}</p>
  </div>
</template>

监听鼠标按下 useMousePressed()

<script setup>
const { pressed } = useMousePressed()
</script>

<template>
  <p>{{ pressed }}</p>
</template>

获取鼠标选择的文字 useTextSelection()

在这里插入图片描述

<script setup>
const state = useTextSelection()
</script>

<template>
  <p>一段供鼠标选择的文字</p>
  <p>被鼠标选择的文字是:{{ state.text }}</p>
</template>

窗口滚动条 useWindowScroll()

// 获取滚动条坐标
const { x, y } = useWindowScroll({ behavior: 'smooth' })
<!-- 滚动滚动条 -->
<button @click="x += 200">向右滚动 200 px</button>
<button @click="y += 200">向下滚动 200 px</button>

<!-- 滚动滚动条到指定位置 -->
<button @click="y = 600">向下滚动到 600 px</button>

元素滚动条 useScroll()

const el = ref<HTMLElement | null>(null)
const { x, y, isScrolling, arrivedState, directions } = useScroll(el)
<div ref="el" />

获取窗口大小 useWindowSize()

const { width, height } = useWindowSize()

添加事件监听 useEventListener

<script setup lang="ts">
let num = ref(0)
// 监听鼠标移动
useEventListener('mousemove', () => {
  num.value++
})
</script>

<template>
  <div class="p-20">
    <p>num:{{ num }}</p>
  </div>
</template>
  • 组件卸载时,监听事件会自动被移除

复制到剪贴板 useClipboard()

<script setup lang="ts">
const { copy, copied, isSupported, text } = useClipboard()

let msg = '你好'

async function doCopy() {
  copy(msg)

  if (copied) {
    alert('已复制到剪贴板!')
  }
}
</script>

<template>
  <div class="p-20">
    <p>{{ msg }}</p>
    <p v-if="text">已复制到剪贴板的内容:{{ text }}</p>
    <button v-if="isSupported" @click="doCopy">复制</button>
  </div>
</template>
  • copy 复制的方法
  • copied 是否完成复制
  • isSupported 浏览器是否支持复制到剪贴板
  • text 复制到剪贴板的内容

选择本地文件 useFileDialog()

<script setup lang="ts">
const { files, open, reset, onChange } = useFileDialog()
onChange((files) => {
  console.log(files)
})
</script>

<template>
  <button type="button" @click="open()">选择文件</button>
  <button type="button" :disabled="!files" @click="reset()">清空选择</button>
  <template v-if="files">
    <p>
      已选择 <b>{{ `${files.length}` }}</b> 个文件
    </p>
    <li v-for="file of files" :key="file.name">
      {{ file.name }}
    </li>
  </template>
</template>

切换全屏模式 useFullscreen()

<script setup lang="ts">
const { isFullscreen, enter, exit, toggle } = useFullscreen()
</script>

<template>
  <button v-if="isFullscreen" @click="exit">退出全屏</button>
  <button v-else @click="enter">全屏</button>

  <button @click="toggle">切换全屏模式</button>
</template>

图片加载 useImage

<script setup>
const avatarUrl = 'https://place.dog/300/200'
const { isLoading, error } = useImage({ src: avatarUrl })
</script>

<template>
  <span v-if="isLoading">图片加载中...</span>
  <span v-else-if="error">图片加载失败</span>
  <img v-else :src="avatarUrl" />
</template>

获取联网信息 useNetwork()

const { isOnline, offlineAt, downlink, downlinkMax, effectiveType, saveData, type } = useNetwork()

判断是否联网 useOnline()

const online = useOnline()

给元素添加动画 useOnline()

在这里插入图片描述

<script setup>
const el = ref()
const {
  isSupported,
  animate,

  // actions
  play,
  pause,
  reverse,
  finish,
  cancel,

  // states
  pending,
  playState,
  replaceState,
  startTime,
  currentTime,
  timeline,
  playbackRate
} = useAnimate(el, { transform: 'rotate(360deg)' }, 1000)
</script>

<template>
  <div class="p-40">
    <span ref="el" style="display: inline-block">旋转360度</span>
  </div>
</template>

可控的计时器 useIntervalFn()

<script setup>
let num = ref(0)
const { pause, resume, isActive } = useIntervalFn(() => {
  num.value++
}, 1000)
</script>

<template>
  <div class="p-40">
    <div>
      {{ num }}
    </div>

    <button v-if="isActive" @click="pause">暂停计时器</button>
    <button v-else @click="resume">恢复计时器</button>
  </div>
</template>

暂停代码执行 promiseTimeout

import { promiseTimeout } from '@vueuse/core'
async function print() {
  // 开启 console 的默认计时器
  console.time()

  // 打印当前 console默认计时器 的时间
  console.timeLog()

  // 等待1s后执行
  await promiseTimeout(1000)

  // 打印当前 console默认计时器 的时间
  console.timeLog()
}
print()

获取网页标题 useTitle()

const title = useTitle()
console.log(title.value) // 打印当前网页的标题

更多工具可参考官网,持续更新中!

组件库

图片加载 UseImage

<script setup lang="ts">
import { UseImage } from '@vueuse/components'
</script>

<template>
  <UseImage src="https://place.dog/300/200">
    <!-- 建议优化为图片加载动画 -->
    <template #loading> 图片加载中.. </template>

    <template #error> 图片加载失败 </template>
  </UseImage>
</template>

一键复制到剪贴板 UseClipboard

<script setup lang="ts">
import { UseClipboard } from '@vueuse/components'
</script>

<template>
  <UseClipboard v-slot="{ copy, copied }" source="复制的内容">
    <button @click="copy()">
      <!-- 建议优化为复制相关的图标 -->
      {{ copied ? '复制成功' : '复制' }}
    </button>
  </UseClipboard>
</template>

获取联网状态 UseNetwork / UseOnline

<script setup>
import { UseNetwork } from '@vueuse/components'
</script>

<template>
  <UseNetwork v-slot="{ isOnline }"> 是否联网: {{ isOnline }} </UseNetwork>
</template>

另一个也类似

<script setup>
import { UseOnline } from '@vueuse/components'
</script>

<template>
  <UseOnline v-slot="{ isOnline }"> 是否联网: {{ isOnline }} </UseOnline>
</template>

更多组件可参考官网,持续更新中!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

收银系统源码-ERP报损管理

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

揭秘!为何电路工程师都爱用在线化电路仿真软件?7大理由让你秒懂!

在科技日新月异的今天&#xff0c;电路设计与仿真技术已经成为电子工程领域不可或缺的一部分。随着在线化电路仿真软件的兴起&#xff0c;越来越多的工程师选择使用这种便捷、高效的工具来辅助他们的工作。那么&#xff0c;究竟是什么让在线化电路仿真软件如此受欢迎呢&#xf…

强烈建议!所有Python基础差的同学,死磕这本64页的背记手册!

Python背记手册是一份非常实用的学习资料&#xff0c;它涵盖了Python语言的基础知识、语法规则、常用函数和模块等内容&#xff0c;对于初学者和有一定基础的Python程序员来说都非常有用。通过背诵这份手册&#xff0c;可以加深对Python语言的理解和记忆&#xff0c;提高编程能…

Datadog Dash 2024 新功能解析

Datadog 2024 年的 Dash 刚刚落下帷幕&#xff0c;作为正在与 Datadog 开始竞争的观测云&#xff0c;我们认真仔细的分析了 Datadog 的每一个新功能&#xff0c;发现一些很有意思的事情&#xff0c;今天就给大家做一次全面的分析。&#xff08;所有 Datadog 的 Dash 的最新功能…

【解码现代 C++】:实现自己的智能 【String 类】

目录 1. 经典的String类问题 1.1 构造函数 小李的理解 1.2 析构函数 小李的理解 1.3 测试函数 小李的理解 1.4 需要记住的知识点 2. 浅拷贝 2.1 什么是浅拷贝 小李的理解 2.2 需要记住的知识点 3. 深拷贝 3.1 传统版写法的String类 3.1.1 拷贝构造函数 小李的理…

Pspice添加新的元器件

1.下载好的Pspice的模型文件。 2.将模型文件的&#xff0c;识别类型修改为 lib 选择Pspice的模型路径 会立马跳出&#xff0c;下面的这个窗口。 核实元器件图形&#xff0c;没问题。 添加Pspic仿真模型文件 验证&#xff0c;是否添加模型文件成功 使用模型文件

学会python——用python制作一个登录和注册窗口(python实例十八)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.登录和注册窗口 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

扫地机器人如何利用图算法来进行避障策略和优化清扫路径的?

前言 扫地机器人是现代家庭中最常见的智能设备。其基本的核心组件由主控系统&#xff08;大脑&#xff09;、传感器等控制系统&#xff08;感知系统&#xff09;、动力供应系统&#xff08;心脏&#xff09;、清扫系统&#xff08;四肢&#xff09;组成。 扫地机器人的智能、高…

【中项第三版】系统集成项目管理工程师 | 第 9 章 项目管理概论② | 9.4 - 9.5

前言 第 9 章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节理论性较强&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 9.4 项目生命周期和项目阶段 9.4.1 定义与特征 9.4.2 生命周期类型 9.5 项目立项管理 9.5.1 项目建议与立项申请 9.5.2 …

交换数字00

题目链接 交换数字 题目描述 注意点 numbers.length 2-2147483647 < numbers[i] < 2147483647 解答思路 不适用临时变量&#xff0c;可以先将numbers[0]和numbers[1]的信息都存到某个位置&#xff08;可以相加可以相减或其他位操作&#xff09;&#xff0c;然后另一…

昇思MindSpore学习笔记4-02生成式--DCGAN生成漫画头像

摘要&#xff1a; 记录了昇思MindSpore AI框架使用70171张动漫头像图片训练一个DCGAN神经网络生成式对抗网络&#xff0c;并用来生成漫画头像的过程、步骤。包括环境准备、下载数据集、加载数据和预处理、构造网络、模型训练等。 一、概念 深度卷积对抗生成网络DCGAN Deep C…

MMSC物料库位扩充

MMSC物料库位扩充 输入事务码MMSC&#xff1a; 回车后添加新的库位即可&#xff1a; 代码实现&#xff0c;使用BDC *&------------------------------------------------* *&BDC的定义 *&------------------------------------------------* DATA gt_bdcdata T…

【UE5.1】Chaos物理系统基础——03 炸开几何体集

目录 步骤 一、通过径向向量将几何体集炸开 二、优化炸开效果——让破裂的碎块自然下落 三、优化炸开效果——让碎块旋转起来 四、优化炸开效果——让碎块旋转的越来越慢 步骤 一、通过径向向量将几何体集炸开 1. 打开上一篇中&#xff08;【UE5.1】Chaos物理系统基础—…

百度出品_文心快码Comate提升程序员效率

1.文心快码 文心快码包含指令、插件 和 知识三种功能&#xff0c; 1&#xff09;指令包含Base64编码、Base64解码、JSON转TS类型、JSON转YAML、JWT解码喂JSON。 2&#xff09;插件包含 3&#xff09;指令包含如下功能&#xff1a; 官网链接

Jenkins 强制杀job

有时候有的jenkins job运行时间太长&#xff0c;在jenkins界面点击x按钮进行abort&#xff0c;会失败&#xff1a; 这时候点击&#xff1a; “Click here to forcibly terminate running steps” 会进一步kill 任务&#xff0c;但是也还是有杀不掉的可能性。 终极武器是jenkin…

Aigtek电压放大器参数有哪些

电压放大器是广泛应用于电子电路中的一种重要电路元件&#xff0c;它主要用于将输入信号的电压放大到所需的输出电压水平。在设计和使用电压放大器时&#xff0c;我们需要了解并考虑一系列的参数和特性。本文将详细介绍电压放大器的主要参数&#xff0c;包括放大倍数、带宽、输…

springboot校园购物网站APP-计算机毕业设计源码041037

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

【国产开源可视化引擎Meta2d.js】图层

独立图层 每个图元都有先后绘画顺序&#xff0c;即每个图元拥有一个独立图层&#xff0c;即meta2d.data().pens的数组索引。 可以通过meta2d.top/bottom/up/down等函数改变独立图层顺序。 分组图层 通过标签可以标识一个分组图层&#xff0c;通过meta2d.find(图层标签)获取…

己内酰胺纯化除杂的最佳工艺

己内酰胺纯化除杂的最佳工艺包括结晶法、离子交换树脂法、精馏法和萃取法等&#xff0c;每种方法都有其特定的应用场景和优缺点。以下是对这些方法的详细介绍&#xff1a; 最佳工艺介绍 ● 结晶法&#xff1a;通过调节pH值&#xff0c;使己内酰胺在特定条件下结晶&#xff0…

yolov8环境安装(可修改代码版本,源代码安装)

下载下来源文件以后&#xff0c;进去文件目录&#xff0c;然后输入pip指令&#xff0c;即可安装yolov8 cd ultralytics-main pip install -e . 直接使用pip安装的情况 当你使用pip install ultralytics这样的命令安装YOLOv8时&#xff0c;你实际上是在从Python包索引&#x…