首页 > 其他分享 >floating panel - 带有锚点功能和可拖拽顶栏的浮动面板

floating panel - 带有锚点功能和可拖拽顶栏的浮动面板

时间:2025-01-05 18:54:55浏览次数:1  
标签:浮动 顶栏 window 锚点 floating 面板 拖拽 panel

在现代的前端应用中,浮动面板是一个非常常见的UI组件,它能够为用户提供额外的信息和操作空间,同时又不会占据页面的主要内容区域。本文将详细记录如何实现一个带有锚点功能和可拖拽顶栏的浮动面板。

设计思路

这个浮动面板将由三个主要部分组成:父元素(floating-panel)、标头(floating-panel-header)和内容(floating-panel-content)。我们将通过设置父元素的偏移值来实现浮动效果,并通过监听touchmove事件来实现拖拽功能。

1. 父元素设计

父元素floating-panel将作为整个浮动面板的容器。常态下,我们将为它设置一个初始的偏移值,使其位于页面的底部。

2. 标头设计

标头floating-panel-header将作为用户交互的主要区域。它将包含一个可拖拽的顶栏,用户可以通过拖动这个顶栏来改变浮动面板的高度。我们将为这个顶栏添加touchmove事件监听器,以便在用户拖动时动态改变父元素的偏移值。

根据设计,我们的锚点可以大概设计为三个:底部、页面一半高度、页面顶部,分别对应不同的父元素偏移值

为了实现锚点功能,可以利用touchmovetouchend事件,根据 touchmoveclientY属性判断父元素最终的偏移值;

 touchmovetouchend都需要动态改变父元素的偏移,最终通过touchend来固定,以满足拖动的动画效果。

3. 内容设计

内容floating-panel-content将展示实际的信息和操作界面。它将根据父元素的偏移值动态调整自身的高度和显示内容。

实现步骤

1. HTML结构

首先,我们需要构建浮动面板的基本HTML结构。以下是一个简单的示例:

<div className="floating-panel" id="floating-panel" style={{ transform: `translateY(${window.innerHeight - 160}px)` }}>
  <div className="floating-panel-header" id="floating-panel-header">
    <div className="floating-panel-header-bar"></div>
  </div>
  <div className="floating-panel-content" id="floating-panel-content">
    <div className="content" id="content">
      <Content..... />
    </div>
  </div>
</div>

2. CSS样式

接下来,我们需要为浮动面板添加一些基本的CSS样式。以下是一个示例:

.floating-panel {
    background-color: rgba(30, 30, 30, 1);
    border-radius: 10px;
    height: 100%;
    &-header {
      display: flex;
      justify-content: center;
      align-items: center;
      cursor: grab;
      height: 20px;
      &-bar {
        height: 4px;
        width: 30px;
        border-radius: 10px;
        background-color: rgba(79, 79, 79, 1);
      }
    }
    &-content {
      padding: 10px;
      overflow-y: auto;
      max-height: 400px; /* 根据需要调整 */
    }
  }

3. JavaScript逻辑

最后,我们需要添加一些JavaScript逻辑来实现拖拽功能和锚点功能。

const initTouch = () => {
    const ele = document.getElementById('floating-panel-header');
    const panel = document.getElementById('floating-panel');
    const contentEle = document.getElementById('content'); // 内容元素
    let transformY = window.innerHeight - 160,
      contentHeight = window.innerHeight - 225;

    ele?.addEventListener('touchmove', (e) => {
      e.preventDefault();
      const { clientY } = e.touches[0];
      if (clientY < 180) {
        transformY = 0;
        contentHeight = window.innerHeight - 225;
      } else if (clientY >= 180 && clientY < window.innerHeight / 2 + 150) {
        transformY = window.innerHeight / 2 - 100;
        contentHeight = window.innerHeight - 545;
      } else {
        transformY = window.innerHeight - 160;
        contentHeight = window.innerHeight - 225;
      }
      panel.style.transform = `translateY(${clientY - 50}px)`;
    });
    ele?.addEventListener('touchend', () => {
      panel.style.transform = `translateY(${transformY}px)`;
      contentEle.style.height = `${contentHeight}px`;
    });
  };

注意事项

  • 在实现拖拽功能时,我们禁用了父元素的过渡效果,以确保拖拽过程中的高度变化是即时的。在拖拽结束后,我们恢复了过渡效果,以便父元素能够平滑地回到其最终位置。
  • 请注意,这个示例中的拖拽功能仅适用于移动端操作。如果你需要支持web设备,可以考虑使用mousedownmousemovemouseup事件来实现类似的逻辑。

通过以上步骤,我们成功实现了一个带有锚点功能和可拖拽顶栏的浮动面板。这个浮动面板可以根据用户的操作动态调整其高度,并且能够快速定位到指定的锚点位置。

标签:浮动,顶栏,window,锚点,floating,面板,拖拽,panel
From: https://www.cnblogs.com/little-sheep10/p/18653647

相关文章

  • 【Unity功能】动态锚点缩放平移UI(可用于缩放移动图片或者地图等)
    前言在UnityUGUI开发中,我们经常需要实现图片缩放功能,传统的缩放方式通常是以UI元素的中心点为基准进行缩放,这种方式在某些场景下可能不够直观,本文将介绍一种以鼠标位置为基准点的动态锚点缩放方案,让缩放效果更加自然和符合用户预期。一、效果演示二、制作过程简言该......
  • 龙芯3A4000的linux系统下node14.17.5运行出现Floating point exception(浮点数异常)问
    因项目需要在龙芯下使用node14.17.5执行构建任务,在使用源码编译安装后,执行时出现Floatingpointexception(浮点数异常)问题。经调试发现,其是在使用openssl加载ECC相关证书时使用mips64汇编代码时导致的。在分析相关代码后,将deps下的openssl中的bn_div.c文件的16行进行修改,重新......
  • 【MATLAB代码】TDOA定位,求三维下的位置(1主锚点、3副锚点),附代码
    目录代码概述代码结构输入输出联系作者代码用途获取方法代码概述该MATLAB代码实现了基于时间差定位(TDOA,TimeDifferenceofArrival)的方法,使用最小二乘法在三维空间中估计一个未知点的位置。该算法利用一个主锚点和三个副锚点的已知位置,通过计算信号传播时间差来......
  • 蓝牙定位的MATLAB程序,四个锚点、三维空间
       目录程序描述运行结果 程序描述这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关......
  • 【MATLAB代码】基于RSSI的蓝牙定位程序,N个锚点、二维平面(源代码,可直接复制)
    文章目录介绍主要功能技术细节适用场景:源代码运行结果结语介绍这款基于接收信号强度指示(RSSIRSSIRSSI)原理的蓝牙定位程序专为二维平面定位设计,通过N个蓝牙锚点实现对未知位置的精准定位。程序利用信号强度衰减模型,模拟测量误差&#x......
  • 论文阅读5——CORA:采用CLIP进行开放式词汇检测,结合区域提示和锚点预匹配
    论文原文地址:CVPR2023OpenAccessRepository开源代码:https://github.com/tgxs002/CORA目录论文翻译摘要:1介绍2相关工作3方法3.1总述3.2区域提升3.3 锚点预匹配4实验4.1数据集&训练&评估4.2实施细节4.3 与最先进方法的比较4.4.区域激励的有效性4......
  • 超链接相关属性:跳转页面、跳转文件、跳转锚点、换成指定应用
    1.跳转页面我这里用绝对网络路径跳转百度、京东说一下img属性值target的含义,值_self是在当前页签跳转,相对的值_blank就是打开新标签跳转注意事项:点击前的超链接字体为蓝色,点击时为红色,点击后的超链接字体为紫色(只限第一次跳转,第一次以后点击前的超链接字体也为紫色,除非刷新......
  • Unity Apple Vision Pro 开发(九):空间锚点
    XR开发者社区链接:SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子课程试看:https://www.bilibili.com/video/BV1JFHgegEb2课程完整版,答疑仅社区成员可见,可以通过文章开头的链接加入社区。空间锚点可以把虚拟物体固定在现实中的一个特定区域,锚定......
  • 【Material-UI】Floating Action Button (FAB) 详解:动画效果 (Animation)
    文章目录一、FAB按钮的动画概述1.默认动画效果2.多屏幕横向切换时的动画二、FAB动画效果的实现1.代码示例:跨标签页的FAB动画2.代码解析3.多个FAB的切换三、动画效果的最佳实践四、总结在现代网页设计中,动画不仅提升了用户界面的动态感,还增强了用户的交......
  • vue鼠标点击和滑动锚点
    效果<ulclass="list"><liclass="item"v-for="iteminletters":key="item":ref="item"@click="handleLetterClick"@touchstart.prevent="handleTouchStart&quo......