iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue3 可拖动的左右面板分割组件实现
  • 680
分享到

vue3 可拖动的左右面板分割组件实现

2024-04-02 19:04:59 680人浏览 安东尼
摘要

目录分解组件左侧面板右侧面板入参分解 propsslots具体实现 如何拖动呢?事件监听 宽度处理 优化 buggit地址 最近在使用Vue的时候,遇到一个需求,实现左右div可通过

最近在使用Vue的时候,遇到一个需求,实现左右div可通过中间部分拖拽调整宽度,本文就整理一下,分享给大家,具体如下:

效果图

分解组件

整体使用flex布局

左侧面板

  • 面板的具体内容通过slot具名插槽传入。
  • title通过prop传入
  • 可拖动,为了保证内容样式不会被拖动所破坏,对面板的宽度设定最大值/最小值

右侧面板

  • 右侧面板宽度随着左侧面板的宽度变化而变化,此处需注意,内容的宽度使用flex-auto自动适应。
  • 需要做移动端的自适应。
  • 自适应使用tailwind的媒体查询

入参分解

props

  • @param {Number} maxWidth 最大宽度
  • @param {Number} minWidth 最小宽度
  • @param {String} leftTitle 左标题
  • @param {String} rightTitle 右标题?
  • @param {Boolean} sotoreage 是否存储与localstorege

slots

  • left-content {Element}  左侧内容
  • right-content {Element} 右侧内容

具体实现

如何拖动呢?

在左侧面板与右侧面板之间添加一个隐藏的盒子,我将这个盒子隐藏在box-shadow之中。具体事件放在这个div中实现


<div id="line" class="w-2 cursor-move hidden md4:block"onMousedown={hnadleMouseDown}>
</div>

事件监听


    const hnadleMouseDown = (evt: MouseEvent) => {
      
      let { pageX, pageY } = evt;
      basePosition.pageX = pageX;
      basePosition.pageY = pageY;
      
      document.addEventListener("mousemove", handleMouseMove);
      document.addEventListener("mouseup", handleMouseUp);
    };
    const handleMouseMove = evt => {
      
      evt.preventDefault();
      
      clearTimeout(timer.value);
      timer.value = setTimeout(() => {
        let { pageX } = evt;
        const baseDiv = document.querySelector(".right-border-shadow");
        
        let baseWidth: Number | undefined =
          Number(baseDiv?.clientWidth) + (pageX - basePosition.pageX);
        baseWidth =
          baseWidth > Number(props?.maxWidth) ? props.maxWidth : baseWidth;
        baseWidth =
          Number(baseWidth) < Number(props?.minWidth)
            ? props.minWidth
            : baseWidth;
        baseDiv?.setAttribute("style", `width:${baseWidth}px`);
        
        ctx.emit("drugend");
        
        setStore(baseWidth);
      }, 50);
    };
    const handleMouseUp = evt => {
      
      const width = document.querySelector(".right-border-shadow")?.clientWidth;
      document.removeEventListener("mousemove", handleMouseMove);
      document.removeEventListener("mouseup", handleMouseUp);
      ctx.emit("drugend", width);
    };

宽度处理


style={`width:${
            store.get("split-width")
              ? store.get("split-width")
              : props.minWidth
              ? props.minWidth
              : 384
          }px`}

优化

手动改变浏览器视窗宽度


nextTick(() => {
        ctx.emit("load", ctx);
        MutationObserver = window.MutationObserver;
        if (MutationObserver) {
          
          mo = new MutationObserver(function() {
            const __wm = document.querySelector("#rezie-id");
            // 只在__wm元素变动才重新调用 __canvasWM
            if (!__wm) {
              // 避免一直触发
              mo.disconnect();
              mo = null;
              ctx.emit("resize");
            }
          });
          mo.observe(document.querySelector("#rezie-id"), {
            attributes: true,
            subtree: true,
            childList: true,
          });
        }
      });

未生效,求指点

bug

父组件的onMounted钩子中获取子元素的slot元素节点报错,为null。目前的解决办法是在子组件的onMounted钩子中抛出一个load事件,父组件使用onLoad去处理接下来的逻辑。

git地址

仓库地址
预览地址

到此这篇关于vue3 可拖动的左右面板分割组件实现的文章就介绍到这了,更多相关vue3 可拖动左右分割面板内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网! 

--结束END--

本文标题: vue3 可拖动的左右面板分割组件实现

本文链接: https://www.lsjlt.com/news/127386.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue3 可拖动的左右面板分割组件实现
    目录分解组件左侧面板右侧面板入参分解 propsslots具体实现 如何拖动呢?事件监听 宽度处理 优化 buggit地址 最近在使用vue的时候,遇到一个需求,实现左右div可通过...
    99+
    2024-04-02
  • vue实现拖拽滑动分割面板
    本文实例为大家分享了vue实现拖拽滑动分割面板的具体代码,供大家参考,具体内容如下 需求背景 左边是列表,右边是详情。 想更大范围的查看详情,所以要拖拽滑块,进行面板的分割 整体思路...
    99+
    2024-04-02
  • Vue3实现一个可左右滑动操作组件的示例代码
    目录代码实现如何使用为了实现左右滑动能够切换页面,便有了做成组件的想法。 代码实现 监听touchstart,记录开始位置。 监听touchmove,记录移动的位置,计算移动的方向...
    99+
    2022-11-21
    Vue左右滑动组件 Vue左右滑动 Vue 滑动组件
  • uniapp实现左右联动商品分类页面
    目录零、前因一、搭建结构二、添加逻辑层业务三、最后tabbar数据总结零、前因 我们在日常的开发种,这种页面在项目当中经常会用得到,所以本篇文章会比较注重描述其思路,顺带附上其代码,...
    99+
    2024-04-02
  • vue3实现手机上可拖拽元素的组件
    前言: 用vue3实现一个可在手机上拖拽元素的组件,可拖拽至任意位置,并且可以防止拖拽元素移出屏幕边缘。 <script setup> import { ref } fr...
    99+
    2024-04-02
  • 怎么用js组件实现可拖动的div
    这篇“怎么用js组件实现可拖动的div”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用...
    99+
    2024-04-02
  • vue怎么实现左右滑动选择日期组件
    今天小编给大家分享一下vue怎么实现左右滑动选择日期组件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果图:1、安装day...
    99+
    2023-06-29
  • vue使用Split封装通用拖拽滑动分隔面板组件
    目录前言开始基础布局数据绑定事件绑定优化优化一 抖动问题优化二 鼠标样式优化三 滑动限制优化四 面板默认宽度和滑动器宽度优化五 插槽优化六 禁止选中结束组件完整代码组件使用示例前言 ...
    99+
    2024-04-02
  • Vue实现可拖拽组件的方法
    本文为大家分享了Vue实现可拖拽、拖拽组件,供大家参考,具体内容如下 描述: 组件仅封装拖拽功能,内容通过#header、#default、#footer插槽 自定义 效果:&nbs...
    99+
    2024-04-02
  • 手写可拖动穿梭框组件CustormTransfervue实现示例
    目录本文内容最终效果图组件html布局穿梭框左侧内容穿梭框右侧内容穿梭框中间向左、向右按钮把排序好的穿梭数据传给父组件整体代码小结本文内容 需求是实现类似 el-transfer的组...
    99+
    2022-11-13
    vue拖动穿梭框CustormTransfer 手写 CustormTransfer
  • 使用Android原生WebView+Highcharts实现可左右滑动的折线图
    目录前言开发的思路如下:(一)设计Android端的View层(二)设计与JS交互的方法(三)开发html以及js逻辑总结前言 今天的内容是使用Android原生webview配合H...
    99+
    2024-04-02
  • css页面中常见左中右分栏布局的实现方法
    这篇文章主要介绍“css页面中常见左中右分栏布局的实现方法”,在日常操作中,相信很多人在css页面中常见左中右分栏布局的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 怎么使用Android原生WebView+Highcharts实现可左右滑动的折线图
    这篇文章主要介绍“怎么使用Android原生WebView+Highcharts实现可左右滑动的折线图”,在日常操作中,相信很多人在怎么使用Android原生WebView+Highcharts实现可左右滑动的折线图问题上存在疑惑,小编查阅...
    99+
    2023-06-30
  • vue 实现拖拽动态生成组件的需求
    目录产品需求思路面临的问题拖拽库的选择如何生成组件生成组件组件以数据驱动动态组件的生成效果源码产品需求 开完产品需求会议,遇到了一个需求,首先页面分成两栏布局,左侧展示数据组件,支...
    99+
    2024-04-02
  • 利用Vue3实现一个可以用js调用的组件
    目录前言一、常规Vue组件1. 组件主要代码:2. 使用方式3. 实现效果二、改为js调用组件1. 实现步骤:2. 具体实现代码:3. 实现效果展示总结前言 项目开发中基本都会用到...
    99+
    2024-04-02
  • 基于Vue3定制复杂组件滚动条的实现
    目录⛸️ 怎样定制复杂组件的自定义滚动条?原生滚动条样式一言难尽寻找简单的解决方案Use Scrollbars 的诞生使用示例⛸️ 怎样定制复杂组件的自定义滚动条? 原生滚动条样式一...
    99+
    2023-05-18
    Vue3定制复杂组件滚动条 Vue3复杂组件 Vue3组件
  • Avalonia封装实现指定组件允许拖动的工具类
    创建Avalonia的MVVM项目,命名DragDemo ,然后将项目的Nuget包更新到预览版 <ItemGroup> <Pac...
    99+
    2023-03-01
    Avalonia拖动指定组件工具类 Avalonia拖动指定组件 Avalonia拖动组件
  • 基于Vue3实现无限滚动组件的示例代码
    目录为什么还要使用无限滚动组件无限滚动的优点无限滚动的缺点主要分为三个部分1.模拟 API 调用2.制作我们的内容组件3.显示我们的内容4.Vue3 无限滚动如果你在社交媒体上停留的...
    99+
    2024-04-02
  • 基于el-table封装的可拖拽行列、选择列组件的实现
    效果 需要环境 vue elementUI 拖拽插件Sortable.js 需配置属性 示例 <HTable :columns="columns" :d...
    99+
    2024-04-02
  • Avalonia如何封装实现指定组件允许拖动的工具类
    今天小编给大家分享一下Avalonia如何封装实现指定组件允许拖动的工具类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。创建...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作