【Vue】可拖拽侧边栏实现

news2024/11/18 15:36:38

 在本篇博客中,我们将探讨如何在 Vue.js 项目中实现一个可拖拽的侧边栏。此功能可以通过修改 HTML 和 Vue 组件的脚本来实现。

 首先,我们需要在 HTML 文件中定义侧边栏的容器和用于拖拽的元素。在 Vue 组件中,我们将使用 Vue 的响应式系统来追踪侧边栏的宽度,并添加事件处理程序来响应鼠标拖拽事件。

效果如下:
请添加图片描述

以下是实现拖拽侧边栏的步骤和代码:

  1. 定义侧边栏容器和拖拽元素
    在 HTML 文件中,我们需要一个包含侧边栏内容的容器和一个可以拖拽的元素。

    <template>
      <div class="app-container">
        <div class="app-card">
          <el-container style="height: 100%">
            <el-header>标题</el-header>
            <el-container>
              <el-aside
                :width="widthData + 'px'"
                style="overflow: auto; min-width: 150px; max-width: 600px"
              >
                <div
                  style="overflow: auto; height: 100%; width: 100%; display: flex"
                >
                  <el-tree
                    :data="treeData"
                    :props="defaultProps"
                    :expand-on-click-node="false"
                    default-expand-all
                    :disabled="true"
                    @node-click="handleNodeClick"
                  />
                </div>
              </el-aside>
              <div
                id="asideBar"
                style="
                  height: 100%;
                  width: 7px;
                  padding: 0 3px;
                  cursor: col-resize;
                  display: flex;
                "
              >
                <div
                  :class="barClass"
                  style="
                    height: 100%;
                    width: 1px;
                    border-radius: 1px;
                  "
                ></div>
              </div>
              <el-main style="min-width: 300px">
                <div>内容</div>
              </el-main>
            </el-container>
          </el-container>
        </div>
      </div>
    </template>
    
  2. 添加 Vue 组件的脚本
    在 Vue 组件的脚本部分,我们将使用 Vue 的响应式系统来追踪侧边栏的宽度,并添加事件处理程序来响应鼠标拖拽事件。

    <script lang="ts" setup>
    // ... 省略其他代码 ...
    const barClass = ref("normal"); // 正常样式
    const updateWidth = () => {
      let resize = document.getElementById("asideBar");
      if (!resize) {
        return;
      }
      resize.onmousedown = function (e) {
        if (e.button != 0) {
          return;
        }
        barClass.value = "pressed"; // 按下时的样式
        let startX = e.clientX;
        document.onmousemove = function (e) {
          let endX = e.clientX;
          let moveLen = endX - startX;
          startX = endX;
          widthData.value+= moveLen;
          if (widthData.value < 150) {
            widthData.value= 150;
          }
          if (widthData.value> 600) {
            widthData.value= 600;
          }
        };
        document.onmouseup = function () {
          barClass.value = "normal";  // 恢复正常样式
          document.onmousemove = null;
          document.onmouseup = null;
        };
        return false;
      };
    };
    // ... 省略其他代码 ...
     </script>
    

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

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

相关文章

Flink SQL 基于Update流出现空值无法过滤问题

问题背景 问题描述 基于Flink-CDC &#xff0c;Flink SQL的实时计算作业在运行一段时间后&#xff0c;突然发现插入数据库的计算结果发生部分主键属性发生失败&#xff0c;导致后续计算结果无法插入&#xff0c; 超过失败次数失败的情况问题报错 Caused by: java.sql.BatchUp…

计算机网络——28自治系统内部的路由选择

自治系统内部的路由选择 RIP 在1982年发布的BSD-UNIX中实现Distance vector算法 距离矢量&#xff1a;每条链路cost 1&#xff0c;# of hops(max 15 hops)跳数DV每隔30秒和邻居交换DV&#xff0c;通告每个通告包括&#xff1a;最多25个目标子网 RIP通告 DV&#xff1a;在…

虚机无法进入系统一直轮转在内核启动页面处理

【问题现象】 在日常处理虚机过程中会出现&#xff0c;虚机无法进入系统&#xff0c;一直轮转在内核启动页面的情况 【处理办法】 【步骤一】登录原先内核系统&#xff0c;设置默认新内核启动 【步骤二】进入系统后设置 # grubby --set-default /boot/vmlinuz-3.10.0-957.ax…

2023自适应霍夫曼编码High-performance RDHEI with adaptive Huffman code

RRBE 本文仅供自我学习使用,切勿转载和搬运,如有侵权,联系立删~ 方法总框架 首先由内容所有者生成原始图像像素点的标签映射; 然后数据隐藏者采用自适应霍夫曼编码将多个信息插入加密图像像素点;接收端进行数据提取和图像恢复。在数据提取之前,必须对标记的加密图像进行…

Digital Image processing (DIP)

Camera FOV: Filed of view DOV: deep of view 景深 被F f/D 衡量&#xff0c;f 是焦距&#xff0c;D 是光圈大小。 当确定好了景深后&#xff0c;如何光线较暗&#xff0c;则需要补光&#xff0c;或者适当延长曝光时间&#xff08;快门&#xff09; 分辨率、像素尺寸&…

qt-C++笔记之QSpinBox控件

qt-C笔记之QSpinBox控件 code review! 文章目录 qt-C笔记之QSpinBox控件1.运行2.main.cpp3.main.pro4.《Qt6 C开发指南》&#xff1a;4.4 QSpinBox 和QDoubleSpinBox 1.运行 2.main.cpp #include <QApplication> #include <QSpinBox> #include <QPushButton&g…

Hides for Mac:应用程序隐藏工具

Hides for Mac是一款功能强大的应用程序隐藏工具&#xff0c;专为Mac用户设计。它能够帮助用户快速隐藏当前正在运行的应用程序窗口&#xff0c;保护用户的隐私和工作内容&#xff0c;避免不必要的干扰。 软件下载&#xff1a;Hides for Mac下载 Hides for Mac的使用非常简单直…

2024年springboot+vue毕业设计选题推荐

2024年&#xff0c;随着技术的发展和市场需求的变化&#xff0c;基于Spring Boot和Vue的毕业设计选题可以更加注重新兴技术的融合和解决实际问题。以下是一些建议的选题方向&#xff1a; 1. 基于Spring Boot和Vue的智能健康管理系统 - 设计并实现一个集成了运动数据、睡眠监…

chrome 浏览器报错 This page will not function without javascript enabled

This page will not function without javascript enabled. Please enable javascript on your browser. 在访问公司spark history 页面时&#xff0c;发现页面加载不全&#xff0c;并提示如上报错&#xff0c;因此按照如下步骤&#xff0c;已解决问题。 在浏览器中启用 JavaS…

【ML】类神经网络训练不起来怎么办 5

【ML】类神经网络训练不起来怎么办 5 1. Saddle Point V.S. Local Minima(局部最小值 与 鞍点)2. Tips for training: Batch and Momentum(批次与 动量)2.1 Tips for training: Batch and Momentum2.2 参考文献:2.3 Gradient Descent2.4 Concluding Remarks(前面三讲)3.…

国际伦敦金行情分析中的趋势分析方法

国际伦敦金行情走势复杂多变。近期&#xff0c;金价曾经一度刷新历史的新高点至2222&#xff0c;但就在当天&#xff0c;金价又快速下跌跌超过30美元。不过这么多变的伦敦金行情也为我们的交易创造了空间&#xff0c;有空间就等于有机会&#xff0c;只要我们能够掌握国际伦敦金…

自然语言处理3(NLP)—— 机器学习

1. 自然语言处理在机器学习领域的主要任务 自然语言处理&#xff08;NLP&#xff09;在机器学习领域中扮演着至关重要的角色&#xff0c;旨在使计算机能够理解、解释和生成人类语言。以下是NLP在机器学习领域中的主要任务及其分类方法&#xff1a; 1.1 按照功能类型分类 1.1.…

http模块 url对象的主要属性

在 Node.js 中&#xff0c;URL 对象是一个内置类&#xff0c;用于解析和操作 URL 字符串。URL 对象具有多个属性&#xff0c;这些属性提供了对 URL 不同部分的访问。以下是URL对象的一些主要属性及其含义&#xff1a; &#xff08;1&#xff09;href 返回完整的 URL 字符串。…

鸿蒙OS开发问题:(ArkTS)【 RSA加解密,解决中文乱码等现象】

RSA加解密开始构建工具类就是举步维艰&#xff0c;官方文档虽然很全&#xff0c;但是还是有很多小瑕疵&#xff0c;在自己经过几天的时间&#xff0c;彻底解决了中文乱码的问题、分段加密的问题。 首先看官方示例代码(以RSA非对称加解密&#xff08;多次调用doFinal实现分段&a…

【前端】layui学习笔记

参考视频&#xff1a;LayUI 1.介绍 官网&#xff1a;http://layui.apixx.net/index.html 国人16年开发的框架,拿来即用,门槛低 … 2. LayUi的安装及使用 Layui 是一套开源的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript…

AssertionError: extension access disabled because of command line flags解决方案

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文介绍在 Stable Diffusion WebUI 中安装插件时出现 AssertionError: extension access disabled because of comma…

【前端面试3+1】03深拷贝浅拷贝、let和var、css盒模型、【有效括号】

一、深拷贝浅拷贝 深拷贝和浅拷贝都是用于复制对象或数组的概念&#xff0c;但它们之间有着重要的区别&#xff1a; 1. 浅拷贝&#xff1a; 浅拷贝是指在拷贝对象或数组时&#xff0c;只会复制一层对象的属性或元素&#xff0c;而不会递归地复制嵌套的对象或数组。因此&#xf…

POJ3037 + HDU-6714

两道最短路好题 POJ3037 手玩一下 发现每一点的速度可以直接搞出来&#xff0c;就是pow(2,h[1][1]-h[i][j])*V 那么从这个点出发到达别的点的耗费的时间都是上面这个数的倒数&#xff0c;然后直接跑最短路就好了 #include<iostream> #include<vector> #include<…

SiteServer 学习笔记 Day03 添加栏目

1、添加栏目&#xff0c;信息管理->栏目管理->添加按钮&#xff0c;分别添加“关于我们”、“市场服务”、“制造服务”、“测试服务”、 “工程服务”、“补充服务”、“新闻动态”、“网站地图”、“博客”、“联系我们”、“质量保证”、“Banner”。如下图。 2、栏目…

Hack.Summit() 2024再添亮点:Morphism CEO Cecilia Hsueh确认出席

随着Web3技术的风起云涌&#xff0c;区块链行业正在全球范围内以前所未有的速度崭露头角。而在这场变革的浪潮中&#xff0c;备受瞩目的区块链盛会——Hack.Summit() 2024区块链开发者大会&#xff0c;将于2024年4月9日至10日&#xff0c;在香港数码港拉开帷幕。这不仅标志着Ha…