首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

追求完美代码之——实现元素拖拽修改宽高和位移插件

代码复用:多处涉及到拖拽,拖拽需要抽取出来做公共方法 实现一个拖拽 ❌ 错误示范 给元素加上mousedown(按下的时候)事件,此时开始绑定mousemove;当鼠标弹起,移除mousemove...也就是鼠标在元素上按下的时候,每次move都移动元素,鼠标弹起的时候,清除事件绑定 mousemove事件触发的时候,计算本次位置和上次位置x、y坐标(即left、top)差值,并加上left、top位置...✅ 正确的做法 给顶部节点(如document)加上事件绑定,然后通过事件代理来实现拖拽元素准确定位: const ele = document.querySelector("div");...,那也很自然要有删除事件监听的方法。...(移动端可以多手指触屏,我们这里按照第一个手指行为来做) 自己给原型对象挂一个新的事件绑定。

2.4K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《Flutter》-- 7.事件处理

    事件处理 7.1 原始指针事件 7.1.1 基本概念 一个完整的原始指针事件主要由手指按下、手指移动、手指抬起以及触摸取消构成,更高基本的手势都基于这些原始事件。...在Flutter的原始指针事件模型中,在手指接触屏幕发起触摸事件时,Flutter会首先确定手指与屏幕发生接触的位置上究竟有哪些组件,然后通过命中测试(Hit Test)交给最内层的组件去响应。...PointerDownEvent、PointerMoveEvent和PointerUpEvent是Flutter的原始指针事件的基本组成部分,分别对应手指按下、移动和抬起事件,它们都是PointerEvent...对于组件层面的原始指针事件的监听,Flutter提供了一个Listener,可以用它监听包裹的子组件的原始指针事件。...在处理拖拽事件时,GestureDetector会将需要监听组件的原点作为本次手势的起点,当用户在监听组件上按下手指时手势识别就开始运行。

    1.9K30

    UIGestureRecognizer  手势识别一、概念介绍二、UIView 的分类三、UIGestureRecognizer 抽象类四、UIGestureRecognizerDelegate 代理

    只有在识别失败之后才会将触摸事件发给触摸到的控件,这种情况下控件view的响应会延迟约0.15ms。...)addTarget:(id)target action:(SEL)action; 3、移除一个手势的监听事件 - (void)removeTarget:(nullable id)target action...0的位置.recognizer.rotation = 0; } 九、UIPanGestureRecognizer(拖拽手势) 1、设置触发拖拽最少手指数,默认为1 @property (nonatomic...alloc] initWithTarget:self action:@selector(panAction:)]; [self.imgView addGestureRecognizer:pan]; // 拖拽手势的监听方法...获取手指拖拽的时候, 平移的值 CGPoint translation = [recognizer translationInView:recognizer.view]; // 2.

    3.1K81

    HTML5中的拖放功能

    image 前言 如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,接收好挑战了吗?文章公众号首发,关注 程序员哆啦A梦 第一时间获取最新的文章 笔芯❤️~ ?...光标拖放事件 在html5中提供了7个与拖放相关的光标事件: 按照时间的顺序: 第一,开始拖拽时触发的事件,事件的作用对象是被拖拽的元素-dragstart事件 第二,拖放过程中触发的事件,事件的作用对象是被拖拽的元素...-drag事件 第三,在拖放的元素进入本元素的范围内时触发,事件的作用对象是拖放过程中光标经过的元素-dragenter元素 第四,在拖放的元素正在本元素的范围内移动时触发,事件的作用对象是拖放过程中光标经过的元素...-drop元素 第七,在拖放操作结束时触发,事件的作用对象是被拖拽的元素-dragend事件 DataTransfer对象 在html5中提供了DataTransfer对象,用来支持拖拽数据的存储。...实现拖放的过程中数据交换。 DataTransfer对象: 属性 第一,dropEffect属性:用来设置或获取拖拽操作的类型 和 要显示的光标类型。

    2.6K10

    史上最详细仿QQ消息拖拽粘性效果

    开始之前我建议大家打开QQ先去熟悉一下这个拖拽效果,然后根据自己掌握的知识梳理一下自己去实现的思路,包括中间粘性效果的实现。 先看看本篇文章能实现的最终效果 ?...,半径也是根据某一比例系数扩大或缩小,当超过临界点的时候起始圆消失,只剩手指所在位置的圆,然后手指松开圆消失。...3 处理onTouchEvent事件 3.1 处理ACTION_DOWN事件 手指按下的时候我们要判断手指所在位置是不是在起点圆上,只有按到起点圆上之后拖拽才有效,还记得我们文章开始的时候定义的变量mIsCanDrag...3.2 处理ACTION_MOVE事件 手指按在起点圆是可move的前提,然后根据手指滑动取出移动点位置的坐标,这就是可拖拽的终点圆的坐标。 ?...3.3 处理ACTION_UP事件 手指抬起的时候我们要判断抬起的时候终点圆所在位置和起点圆的圆心距是否超过设置最大距离,如果没有超过就还原拖拽状态,只保留一个起点圆,如果超过了最大距离就让圆消失。

    81520

    悬浮窗开发设计实践

    注意配置参数的时候需要注意type第二个是添加xml或者自定义view到windowManager上第三个是处理拖拽更改view位置的监听逻辑,分别在down,move,up三个事件处理业务第四个是吸附左边或者右边...4.6 悬浮窗拖拽实现如何实现悬浮窗可随手指拖动?...思路非常简单,监听悬浮窗那个onTouchListener即可,在刚点击的ACTION_DOWN(手指按下)事件中记录当前的x,y位置,然后在每次移动(ACTION_MOVE事件)后获取到本次移动的位置...如何实现悬浮窗左右边的吸顶效果?监听到手指抬起(UP事件)的动作后,判断当前位置是靠近左边还是右边,靠近左边就以位置动画的方式平移到左边,靠近右边就平移到右边。...这个地方需要注意两点第一点:为何要监听ACTION_CANCEL事件,是因为手指拖动,快速拖动到窗口外,这个时候没有手指抬起操作,那么监听事件结束主要是增强边界逻辑。第二点:怎么判断滑动?

    2.5K40

    这里有一份史上最详细仿QQ未读消息拖拽粘性效果的实现,快来收藏!

    开始之前我建议大家打开QQ先去熟悉一下这个拖拽效果,然后根据自己掌握的知识梳理一下自己去实现的思路,包括中间粘性效果的实现。 按照惯例,先看看本篇文章能实现的最终效果 ?...,半径也是根据某一比例系数扩大或缩小,当超过临界点的时候起始圆消失,只剩手指所在位置的圆,然后手指松开圆消失。...3、处理onTouchEvent事件 3.1、处理ACTION_DOWN事件 手指按下的时候我们要判断手指所在位置是不是在起点圆上,只有按到起点圆上之后拖拽才有效,还记得我们文章开始的时候定义的变量mIsCanDrag...我们发现手指松开的时候圆并没有消失或者重置,因为我们还没出来up事件。...3.3、处理ACTION_UP事件 手指抬起的时候我们要判断抬起的时候终点圆所在位置和起点圆的圆心距是否超过设置最大距离,如果没有超过就还原拖拽状态,只保留一个起点圆,如果超过了最大距离就让圆消失

    65710

    史上最详细仿QQ未读消息拖拽粘性效果的实现

    开始之前我建议大家打开QQ先去熟悉一下这个拖拽效果,然后根据自己掌握的知识梳理一下自己去实现的思路,包括中间粘性效果的实现。 按照惯例,先看看本篇文章能实现的最终效果 ?...,半径也是根据某一比例系数扩大或缩小,当超过临界点的时候起始圆消失,只剩手指所在位置的圆,然后手指松开圆消失。...3、处理onTouchEvent事件 3.1、处理ACTION_DOWN事件 手指按下的时候我们要判断手指所在位置是不是在起点圆上,只有按到起点圆上之后拖拽才有效,还记得我们文章开始的时候定义的变量mIsCanDrag...move事件处理的效果 我们发现手指松开的时候圆并没有消失或者重置,因为我们还没出来up事件。...3.3、处理ACTION_UP事件 手指抬起的时候我们要判断抬起的时候终点圆所在位置和起点圆的圆心距是否超过设置最大距离,如果没有超过就还原拖拽状态,只保留一个起点圆,如果超过了最大距离就让圆消失

    83520

    《大胖 • 小课》- 拖拽和剪贴板文件上传

    《大胖 • 小课》- 不用 js 实现文件无刷新上传 《大胖 • 小课》- 玩玩多文件配多进度上传 拖拽上传 html5的出现,让拖拽上传交互成为可能,现在这样的体验也屡见不鲜,实现上也比较简单...主要是先定义好一个拖拽区域,从该拖拽区域的事件回调内得到文件的相关信息,前提是需要取消一些事件的默认行为,因为浏览器本身会自动打开或下载文件。 DEMO ?...说明 定义一个允许拖放文件的区域div.drop-box 取消drop 事件的默认行为e.preventDefault();,不然浏览器会直接打开文件 为拖拽区域绑定事件,鼠标在拖拽区域上 dragover..., 鼠标离开拖拽区域dragleave, 在拖拽区域上释放文件drop drop事件内获得文件信息e.dataTransfer.files HTML 节点 function insertNodeToEditor(editor,ele) { //插入dom 节点 var range;//记录光标位置对象

    94810

    基于 HTML5 OpenLayers3 实现 GIS 电信资源管理系统

    该方法将停止事件的传播,阻止它被分派到其他 Document 节点 } } /** pointerdown 当指针变为活动事件 * 对于鼠标,当设备从按下的按钮转换到至少一个按钮被按下时...insertBefore 在指定的已有子节点(参数二)之前插入新的子节点(参数一) 并对数据容器增删变化事件进行监听,通过监听当前加入数据容器的节点类型,将当前节点的像素坐标转为地图视图投影中的坐标存储在节点的业务属性..._sourceNode = this.getNodeAt(e);// 获取事件下的节点 if (this._sourceNode) { this...._graphView.getDataAt(e);// 获取事件下的节点 if(data instanceof ht.Node) return data;// 为 ht.Node 类型的节点...中的值,label优先级高于name node.p(graphView.lp(e));// 将节点的位置设置为graphView事件下的拓扑图中的逻辑坐标,即设置鼠标点下的位置为节点坐标

    3.8K61

    Cocos Creator基础教程(11)—可拖拽组件

    在Cocos Creator中实现一个可拖动组件,只需对目标节点拖拽配置就能让节点任意移动,这对策划、美术人员来说是不是很有杀伤力! 1....} }); 代码主要是设置节点的触摸监听,在监听事件中修改节点的位置。..._oldPosition; } }); 代码变复杂了,简单说明一下: 是增加了一个target节点属性,他是节点要移动到的目标 增加TOUCH_END事件,当手指抬起时,检查当前节点是否在目标节点之中...小结 这次主要运用了节点的触摸事件监听,在触摸事件的touchEvent参数中获取当前触摸坐标点。...同时还需要对坐标点在不同节点坐标系下进行转换,需要理解的是拖动节点的本质是:修改节点在父节点上的位置,需要使用this.node.parent.convertToNodeSpaceAR进行转换。

    4.9K31

    Android自定义ViewGroup神器-ViewDragHelper

    三、更多用法 ViewDragHelper不仅仅能够让子View跟随我们的手指移动,还能实现以下功能: 边界触摸检测 Drag释放回调 移动到某个指定位置 我么改造下上面的例子,效果图如下: 第一个View...我们尝试将TextView设置成clickable=true,你会发现原本可以被拖拽的View都不动了。我们思考下,这是为什么呢?...默认情况下,事件会被子View消耗掉,这显然是有问题的,因为这样ViewGroup的onTouch方法就不会被调用,而onTouch方法中正是我们的关键方法:dragHelper.processTouchEvent...这里我们需要解释下: 打个比方,如果你的ViewGroup中有另外一个Button(或者任何可点击的View),但是它不在ViewDragHelper的处理范围内,你可能需要监听它的onClick事件,...方法返回的值,这两个方法默认情况下都返回0。

    1.3K50

    html5简单拖拽实现自动左右贴边+幸运大转盘

    此篇文章主要实现两个功能: 1、点击屏幕下方签到悬浮按钮; 2、弹出幸运大转盘,转盘抽奖签到 效果如图: ​ 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是没找到点击按钮可以向两边贴边的拖拽...Touchend:手指从屏幕上抬起的时候触发 在PC触发为以下三个事件: 1.mouseup 2.mousemove(一次) 3.mousedown 这些个事件都会顺着DOM树向上冒泡,并产生一个触摸事件对象...,targetTouches是当前DOM上的手指列表,所以当手指移开触发touchend事件时,event.originalEvent是没有这个targetTouches列表的,而changedTouches...列表是涉及当前事件的列表,例如touchend事件中,手指移开。...touchend事件中应该是只有个changedTouches触摸实例列表的。 参考链接:原生js完美拖拽,每次刷新可以记住上次拖拽的位置

    4.3K50

    Android 使用代码实现一个选词(拖拽)填空题

    写在前面 在上一篇文章《Android 使用代码实现一个填空题》中,我们学习了如何实现一个填空题,今天继续接着上一篇文章的节奏,学习一下如何实现一个选词填空题,由于本文中用到了一些上篇文章中的知识点,还没有看过上篇文章的同学可以...学习一些基础知识 选词填空题有一个很重要的功能就是拖拽,我们先来学习一下如何对View进行拖拽操作,写个简单的Demo来学习下: public class DragActivity extends BaseActivity...View的“影子”,View可以移动了,还需要为它设置一个目标区域,调用目标区域View的setOnDragListener方法设置拖拽事件的监听,实现onDrag方法,在ACTION_DRAG_STARTED...,我们为每个Button都设置了一个长按监听事件,下面来看看它是如何工作的,首先获取到当前拖拽选项上的答案,作为参数进行传递,然后记录选项的位置,这个是为了当拖拽未完成时,重新显示选项用的,最后在列表中隐藏当前拖拽的选项...现在选项已经可以移动了,还记得在设置数据的时候我们为填空题区域设置了拖拽监听,看下它是如何进行响应的: @Override public boolean onDrag(View v, DragEvent

    74820

    【富文本】268- 富文本原理了解一下?

    如果想要插入的子节点不可编辑,我们只需要把子节点的属性设置为 contenteditable="false" 即可,就像这样: 这是可编辑的...button 标签,然后执行命令就会无效,是因为点击其他标签大多都会造成先失去焦点(或者不知不觉就突然失去焦点了),再执行点击事件,此时没有选区或光标所以会没有效果,这点要留意一下。...,首先我们要知道的是图片已经在编辑区了,所以当用户点击编辑区里面的图片时我们需要做些事件监听并有所处理,具体思路如下(这部分代码较多,不想看的可以略过,但标题要看): 1....在四个顶点框上添加拖拽事件 这里我们会在四个顶点监听 mousedown 事件,按下鼠标时,首先会改变鼠标样式(就是鼠标会变成调整大小的那种图标),然后监听 mousemove 和 mouseup 事件...} // 同时修改蒙层大小 this.repositionOverlay(); }, handleMouseup() { this.setCursor(''); // 拖拽结束移除事件监听

    2K40

    C#实现树型结构TreeView节点拖拽的简单功能(转)

    http://www.cnblogs.com/jirigala  例子程序运行效果如何下   当然在节点拖拽时,需要注意几个事情:    1:拖拽时总需要有提示信息比较好,防止误操作后找不到被托摘到哪里去了...2:父亲节点总不能拖拽到自己的子节点上,那不是死循环或者乱了辈份了不是?   为了让TreeView支持拖拽功能,需要注意以下几个属性设置及相应的事件代码。  ...                TreeNode targetTreeNode;                 // 获取当前光标所处的坐标                 // 定义一个位置点的变量...,保存当前光标所处的坐标点                 Point point = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));                 ...// 判断拖动的节点与目标节点是否是同一个,同一个不予处理                 if (BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode

    3.2K10

    【Web技术】421- 富文本原理介绍

    如果想要插入的子节点不可编辑,我们只需要把子节点的属性设置为 contenteditable="false" 即可,就像这样: 这是可编辑的...有的同学可能用的不是 button 标签,然后执行命令就会无效,是因为点击其他标签大多都会造成先失去焦点(或者不知不觉就突然失去焦点了),再执行点击事件,此时没有选区或光标所以会没有效果,这点要留意一下...,首先我们要知道的是图片已经在编辑区了,所以当用户点击编辑区里面的图片时我们需要做些事件监听并有所处理,具体思路如下(这部分代码较多,不想看的可以略过,但标题要看): 1....在四个顶点框上添加拖拽事件 这里我们会在四个顶点监听 mousedown 事件,按下鼠标时,首先会改变鼠标样式(就是鼠标会变成调整大小的那种图标),然后监听 mousemove 和 mouseup 事件...); } // 同时修改蒙层大小 this.repositionOverlay();},handleMouseup() { this.setCursor(''); // 拖拽结束移除事件监听

    1.1K20
    领券