React 实现 iphone 上的小圆点的拖拽功能

点状进度图:用SVG圆点实现高可用、可访问的进度可视化 进度条是Web数据可视化中最基础的组件之一,其本质是将数值型指标映射为线性视觉反馈。传统填充式进度条依赖CSS渐变或SVG路径描边,虽实现简单,但在动态更新、无障碍支持、性能控制和设计表达力上存在明显短板。点状进度图(Dotted Progress Chart)以离散圆点阵列替代连续色块,通过CSS transform位移与精准动效控制,在不增加框架依赖的前提下,显著提升响应性、可访问性与视觉引导力。它天然适配SVG矢量缩放、ARIA进度语义、深色模式及多端分辨率,特别适用于SaaS看板、实时监控大屏与金融 阅读详情

在移动端或者PC端我们来模拟拖拽功能的实现, 通过模拟iphone上的Touch-Sensitive Home Button,此处简单实现,仅作开发参考。

效果演示

主要代码演示

/* 拖动功能 */

// 初始化宽高
let oW,oH;
let oLeft = 0;
let oTop = 0;
let htmlWidth = document.documentElement.clientWidth;
let htmlHeight = document.documentElement.clientHeight;
let bWidth = 0;
let bHeight = 0;
let block = null;

export default {
  // 初始化
  init(_block) {
    // 更新dom元素及其宽度和高度
    block = _block;
    bWidth = block.offsetWidth;
    bHeight = block.offsetHeight;
    // 监听
    this.listen(block);
  },
  // 拖动功能
  documentMove(e) {
    // 区分移动端和PC端
    (e.touches) && (e = e.touches[0]);
    oLeft = e.clientX - oW;
    oTop = e.clientY - oH;
    // 控制可拖动范围
    if(oLeft < 0) {
      oLeft = 0;
    } else if (oLeft > htmlWidth - bWidth) {
      oLeft = (htmlWidth - bWidth);
    }
    if(oTop < 0) {
      oTop = 0;
    } else if (oTop > htmlHeight - bHeight) {
      oTop = (htmlHeight - bHeight);
    }

    block.style.left = oLeft + "px";
    block.style.top = oTop + "px";
  },

  // 监听功能
  listen(block) {
    // 支持 移动端
    block.addEventListener("touchstart", (e)=>{
      e = e.touches[0];
      oW = e.clientX - block.offsetLeft;
      oH = e.clientY - block.offsetTop;
      
      // 监听document touchmove
      document.addEventListener("touchmove", this.documentMove ,false);

      // 监听document touchend
      document.addEventListener("touchend", (e) => {
          document.removeEventListener("touchmove", this.documentMove, false);
      },false);
    },false);

    // 支持PC端
    block.addEventListener("mousedown", (e)=>{
      oW = e.clientX - block.offsetLeft;
      oH = e.clientY - block.offsetTop;

      // 监听document mousemove
      document.addEventListener("mousemove", this.documentMove ,false);

      // 监听document mouseup
      document.addEventListener("mouseup", (e)=>{
          document.removeEventListener("mousemove", this.documentMove, false);
      },false);
      
      // 监听document mouseleave
      document.addEventListener("mouseleave", ()=>{
          document.removeEventListener("mousemove", this.documentMove, false);
      }, false);
    },false);
  }
}

支持平台

  • 移动端
  • PC端

Github地址

  • https://github.com/rwxbot/iphone-drag-button
Vue 3 Netflix式轮播组件:从手势交互到坐标系建模 轮播组件是Web内容流导航的基础技术,其核心在于滚动行为与用户意图的精准映射。本文围绕Vue 3响应式系统,深入解析物理滚动位置、逻辑卡片索引与语义交互状态三层坐标系的解耦设计,涵盖`useScroll`自定义Hook实现、`computed`驱动的二分查找索引计算、`watchEffect`构建的拖拽状态机等关键技术。结合`swiper`按需引入、鸿蒙Next原生手势兼容、CSS变量动态动效等工程实践,解决iOS卡顿、卡片错位、无障碍支持等高频问题。适合构建影视/电商/课程类平台的内容流导航系统。 阅读详情

相关推荐

使用React创建轮播图(2)小按钮

文章目录前言一、目标功能二、实现方法1.添加渲染内容2.添加css样式内容三、完整代码四、效果展示总结 前言 使用React创建轮播图(1)框架+自动跳转 一、目标功能 在前言(1)的基础上添加小按钮功能 1.关于左右切换小按钮:在原先自动切换的功能上(我使用的是将left的数据存入state数组中保存然后调用),再加上向左切换的函数 2.关于指定页面小按钮:通过onClick事件修改对应数组的元素位置 二、实现方法 1.添加渲染内容 代码如下: render(){ return(

Echianer的博客 840

拖拽功能实现 TS

表示要操作的元素。函数的主要功能是实现拖拽功能,允许用户通过按住鼠标左键并移动鼠标来拖动页面上的元素。接下来,函数检查当前浏览器是否为移动设备,如果不是移动设备且元素存在,则为元素添加。当按下鼠标按钮时,如果满足条件(即按下的是鼠标左键并且是顶部点击),则将。事件监听器,在事件处理函数中更新元素的位置。同时,还定义了一个名为。的函数,用于在不需要拖拽时移除事件监听器。函数首先设置元素的样式为。然后,函数为文档添加。:点击表单顶部区域,拖动整个表单。用于计算元素的新位置。,并计算元素的新位置。

weixin_65953411的博客 370

【信息科学与工程学】计算机科学与自动化——第六十三篇 人机交互之前端交互参数知识库01

此方案可满足千万级并发需求,同时支持时序数据、知识图谱和文档数据库的高效处理,通过云原生架构实现极致弹性。​:每月约$15-20万(100节点K8s集群+数据库集群+CDN流量)1. 宠物上架/下架流程。

weixin_49199313的博客 1479

React框架制作移动端H5可拖拽的悬浮图标

React框架制作移动端H5可拖拽的悬浮图标

l1134的博客 1554

ReactNative底部导航栏(带消息圆点)

React Native:使用react-native-scrollable-tab-view库的ScrollableTabView实现了想要的功能(控制Tab页面的显示和隐藏、带消息圆点指示器)

react-drag-drawer:响应式移动抽屉,可在移动设备上拖动,并在桌面上退回到模式

React拖动抽屉 可移动的可拖动抽屉,可回溯到桌面上的模式 安装 $ npm install react-drag-drawer --save 用法 import Drawer from 'react-drag-drawer' . . toggle = ( ) => { let { toggle } = this . state this . setState ( { toggle : ! toggle } ) } render ( ) { const { open } = this . state return ( < Drawer open = {

react 实现浮动可吸附悬浮窗,悬浮球,悬浮按钮,支持拖动拖拽功能(suspend-button)

最近在做移动端,有个需求是 实现一个浮动球可拖拽,能吸附(吸附到 左右两则,距离哪进就吸附到哪边)。使用 suspend-button 实现

从事前端,不断积累经验,学习新的技术。头像不是本人是莉莉崽(美貌、可爱集于一身的小姐姐,小仙女),一个宝藏博主,值得喜欢! 5135

react-native-draggable:可拖动项

React本机可拖动 UPDATE DEC 2019(v3.0.0)-此存储库刚刚被完全刷新,并且包含非常不同的功能,请在下面查看新的道具和用法 用于本机React的可拖动项! npm install react-native-draggable import Draggable from 'react-native-draggable'; 如何使用 return ( <View> <Draggable x={75} y={100} renderSize={56} renderColor='black' renderText='A' isCircle shouldR

react 伪类实现小圆点 无序列表li::before

锚点在react中的使用,对后端返回的数据进行处理,包括增删改查,对数组、字符串的操作。

在职可交流前端开发,包括:web端、uniapp等,欢迎指教。 930

Qt制作大数据可视化大屏展示电子看板

Qt制作大数据可视化大屏展示电子看板 解决当前最火的大数据可视化大屏展示,整个项目通过Qt开发,集成了QML/QChart/ECharts及自定义控件等模块,所有的可视化控件都可以集成到其中。可以随意增加和减少模块,各个模块可以随意拖拽,整体可以个性化布局。模块标题栏可自定义,包括标题文本信息、文本颜色、宽度/高度、背景颜色、按钮个数等功能,满足各个样式需求。 实例中主要展示了现成的一些仪表盘...

Qt自定义控件及应用开发 7707

Rider高效调试UE引擎:无需编译源码的符号配置指南

本文提供了一份详尽的Rider高效调试UE引擎指南,核心在于无需编译源码即可配置调试符号。通过Epic启动器下载官方PDB文件,并在Rider中正确配置外部符号服务器路径,开发者能在10分钟内实现对引擎内部代码(如AActor::Tick)的源码级断点调试、变量查看和调用堆栈分析,极大提升问题排查效率。

weixin_29011239的博客 343

React DnD移动端适配终极指南:Touch后端的完整使用教程

想要在移动端应用中实现流畅的拖拽功能吗?React DnD的Touch后端正是为移动设备量身定制的解决方案!🚀 这份终极指南将带你从零开始,全面掌握React DnD在移动端的适配技巧。 React DnD是一个功能强大的React拖拽库,而Touch后端专门针对触摸设备进行了优化。无论是手机还是平板,都能获得原生的拖拽体验。 ## 为什么选择Touch后端? 传统的HTML5后端在移动端

gitblog_01065的博客 524

解决鸿蒙/荣耀设备GMS应用调试中的“Play保护机制认证”报错

本文详细解析了在鸿蒙或荣耀设备上调试GMS应用时,遇到“Play保护机制认证”报错的根本原因与解决方案。核心在于获取设备的GMS Device ID,并通过Google官方渠道完成临时注册,从而绕过认证限制。文章提供了无需Root和ADB查询两种具体方法,并分享了授权后的故障排查与实战经验,帮助开发者高效解决问题。

weixin_29288313的博客 301

React DnD移动端适配终极指南:Touch Backend的完整使用和优化方案

在移动互联网时代,React DnD的移动端适配变得尤为重要。HTML5后端在触摸设备上无法正常工作,这就是为什么我们需要专门为移动设备设计的Touch Backend。🚀 ## 为什么需要Touch Backend? React DnD的HTML5后端主要基于鼠标事件设计,无法处理触摸屏上的touchstart、touchmove和touchend事件。Touch Backend专门解决了

gitblog_00367的博客 941

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

kercii的博客 1万+

ESP32开发进阶:1.接入文心一言

ESP32开发进阶:接入文心一言大模型,串口对话

qq_53529450的博客 1433

ReactNative学习十五-横竖布局及右上角圆点

1.效果图 2.源代码 'use strict'; import React, { Component, View, Image, Text, Dimensions, StyleSheet } from 'react-native'; var deviceWidth = Dimensions.get('window').width;

zhukui66的专栏 3340

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

CSS--实心小圆点样式

<style> .marker { width: 50px; height: 50px; border: 1px solid #088; border-radius: 100px; background-color: #FFFFFFF; opacity: 0.5; }...

聆听。。花开雨落的博客 8469

YOLOv8改进策略【YOLO和Mamba】| 2024 VM-UNet,高效的特征提取模块VSS block 二次创新提高精度

VM-UNet模型设计的出发点是解决现有CNN-based和模型在医学图像分割中的局限性,利用(SSMs)的优势,提出一种更有效的医学图像分割模型。具体来说,CNN-based模型在捕捉长距离信息方面存在不足,而模型由于自注意力机制的二次复杂度导致计算负担较重。SSMs模型如Mamba不仅在建模长距离依赖方面表现出色,还具有线性计算复杂度,这为VM-UNet的设计提供了理论基础。

Limiiiing的博客 625

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1138

圆形进度条react-circle

https://github.com/zzarcon/react-circle

Cora_CHEN的博客 3060

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

react native 创建一个圆形按钮

How to create a circle button in React Native HOW TO CREATE A CIRCLE BUTTON IN REACT NATIVE In this React Native source code example, the source code below illustrate how to create a circle butto...

taoerchun的专栏 3338

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

react-dnd 拖拽能力教程

近几年来,低代码、零代码的热度在国内逐年递增。“复杂度同力一样不会消失,也不会凭空产生,它总是从一个物体转移到另一个物体或一种形式转为另一种形式”。用户在使用低零代码构建应用程序时,这些能力只是被平台研发人员提前编写完了。作为低零代码的基础,前端拖拽能力就尤为重要。一个完整的拖拽流程分为两部分:拖动+放置让一个元素支持拖动是一件非常容易做到的事情,只需要在对应的 dom 节点增加的属性即可。真正麻烦的是放置的能力。我们需要监听ondragover等各个阶段的事件,处理起来过分的繁琐。

发果叁 1447

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

react hook 小球拖拽

原文链接: react hook 小球拖拽 上一篇:...

阿豪 261
上一篇: Python笔记:argparse 命令行模块的使用
下一篇: React 实现 2D 画板功能
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值