封装左侧抽屉可拖拽组件【可多个】

一、案例效果

在这里插入图片描述
在这里插入图片描述

二、案例代码

  • 封装抽屉组件
<template><div class="drag-drawer"><div class="out-box" :style="style"><mtd-tooltip:content="collapse ? '展开面板' : '收起面板'"class="tool-tip":placement="mode === 'right' ? 'left' : 'right'":show-arrow="false"><div class="switch" @mousedown="onSwitchDragStart($event)"></div></mtd-tooltip></div><divclass="border"@mousedown="onDragStart($event)":style="borderStyle"></div><divclass="wrapper"v-if="!collapse":style="{ width: currentWidth + 'px', paddingLeft: '20px' }"><slot name="content"></slot></div></div>
</template><script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator';@Component
export default class DragDrawer extends Vue {@Prop({ type: String, default: 'right' }) public mode!: string;@Prop({ type: Boolean, default: false }) private hasTab?: boolean;@Prop({ type: Number, default: 0 }) private leftMargin: number;private collapse = false;private currentWidth = 400;private fromPage = '';get style() {if (!this.isLeft) {return {right: this.collapse ? '-3px' : `${this.currentWidth - 2}px`,};} else {return {left: this.collapse? -3 + this.leftMargin + 'px': `${this.currentWidth - 2}px`,transform: 'rotate(180deg)',};}}// drawer是否在左侧get isLeft() {return this.mode === 'left';}get borderStyle() {if (this.isLeft) {return {right: 0,};} else {return {left: 0,};}}private onDragStart(e: any) {const startWidth = this.currentWidth;const pageX = e.pageX;let isMoving = false;const moveCb = (ev: any) => {if (this.collapse) {return;}const currentWidth = this.isLeft? startWidth + (ev.pageX - pageX): startWidth + pageX - ev.pageX;if (currentWidth > 360 && currentWidth <= 800) {this.currentWidth = currentWidth;}isMoving = true;};const upCb = () => {this.$store.state.paint.key++;document.removeEventListener('mousemove', moveCb);document.removeEventListener('mouseup', upCb);};document.addEventListener('mousemove', moveCb);document.addEventListener('mouseup', upCb);}private onSwitchDragStart(e: any) {const startWidth = this.currentWidth;const pageX = e.pageX;let isMoving = false;const moveCb = (ev: any) => {if (this.collapse) {return;}const currentWidth = this.isLeft? startWidth + (ev.pageX - pageX): startWidth + pageX - ev.pageX;if (currentWidth > 360 && currentWidth <= 800) {this.currentWidth = currentWidth;}isMoving = true;};const upCb = () => {document.removeEventListener('mousemove', moveCb);document.removeEventListener('mouseup', upCb);if (!isMoving) {this.collapse = !this.collapse;}};document.addEventListener('mousemove', moveCb);document.addEventListener('mouseup', upCb);}
}
</script><style scoped lang="less">
.drag-drawer {background: #fff;position: relative;width: 100%;height: 100%;.out-box {font-size: 20px;cursor: pointer;width: 18px;z-index: 999;position: absolute;background: #edededfd;top: 0;bottom: 0;height: 100%;.tool-tip {display: inline-block;width: 20px;height: 40px;position: relative;top: 93%;.switch {height: 100%;background: url('../../../assets/paintSwitch.png') no-repeat centercenter;background-size: cover;-moz-user-select: none; /* Firefox私有属性 */-webkit-user-select: none; /* WebKit内核私有属性 */-ms-user-select: none; /* IE私有属性(IE10及以后) */-khtml-user-select: none; /* KHTML内核私有属性 */-o-user-select: none; /* Opera私有属性 */user-select: none; /* CSS3属性 */&:hover {background-image: url('../../../assets/paintSwitchHover.png');}}}.nav {position: absolute;right: 10px;text-decoration: none;display: inline-block;width: 25px;height: 25px;cursor: pointer;padding: 3px 0 0 6px;.text {font-size: 12px;width: 25px;transform: rotate(-180deg);}&:hover {color: dodgerblue;}}.nav::after {content: '';position: absolute;top: 0;left: 0;right: 0;bottom: 0;background: #fff;border: 1px solid #edededfd;border-right: none;border-radius: 5px 0 0 5px;box-shadow: -3px -3px 5px #edededfd;transform: perspective(10px) scale(1.1, 1.3) rotateY(-15deg);z-index: -1;}.tab_s {color: dodgerblue;}}.border {width: 1px;background: rgba(0, 0, 0, 0.12);box-sizing: border-box;position: absolute;top: 0;bottom: 0;cursor: col-resize;z-index: 9999;}.wrapper {height: 100%;}
}
</style>
  • 使用组件
 <DragDrawer ref="drawer" mode="left"><template slot="content"> 抽屉内容1 </template>
</DragDrawer>
<DragDrawer ref="drawer" mode="left" :leftMargin="21"><template slot="content"> 抽屉内容2 </template>
</DragDrawer>

三、 使用的图片

可换成icon哦
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

AI漏扫工具:SmartScanner

SmartScanner 是一款先进的 AI 漏洞扫描工具&#xff0c;旨在帮助用户识别和修复软件、系统及网络中的安全漏洞。以下是 SmartScanner 的一些主要特点&#xff1a; 1.智能识别 通过机器学习和深度学习技术&#xff0c;SmartScanner 能够快速识别已知和未知的漏洞&#xff0c;提…

推荐一个移动端支持多框架的UI组件库

支持的前端框架&#xff1a;Vue、React、Angular 地址&#xff1a;https://ionicframework.com/docs/

Web端云剪辑解决方案,提供前端产品源码

美摄科技作为业界领先的视频技术服务商&#xff0c;匠心打造Web端云剪辑解决方案&#xff0c;以前沿技术赋能企业用户&#xff0c;开启视频创作与编辑的新纪元。 【云端赋能&#xff0c;重塑剪辑体验】 美摄科技的Web端云剪辑解决方案&#xff0c;颠覆了传统视频编辑的局限&a…

一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH

实时视频传输协议 1. RTMP&#xff08;Real Time Messaging Protocol&#xff09; 简介&#xff1a;RTMP是由Adobe公司开发的实时消息传输协议&#xff0c;主要用于流媒体数据的传输。它基于TCP传输&#xff0c;具有低延迟、高可靠性的特点。特点&#xff1a;RTMP支持多种视频…

【Mysql】Centos 安装 Mysql8.0

官网下载安装包 官网地址&#xff1a;MySQL :: Download MySQL Community Server 查看服务器的名称和版本号 lsb_release -a 查看服务的架构 uname -m 下载对应的版本&#xff0c;这里操作系统选择 Red Hat 就可以了。&#xff08;CentOS 就是将 RHEL 发行的源代码从新编译…

828华为云征文 | 华为云 X 实例服务器存储性能测试与优化策略

目录 引言 1 华为云 X 实例服务器概述 2 存储性能测试方法与工具 2.1 测试方法 2.2 测试工具 3 FIO&#xff08;Flexible I/O Tester&#xff09;读写性能测试 3.1 顺序读写测试 3.2 随机读写测试 4 hdparm性能测试 4.1 实际读取速度测试 4.2 缓存读取速度测试 4.3…

最大似然估计,存在即合理

一、感性认识 认识的第一步来自感性的认识&#xff0c;先来感性的了解一下最大似然估计。现在&#xff0c;假设有两个学院&#xff0c;物理和外语学院。两个学院都各有特点&#xff0c;物理学院的男生占比大&#xff0c;外语学院女生占比大。如果在一次实验从两个学院中随机的…

SPSS26统计分析笔记——3 假设检验

1 假设检验原理 假设检验的基本原理源于“小概率事件”原理&#xff0c;是一种基于概率性质的反证法。其核心思想是小概率事件在一次试验中几乎不会发生。检验的过程首先假设原假设 H 0 {H_0} H0​成立&#xff0c;然后通过统计方法分析样本数据。如果样本数据引发了“小概率事…

《让手机秒变超级电脑!ToDesk云电脑、易腾云、青椒云移动端深度体验》

前言 科技发展到如今2024年&#xff0c;可以说每一年都在发生翻天覆地的变化。云电脑这个市场近年来迅速发展&#xff0c;无需购买和维护额外的硬件就可以体验到电脑端顶配的性能和体验&#xff0c;并且移动端也可以带来非凡体验。我们在外出办公随身没有携带电脑情况下&#x…

Vue3:toRaw与markRaw

目录 一.toRaw 1.性质 2.作用 二.markRaw 1.性质 2.作用 三.toRaw的使用 四.markRaw的使用 五.代码示例 在Vue 3中&#xff0c;toRaw和markRaw是两个用于处理响应式对象的全局函数。 一.toRaw 1.性质 toRaw是一个全局函数&#xff0c;它接受一个由reactive或ref生成…

彻底理解前端模块化

目录 引入历史问题 CommonJSexports导出module.exports导出require导入加载过程缺点 AMD规范&#xff08;基本不用&#xff09;require.js使⽤ CMD规范&#xff08;基本不用&#xff09;SeaJS的使⽤ ES Module简单使用export关键字import关键字export和import结合default⽤法im…

YOLOv10改进 | 特征融合篇,YOLOv10添加iAFF(多尺度通道注意力模块),二次创新C2f结构,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

RK3568笔记六十三:基于LVGL的Linux相机

若该文为原创文章,转载请注明原文出处。 记录移植韦老师的基于LVGL的Linux相机项目,主要是想学习如何在LVGL下显示摄像头数据。 此项目是基于老师的源码框架移植的,地址是lv_100ask_linux_camera: 基于LVGL的Linux相机 (gitee.com) 个人使用的是RK3568,正点原子板子,所以…

WordPress 要求插件开发人员进行双因素身份验证

全球超过40%的网站由 WordPress 提供支持&#xff0c;其庞大的插件和主题生态系统在全球范围内提供了灵活性和定制性。然而&#xff0c;这种受欢迎程度也使其成为网络攻击的主要目标。 WordPress 将为所有插件和主题开发人员引入强制性双因素身份验证 (2FA)&#xff0c;以应对…

《经典图论算法》约翰逊算法(Johnson)

摘要&#xff1a; 1&#xff0c;约翰逊算法的介绍 2&#xff0c;约翰逊算法的实现步骤 3&#xff0c;约翰逊算法的准确性验证 4&#xff0c;约翰逊算法的代码实现 1&#xff0c;约翰逊算法的介绍 约翰逊算法(Johnson algorithm)是在稀疏图上求每对顶点之间最短路径的一种算法&a…

《解锁高效流程设计:深度剖析责任链模式与实战应用》

《解锁高效流程设计&#xff1a;深度剖析责任链模式与实战应用》 责任链模式 是一种行为设计模式&#xff0c;它允许多个对象来处理请求&#xff0c;而不预先指定具体的处理者。多个处理对象被连接成一条链&#xff0c;沿着这条链传递请求&#xff0c;直到某个处理对象决定处理…

SOMEIP_ETS_130: SD_Multicast_FindService_with_unicast_Flag_to_0

测试目的&#xff1a; 验证DUT能够忽略带有设置为0的单播标志的多播FindService请求&#xff0c;并以单播OfferService消息作为响应。 描述 本测试用例旨在确保DUT在接收到一个设置了单播标志为0的多播FindService请求时&#xff0c;能够忽略该标志并按照SOME/IP协议的要求&…

旧衣回收小程序搭建,开发功能优势

随着人们生活水平、消费水平的提高&#xff0c;在日常生活中产生了大量的限制物品&#xff0c;为了减少浪费&#xff0c;越来越多的人开始重视环保回收。旧衣物作为一种新型的回收方式&#xff0c;也逐渐得到了大众的关注&#xff0c;旧衣物回收市场发展规模也在持续上升&#…

【C++】STL详解之string类

目录 什么是STL STL的版本 STL的六大组件 STL的缺陷 一.string的定义方式 二. string的插入 1.使用push_back进行尾插 2.使用insert插入 三.string的拼接 四.string的删除 1.使用pop_back进行尾删 2.使用erase进行删除 五.string的查找 1.使用find正向搜索第一个…

快速排序(plus)与单调栈道,力扣912.排序数组​​​​​​​力扣215.数组中的第k大个元素力扣17.14最小的k个数单调栈力扣.柱状图中最大的矩形

目录 力扣912.排序数组​​​​​​​ 力扣215.数组中的第k大个元素 力扣17.14最小的k个数 单调栈 力扣.柱状图中最大的矩形 力扣912.排序数组 快速排序:最重要的就是数据划分&#xff0c;叫做partation left往后走&#xff0c;假如遇到比key小的&#xff0c;left是因为&a…