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

一、案例效果

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

二、案例代码

  • 封装抽屉组件
<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.rhkb.cn/news/434191.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI周报(9.22-9.28)

AI应用-Siipet宠物沟通师 Siipet是一款由SiiPet公司推出的创新宠物行为分析相机&#xff0c;旨在通过尖端技术加深宠物与主人之间的情感联系。这款相机利用先进的AI算法&#xff0c;能够自动识别和分析家中宠物的行为&#xff0c;并提供定制化的护理建议。 SiiPet相机的核心功…

GUI-Guider LVGL 添加自定义代码

添加自定义代码时&#xff0c;分为上线两端 1.上部分可有可无 2.下部分为你触发事件时调用的语句 具体集合下方图片 示例参考

Python入门:掌握inspect模块,轻松调试你的代码!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是inspect模块?📝 inspect模块的常用方法📝 1. 获取对象的信息📝 2. 获取函数的参数📝 3. 检查对象类型📝 4. 获取文档字符串📝 5. 获取调用方法的名称📝 实际应用场景⚓️ 相关链接 ⚓️…

[大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作

​​​​​​Generation of Complex 3D Human Motion by Temporal and Spatial Composition of Diffusion Models L Mandelli, S Berretti - arXiv preprint arXiv:2409.11920, 2024 通过时间和空间组合扩散模型生成复杂的3D人物动作 摘要 本文提出了一种新的方法&#xff0…

Spring AOP - 注解方式实现

前文已经讨论了基于配置文件方式实现Spring AOP&#xff08;Spring AOP - 配置文件方式实现&#xff09;&#xff0c;本文采用注解的方式实现前文相同的功能。配置步骤如下&#xff1a; 1、项目增加aop依赖&#xff08;pom.xml) <dependency><groupId>org.springfr…

linux 安装 tomcat9、java环境

一、安装 Java环境 1. 下载文件 https://repo.huaweicloud.com/java/jdk/ 或者网盘&#xff1a;通过网盘分享的文件&#xff1a;jdk-8u192-linux-x64.tar.gz 链接: https://pan.baidu.com/s/1V3pQWzgSLJxdrUdmmKueRA 提取码: qspw 2. 查看Linux系统是否有自带的jdk&#xf…

代码随想录_刷题记录_第四次

二叉树 — 理论基础 种类&#xff1a; 满二叉树&#xff08;所有层的节点都是满的&#xff0c;k&#xff1a;深度 节点数量&#xff1a;2^k - 1&#xff09;完全二叉树&#xff08;除了最后一层&#xff0c;其余层全满&#xff0c;并且最后一层从左到右连续&#xff09;二叉搜…

C语言扫盲

文章目录 C版本C语言特征GCCprintf数据类型函数指针内存管理void指针 Struct结构和Union结构typedef预处理器make工具cmake工具Projectintegral of sinc functionemulator embedded systeman event schedule 补充在线Linux终端安装Linux参考 建议还是国外教材学习…人家的PPT比…

【ESP32】Arduino开发 | I2C控制器+I2C主从收发例程

有关I2C控制器的详细介绍放在了IDF开发的文章中&#xff0c;跳转栏目目录可以找到对应的文章。 1. API Arduino启动时就已经实例化了两个I2C设备类&#xff0c;分别对应Wire和Wire1对象。 1.1 初始化 bool begin(int sda, int scl, uint32_t frequency0); // returns true, i…

【2023工业3D异常检测文献】PointCore: 基于局部-全局特征的高效无监督点云异常检测器

PointCore: Efficient Unsupervised Point Cloud Anomaly Detector Using Local-Global Features 1、Background 当前的点云异常检测器可以分为两类&#xff1a; &#xff08;1&#xff09;基于重建的方法&#xff0c;通过自动编码器重建输入点云数据&#xff0c;并通过比较原…

召回09 双塔模型+自监督学习

引入&#xff1a; 自监督学习改进双塔模型&#xff0c;可以提升业务指标。自监督学习是把物品塔学习得更习的更好。 长尾物品的曝光和点击数量太少&#xff0c;训练的样本次数不够。自监督可以更好地学习长尾数据的物品表征。 双塔模型的训练&#xff1a; 线上召回的时候不用纠…

【tbNick专享】虚拟机域控、成员服务器、降级等管理

在 VMware 中完成四台域控服务器、一台成员服务器的创建、降级域控为成员服务器&#xff0c;并创建子域的操作。 1. 创建四台域控和一台成员服务器 1.1 在 VMware 中创建虚拟机 启动 VMware Workstation&#xff1a; 打开 VMware Workstation&#xff0c;点击 “创建新的虚拟…

AIGC学习笔记—minimind详解+训练+推理

前言 这个开源项目是带我的一个导师&#xff0c;推荐我看的&#xff0c;记录一下整个过程&#xff0c;总结一下收获。这个项目的slogan是“大道至简”&#xff0c;确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型&#xff08;LLM&#xff09;&#xff0c;通过从零…

十分钟实现内网连接,配置frp

十分钟实现内网连接&#xff0c;配置frp 一.frp是什么&#xff1f;其实是一款实现外网连接内网的一个工具&#xff0c;个人理解&#xff0c;说白了就像是teamviwer一样&#xff0c;外网能访问内网。 利用处于内网或防火墙后的机器&#xff0c;对外网环境提供 http 或 https 服…

CSS04-Chrome调试工具

Chrome 浏览器提供了一个非常好用的调试工具&#xff0c;可以用来调试我们的 HTML结构和 CSS 样式。

Redis实战(使用Scan,Lua脚本,一次扣多个库存,多线程并发使用,并发获取分布式锁,BItMap实现签到和在线统计)

1.使用Scan 2.lua脚本操作Redis 一次扣减一个商品库存 一次扣减多个商品的库存 Testvoid test100() {String key "product.1";stringRedisTemplate.opsForValue().set("product.1","10");stringRedisTemplate.opsForValue().set("produc…

在一个.NET Core项目中使用RabbitMQ进行即时消息管理

为了在一个.NET Core项目中使用RabbitMQ进行即时消息管理&#xff0c;以下是详细的全程操作指南&#xff0c;包括安装、配置、编写代码和调试使用。 一、安装RabbitMQ 1. 安装Erlang RabbitMQ依赖Erlang&#xff0c;因此需要先安装Erlang。 Windows: 下载并运行Erlang安装…

千亿数据-异地容灾-查询打印——MySQL大数据优化

1. 数据备份策略 - 定期全量备份&#xff1a;制定周期性的全量数据备份计划&#xff0c;确保数据的完整性。 - 增量备份&#xff1a;在全量备份之间进行增量备份&#xff0c;减少备份时间和存储空间。 2. 数据存储 - 分布式存储&#xff1a;利用分布式存储系统来存…

港科夜闻 | 香港科大颁授荣誉大学院士予五位杰出人士

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大颁授荣誉大学院士予五位杰出人士。香港科大9月24日向五位杰出人士颁授荣誉大学院士&#xff0c;他们分别为包弼德教授、简吴秋玉女士、高秉强教授、吴永顺先生及容永祺博士(按姓氏英文字母排序)。荣誉大学院士颁…

多无人机通信(多机通信)+配置ssh服务

目录 多机通信 设备 主从机通信设置 配置从机 配置主机 测试 正式启用 MAVROS通信 多机通信 多机通信是实现机器人编队的基础&#xff0c;通过网络搭建通信链路。我们这里用中心节点网络通信&#xff0c;所有数据需有经过中心节点&#xff0c;所以&#xff0c;中心节点…