分享一款前端组件画布容器组件: vue-grabbing-box

分享一款前端组件画布容器组件: vue-grabbing-box

背景

在移动端和PC端,用户通常期望能够以直观的方式操作和浏览大尺寸的内容,比如图片或其他Vue组件。为了提供更好的用户体验,我们需要一个灵活且易于使用的组件,以实现在移动端和PC端的拖拽、缩放等功能。这就是 vue-grabbing-box 组件的开发动机。

Github 地址: www.npmjs.com/package/vue...

✨求Star 求分享 ღ( ´・ᴗ・` )比心✨

组件功能描述:

vue-grabbing-box 是一个灵活的容器组件,它能够展示各种内容,无论是图片还是其他Vue组件,并为用户提供了多种交互方式以满足移动端和PC端的需求。

同时 支持 vue2、vue3。

移动端功能:

  1. 单指拖拽: 用户可以通过单指在画布上滑动,实现内容的拖拽。
  2. 双指缩放: 通过双指捏合或展开的手势,用户可以对内容进行缩放操作。
  3. 按钮操作: 提供按钮,用户可以通过点击按钮实现扩大、缩小及重置功能。

PC端功能:

  1. 单击拖拽: 用户可以通过在画布上单击并拖动鼠标,实现内容的拖拽。
  2. 滚动轮操作: 鼠标滚动轮的上下滚动效果相当于上下拖动画布。
  3. Ctrl + 滚动轮缩放: 按住Ctrl键的同时使用鼠标滚动轮,实现内容的缩放。
  4. 按钮操作: 同样提供按钮,用户可以通过点击按钮实现扩大、缩小及重置功能。

vue-grabbing-box 的目标是提供一致而直观的用户体验,使用户能够以他们习惯的方式在不同设备上操作和浏览内容。

vue2 使用说明

demo地址: github.com/CoderMonkie...

安装

bash 复制代码
pnpm add vue-grabbing-box
# or
npm install vue-grabbing-box
# or
yarn add vue-grabbing-box

引入插件

js 复制代码
// main.js
import Vue from 'vue';
import GrabbingBox from 'vue-grabbing-box'; // 直接引入默认 vue2
// 或
import GrabbingBox from 'vue-grabbing-box/dist/vue2'; // 指定 vue2(推荐)
// v0.1.0起,不再将css一并打包进js文件,需要单独引入样式
import 'vue-grabbing-box/dist/vue2/index.css';

Vue.use(GrabbingBox);

// 组件级安装(局部安装)也是支持的,只是就一个组件而已,又不是组件库,就没必要了
// 而且组件单独安装必需要单独引入样式
import GrabbingBox from 'vue-grabbing-box/packages/vue2/src/grabbing-box';
import 'vue-grabbing-box/dist/vue2/index.css';
Vue.use(GrabbingBox);
// 或
Vue.component(GrabbingBox.name, GrabbingBox);
html 复制代码
<template>
  <grabbing-box>
    <!-- 这里是内容区域,放你自己的内容 -->
  </grabbing-box>
</template>

vue3 使用说明

demo 地址: github.com/CoderMonkie...

js 复制代码
// main.js
import { createApp } from 'vue';
import GrabbingBox from 'vue-grabbing-box/dist/vue3';
// 或
import { GrabbingBox } from 'vue-grabbing-box/dist/vue3';
import 'vue-grabbing-box/dist/vue3/index.css';

const app = createApp();
app.use(GrabbingBox);
app.mount('#app');

相关API参数说明

属性参数

属性名 类型 默认值 说明
maxScale Number 200 放大最高比例限制,单位百分比
minScale Number 20 缩小的最小比例限制,单位百分比
scaleStep Number 10 放大缩小的步长,点击按钮时用,单位同上
initScale Number 100 初始化时的显示比例,v1.0.0-alpha.4~
scaleButtons Boolean true 是否显示 scale 按钮组,包括放大(+)缩小(-)和重置
scaleButtonsPosition String top right v0.1.1 指定缩放按钮组的位置, `top right bottom left`
scaleButtonsSpaceX String 10px v0.1.1 指定与边的横向距离
scaleButtonsSpaceY String 20px v0.1.1 指定与边的纵向距离
throttleSpan Number 100 50(from v0.1.3) 事件节流时间间隔,单位毫秒
scrollSpeed Number 3 1(from v0.1.3) deprecated from v0.1.7 v0.0.6 PC端鼠标滚动轮上下滚动倍速,可设范围1~6
emitClickOnDrag Boolean false v0.1.4 拖拽后仍触发点击事件 (只是为了预防有特殊需要, 通常可以忽略这个参数 #7 屏蔽 click)

事件(from v0.1.7)

事件名称 说明 回调参数
update 任何显示效果的变化都会触发(包括放大缩小拖拽和重置) { scale, translateX, translateY }
zoom-in 放大显示效果的时候触发 { scale, translateX, translateY }
zoom-out 缩小显示效果的时候触发 { scale, translateX, translateY }
move 改变横向或竖向位置的时候触发,也就是拖拽或者滚动轮滚动或者触摸板滚动 Object
reset 重置时触发 -
相关推荐
fruge2 小时前
2025前端工程化与性能优化实战指南:从构建到监控的全链路方案
前端·性能优化
aesthetician3 小时前
Node.js v25 重磅发布!革新与飞跃:深入探索 JavaScript 运行时的未来
javascript·node.js·vim
知识分享小能手5 小时前
uni-app 入门学习教程,从入门到精通,uni-app基础扩展 —— 详细知识点与案例(3)
vue.js·学习·ui·微信小程序·小程序·uni-app·编程
demi_meng6 小时前
reactNative 遇到的问题记录
javascript·react native·react.js
MC丶科7 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
千码君20167 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
lijun_xiao20099 小时前
前端最新Vue2+Vue3基础入门到实战项目全套教程
前端
90后的晨仔9 小时前
Pinia 状态管理原理与实战全解析
前端·vue.js
杰克尼9 小时前
JavaWeb_p165部门管理
java·开发语言·前端
EndingCoder9 小时前
WebSocket实时通信:Socket.io
服务器·javascript·网络·websocket·网络协议·node.js