返回顶部
首页 > 资讯 > 精选 >图形编辑器中JS怎么实现拖拽阻塞
  • 398
分享到

图形编辑器中JS怎么实现拖拽阻塞

2023-07-05 09:07:07 398人浏览 薄情痞子
摘要

本篇内容主要讲解“图形编辑器中js怎么实现拖拽阻塞”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“图形编辑器中JS怎么实现拖拽阻塞”吧!图形编辑器中在图形编辑器中,想象这么一个场景,我们撤销了一些

本篇内容主要讲解“图形编辑器中js怎么实现拖拽阻塞”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“图形编辑器中JS怎么实现拖拽阻塞”吧!

图形编辑器中

在图形编辑器中,想象这么一个场景,我们撤销了一些重要的操作,然后想选中一个图形,看看它的属性。你点了上去,然后你发现你再也无法重做了。

你以为你点了一下,但其实你点击的时候,鼠标还是小小移动了一点,飘了一个像素点。对编辑器来说,它识别到让图形移动一个像素点的操作,就生成了一个新的版本,然后重做栈(redoStack)被清空了,你退回前的操作就没了。

为了解决这类用户微小操作的问题,我们可以巧妙地给拖拽行为加一个 阻塞阈值。具体就是就是按下鼠标后,移动鼠标的距离要大于某个值,我们才认为发生了拖拽,并执行对应工具的逻辑。

按下鼠标然后移动,如果移动的位移太小,矩形是不会被移动的,直到达到一定位移阈值后,矩形才会乖乖听话跟随鼠标进行移动

阈值表示位移距离,使用的是视口坐标系,而不是场景坐标系。

代码改造

原来的逻辑:

let isPressing = false;let currentTool = null; // 当前工具对象// 鼠标按下function handleDown(e) {  isPressing = true;  currentTool.start(e);}// 鼠标移动function handleMove(e) {  if (isPressing) {    currentTool.drag(e);  } else {    // 非拖拽的移动事件    // 比如选择工具停留在图形上,图形要高亮,此时没发生拖拽    currentTool.move(e);  }}// 鼠标释放function handleUp(e) {  currentTool.end(e);  isPressing = false;}

鼠标按下时,isPressing 设置为 true,表示发生了鼠标按下事件。

此时鼠标再移动,我们就能知道这是一个 “拖拽” 的行为,即按下鼠标不放然后移动鼠标的行为。此时调用工具对象的 drag 方法。

最后鼠标释放,将状态 isPressing 重置。

现在我们进行改造。

let isPressing = false;let currentTool = null; // 当前工具对象let isEnableDragging = false; // 是否调用工具对象的 drag 方法let startPos = null; // 保存鼠标按下时的坐标const blockStep = 4; // 阈值function handleDown(e) {  isPressing = true;  isEnableDragging = false;  startPos = { x: e.clientX, y: e.clientY };  currentTool.start(e);}function handleMove(e) {  // 判断位移是否突破阈值,是的话更新状态为 “可拖拽”  if (    !isEnableDragging &&    (Math.abs(e.clientX - startPos.x) > blockStep ||      Math.abs(e.clientX - startPos.x) > blockStep)  ) {    isEnableDragging = true;  }  if (isPressing) {    if (isEnableDragging) {      // “可拖拽” 状态,调用工具的 drag 方法      currentTool.drag(e);    }  } else {    currentTool.move(e);  }}function handleUp(e) {  currentTool.end(e);  // 初始化状态  isPressing = false;  isEnableDragging = false;  startPos = null;}

核心思路是引入 isEnableDragging 状态,表示鼠标移动时,是否达到移动的条件。

我们在鼠标移动事件中,计算鼠标按下和鼠标移动之间的距离是否超过某个值,如果超过阈值,就将 isEnableDragging 状态转换为 true。

然后判断 isEnableDragging 为 true,就调用工具对象的 drag 方法。

需要注意的是,不要只用位移距离来判断是否可以拖拽,要配合状态。否则突破阈值后,又移动回来,你会发现你又卡住了,因为此时阈值因为再次计算,没能达到阈值。

所以加了个 isEnableDragging 状态,在第一次突破阈值设置为 true 后,就再也不用计算位移了,之后一直都是可拖拽状态,直到鼠标释放重置状态。

到此,相信大家对“图形编辑器中JS怎么实现拖拽阻塞”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 图形编辑器中JS怎么实现拖拽阻塞

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

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

猜你喜欢
  • 图形编辑器中JS怎么实现拖拽阻塞
    本篇内容主要讲解“图形编辑器中JS怎么实现拖拽阻塞”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“图形编辑器中JS怎么实现拖拽阻塞”吧!图形编辑器中在图形编辑器中,想象这么一个场景,我们撤销了一些...
    99+
    2023-07-05
  • 图形编辑器中JS实现防误操作之拖拽阻塞
    目录图形编辑器中代码改造结尾图形编辑器中 在图形编辑器中,想象这么一个场景,我们撤销了一些重要的操作,然后想选中一个图形,看看它的属性。你点了上去,然后你发现你再也无法重做了。 你...
    99+
    2023-03-06
    JS 拖拽阻塞 JS 防误操作 JS图形编辑器
  • 怎么在java中实现阻塞和非阻塞
    这篇文章给大家介绍怎么在java中实现阻塞和非阻塞,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。1.概...
    99+
    2023-06-14
  • JS图形编辑器实现标尺功能示例详解
    目录正文实现思路步长选择计算范围绘制顺序正文 项目地址: github.com/F-star/suik… 线上体验: blog.fstars.wang/app/sui...
    99+
    2023-01-16
    JS图形编辑器实现标尺 JS图形编辑器
  • vue怎么实现图片拖拽功能
    本篇内容介绍了“vue怎么实现图片拖拽功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主要涉及到的元素知识,示意图:js代码部分:dire...
    99+
    2023-06-25
  • 怎么重写document.write实现无阻塞加载JS广告
    本篇内容主要讲解“怎么重写document.write实现无阻塞加载JS广告”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么重写document.write实...
    99+
    2024-04-02
  • 怎么使用js实现模拟鼠标拖拽事件
    本篇内容介绍了“怎么使用js实现模拟鼠标拖拽事件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这次的效果图...
    99+
    2024-04-02
  • ADO.NET怎么通过拖拽形式实现数据库连接
    本篇内容主要讲解“ADO.NET怎么通过拖拽形式实现数据库连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET怎么通过拖拽形式实现数据库连接”吧!ADO.NET程序设计实验步骤(1)...
    99+
    2023-06-17
  • Pixi.js如何实现可视化图形编辑器
    这篇文章主要介绍了Pixi.js如何实现可视化图形编辑器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Pixi.js如何实现可视化图形编辑器文章都会有所收获,下面我们一起来看看吧。要用Pixi.js实现一个可视...
    99+
    2023-07-05
  • canvas怎么实现多张图片编辑的图片编辑器
    这篇文章将为大家详细讲解有关canvas怎么实现多张图片编辑的图片编辑器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片编辑器产品需求先说需求,由于涉及到实际公司的项目开发,满足需求的图片编辑器可能只是...
    99+
    2023-06-09
  • 怎么在HTML5中利用拖拽功能实现拼图游戏
    本篇文章为大家展示了怎么在HTML5中利用拖拽功能实现拼图游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<!--代码如下,最下面给出了我测试用的9张250*250的图片切片-->&l...
    99+
    2023-06-09
  • Pixi.js实现可视化图形编辑器的方法
    要用Pixi.js实现一个可视化编辑器,需要先了解Pixi.js的基本概念和操作。Pixi.js是一个用于创建2D图形的JavaScript库,它可以高效地利用WebGL进行渲染。接...
    99+
    2023-03-19
    Pixi.js 可视化图形编辑器 Pixi.js 图形编辑器
  • 微信小程序怎么实现图片拖拽排序
    这篇文章主要介绍“微信小程序怎么实现图片拖拽排序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现图片拖拽排序”文章能帮助大家解决问题。首先来看效果对于组件内部来说。笔者提供了一个参数...
    99+
    2023-06-29
  • 怎么使用vue+gojs实现拖拽流程图效果
    这篇文章主要介绍“怎么使用vue+gojs实现拖拽流程图效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用vue+gojs实现拖拽流程图效果”文章能帮助大家解决问题。一、流程图效果二、为什么...
    99+
    2023-07-05
  • vue中的可拖拽宽度div怎么实现
    这篇文章主要介绍“vue中的可拖拽宽度div怎么实现”,在日常操作中,相信很多人在vue中的可拖拽宽度div怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中的可拖拽宽度div怎么实现”的疑惑有所...
    99+
    2023-06-29
  • 怎么在HTML5中实现拖拽上传文件
    怎么在HTML5中实现拖拽上传文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。拖拽批量上传文件夹该组件基于 Vue.js 实现,UI 框架是 elementUI,完整的 ...
    99+
    2023-06-09
  • 怎么使用element+vuedraggable实现图片上传拖拽排序
    这篇文章主要介绍了怎么使用element+vuedraggable实现图片上传拖拽排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用element+vuedraggable实现图片上传拖拽排序文章都会有...
    99+
    2023-06-29
  • Java中怎么利用阻塞队列实现搜索
    这期内容当中小编将会给大家带来有关Java中怎么利用阻塞队列实现搜索,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。队列以一种先进先出的方式管理数据。如果你试图向一个已经满了的阻塞队列中添加一个元素,或是从...
    99+
    2023-06-17
  • Android中怎么实现条目拖拽删除功能
    本篇文章给大家分享的是有关Android中怎么实现条目拖拽删除功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。第一步效果图0自定义控件 SwipeLayout 继承Frame...
    99+
    2023-05-30
    android
  • 纯 JS 实现的轻量化图片编辑器实例详解
    目录介绍一款纯 JS 实现的轻量化图片编辑器Optimizer 框架特点Optimizer 框架使用启动场景管理器 (Scene)页面事件Event鼠标事件键盘事件注册组件 ...
    99+
    2022-11-13
    纯JS轻量化图片编辑器 JS 图片编辑器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作