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

为什么在移动传送上通过触摸将对象拖动到触摸位置,而不是通过上次触摸和当前触摸之间的偏移量移动?

在移动传送上通过触摸将对象拖动到触摸位置,而不是通过上次触摸和当前触摸之间的偏移量移动,是因为触摸位置的变化更直观和自然。

通过触摸将对象拖动到触摸位置可以提供更直接的交互体验。当用户触摸并拖动对象时,他们可以直接看到对象随着手指的移动而实时改变位置,这种实时反馈可以更好地满足用户的操作预期。

相比之下,通过上次触摸和当前触摸之间的偏移量移动对象可能会导致不连贯的移动效果。用户需要根据上次触摸的位置和当前触摸的位置计算出偏移量,并将对象相应地移动。这种方式可能会引入计算误差,导致对象的移动不够平滑和准确。

此外,通过触摸将对象拖动到触摸位置还可以提供更多的交互可能性。用户可以在拖动过程中随时停止、放置或释放对象,从而实现更复杂的操作。而通过偏移量移动对象则相对简单,只能实现基本的移动功能。

总之,通过触摸将对象拖动到触摸位置可以提供更直观、自然和灵活的交互方式,更好地满足用户的操作需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android Scroll分析

改变其当前所处的位置,它的原理和动画效果的实现非常相似,都是通过不断的改变View的坐标来实现这一个效果。...在触摸事件中,通过getX()和getY()所获得的坐标就是视图坐标系中的坐标。 ---- 触控事件-MotionEvent 触控事件MotionEvent在用户交互中,占据着举足轻重的位置。...---- 实现滑动的七种方法 不管使用何种方法,其实现的基本思路是一致的:当触摸View时,系统记下当前触摸点坐标,当手指移动时,系统记下移动后的触摸点坐标,从而获取到相对于前一次坐标点的偏移量,并通过偏移量来修改...总体来讲,scrollTo scrollBy方法,子View的移动都是瞬间的,在事件执行的时候平移已经完成了,而Scroller类可以实现平滑移动的效果,而不是在瞬间完成的移动。...演示: 子View随着手指的滑动而滑动,在手指离开屏幕时,让子View平滑的移动到初始位置,即屏幕的左上角。

81520

自定义无限循环ViewPager(二)――ViewPager滑动原理解析

而ViewPager根据手势产生页面移动也正是因为重写了这两个方法。ViewPager存在两种移动方式: 在MOVE触摸事件中,页面随手指的拖动而移动。...在UP事件后,页面滑动到指定页面(通过Scroller实现的)。 现在,我们先来看下onInterceptTouchEvent()方法。...position,在adapter数据中的位置 final int currentPage = ii.position; //得到当前页面的偏移量 final...如果是onTouchEvent()的Up事件滑动到目标页面则是第一种,而初始化完成之后通过调用setCurrentItem(int item)滑动到目标页面则是第二种。...对拖拽进行处理,通过scrollTo()方法完成页面的移动,期间通过pageScrolled()完成相关事情的处理,如DecorView显示、接口方法回调、动画接口回调等; 而另外一种移动方式在onTouchEvent

2.4K10
  • Android Heroes Reading Notes 2

    通常情况下,Canvas对象的创建需要传入参数Bitmap,为什么呢?...这是因为传进去的Bitmap与通过这个Bitmap创建的Canvas画布是紧紧联系在一起的,这个Bitmap用来存储所有绘制在Canvas上的像素信息,当使用Bitmap创建Canvas之后,后面调用所有的...adapter的notifyDataSetChanged方法时,必须保证传进adapter的数据list和发生数据变化的list是同一个对象,否则将无法看到效果。...2.实现滑动的基本思想 当触摸view时,系统记下当前触摸点坐标;当手指移动时,系统记下移动后的触摸点坐标,从而获取到相对于前一次坐标点的偏移量,并通过偏移量来修改view的坐标,这样不断重复,从而实现滑动过程...方法会返回false,从而中断循环; 3.调用Scroller.startScroll方法,将起始位置、偏移量以及移动时间(可选)作为参数传递给startScroll方法。

    58910

    神奇的 ViewDragHelper,让你轻松定制拥有拖拽能力的 ViewGroup

    交互分析 手指触摸在 ViewGroup 上。 如果触摸的坐标正好落在某个 childView 上面。拖拽开始。 手指开始移动,childView 位置坐标改变。拖拽进行。...我们需要判断当前触摸的地方是否落在 childview 的显示区域,如果是则标记拖拽状态开始,我们需要记录手指的触摸位置为原始坐标。 2....MotionEvent.ACTION_MOVE: 这个状态自然代表手指的移动过程,这个时候我们仍然需要记录手指触摸新的坐标,然后如果是在触摸开始的状态,则将 childview 进行位置偏移,偏移量就是新坐标与原始坐标的偏差...,left 指 child 要移动到的坐标,dx 相对上次的偏移量 int clampViewPositionHorizontal(View child, int left, int dx) // 修整...child 垂直方向上的坐标,top 指 child 要移动到的坐标,dy 相对上次的偏移量 int clampViewPositionVertical(View child, int top, int

    3.5K33

    史上最详细的iOS之事件的传递和响应机制-原理篇

    我们只能通过子类继承父类,重写子类方法的方式处理UIView的触摸事件(注意:我说的是UIView触摸事件而不是说的 UIViewController的触摸事件)。...的触摸事件,而不是处理 UIViewController的触摸事件。...也就是让UIView随着手指的移动而移动。   ...参数中只包含一个UITouch对象 2.1.1.1.UITouch的作用 保存着跟手指相关的信息,比如触摸的位置、时间、阶段 当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置...)iOS中的事件的产生和传递 3.1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中,为什么是队列而不是栈?

    11.4K70

    移动端touch拖动事件和click事件冲突问题解决

    ) touchcancel终止触摸事件 多点触控 TouchEvent.targetTouches 只读 一个 TouchList 对象,是包含了如下触点的 Touch 对象:触摸起始于当前事件的目标...只读 一个 TouchList 对象,包含了所有当前接触触摸平面的触点的 Touch 对象,无论它们的起始于哪个 element 上,也无论它们状态是否发生了变化。...实现 通过设置悬浮球定位样式,拖动的时候计算坐标,然后动态的修改悬浮球的定位偏移量,结合transtion过渡效果,实现平滑的过渡 代码比较简单,就不贴了。...分析 在不了解触摸事件响应机制的时候,你可能会从计算触摸目标元素的时长或者计算触摸起始位置来判定点击行为,但是这两种方式都不是最佳的,原因有以下几点: 计算触摸时长比较麻烦 判断移动距离不严谨,...有可能拖动了一圈又回到初始位置 结合计算触摸时长和触摸元素起始位置两种方式,逻辑比较复杂 下面看我是怎么做的: 首先应该了解触摸行为的事件响应机制: 如果有拖动行为,事件执行次序为:touchstart

    2.3K20

    原生 JS 手写一个优雅的图片预览功能,带你吃透背后原理

    例如鼠标移动事件对应 mousemove,移动端因为没有鼠标则对应 touchmove,而本文将介绍如何仅通过指针事件来进行多端统一的事件监听。...在监听事件中我们可以通过 event 对象获取各种属性,例如常用的 offsetX、offsetY 相对偏移量,clientX、clientY 距离窗口的横坐标和纵坐标等。...:图片接下来我们需要实现焦点放大的效果,简单来说就是计算两点之间的位移距离作为 translate 偏移量,将图片偏移到屏幕中心点位置,然后缩放一定的比例来达到查看效果,通过 transition 实现过渡动画...移动图片的实现是比较简单的,在每次指针按下时我们记录 clientX、clientY 为初始值,移动时计算当前的值与初始点位的差值加到 translate 偏移量中即可。...这么说有点抽象,我们还是回到代码中,在双指缩放时将这个偏移量减掉,同样的在PC端的缩放中,我们也加入对偏移量的修正:let scaleOrigin = { x: 0, y: 0, }// 获取中心改变的偏差

    3.5K81

    解析6种常用View 的滑动方法

    其实不管是哪种滑动方式,其基本思想都是类似的:当点击事件传到View 时,系统记下触摸点的坐标,手指移动时系统记下移动后触摸的坐标并算出偏移量,并通过偏移量来修改View 的坐标。...如果对一个Button 进行如上的平移动画操作,当Button 平移300 像素停留在当前位置时,我们点击这个Button 并不会触发点击事件,但在我们点击这个Button 的原始位置时却触发了点击事件...,而scrollBy(dx,dy)则表示移动的增量为dx、dy。...图3 调用scrollBy(50,50)后 虽然我们设置的数值是正数并且在X 轴和Y 轴的正方向移动,但Button 却向相反方向移动了,这是参考对象不同导致的差异。...这里我们可以使用Scroller 来实现有过渡效果的滑动,这个过程不是瞬间完成的,而是在一定的时间间隔内完成的。

    1.2K30

    第134天:移动web开发的一些总结(二)

    两种设计之间没有任何平滑渐变。只使用媒体查询,布局有时会变得不可控制。 当然,这只是建议,也有一些页面采用固定布局的情况下能够很好的在一些没有考虑过媒体查询情况下的设备上很好的展示。...自定义tao事件原理: 在touchstart、touchend的记录时间、手指位置,在touchend时进行比较,如果手指位置为同一位置(或允许移动一个非常小的位移值)且时间间隔较短(一般认为是200ms...(不常用)eg:滑动页面时来了一个电话或者其他系统事件 除常见的事件属性外,触摸事件包含专有的触摸属性: touches:跟踪触摸操作的touch对象数组 targetTouches:特定事件目标的touch...对象数组 changeTouches:上次触摸改变的touch对象数组 一个小BUG: android只会触发一次touchstart,一次touchmove,touchend不触发。...(3) 弹性滚动,下拉刷新 ①弹性滚动:当客户端的页面滚动到顶部或底部的时候,滚动条会收缩并让我们多滑动一定距离。通过缓冲反弹的效果,带给用户良好的体验。

    1.8K10

    iOS Programming – 触摸事件处理(2)

    首先触摸的对象是视图,而视图的类UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义的事件处理函数。...对于这4个方法,都有两个相同的参数:NSSet类型的touches和UIEvent类型的event。其中touches表示触摸产生的所有UITouch对象,而event表示特定的事件。...下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。...[touch locationInView:self.view]获取手指触摸在当前视图上的位置,用CGPoint变量记录,然后在手指移动事件touchesMoved方法中获取触摸对象当前位置,并通过于与原始位置的差值计算出移动偏移量...,再设置当前视图的位置。

    93870

    vue.js项目中用原生js实现移动端的轮播图

    Vue.js项目中封装轮播图组件 前言 一、了解原生js移动端的事件 二、轮播图实战 三、效果图 结束语 前言 今天我在vue.js项目实战开发过程中遇到了实现轮播图效果的问题,因为不想因为一个轮播图而引用整个...changedTouches 涉及当前事件的手指列表(本实例中尽量用这个) 触摸列表中每个触摸对象(即每个手指)都对应着一些触摸时生成的信息(只写了部分) 触摸信息 含义 clientX / clientY...[0].pageX 获得我们触发( event )触摸事件那个手指( changedTouches[0] )当前位置相对于页面的位置( pageX ) 二、轮播图实战 我们做的轮播图功能中只用到前三种触发事件...data属性中,初始化了几个变量:StartPoint(触摸开始点横坐标)、EndPoint(触摸结束时横坐标)、MoveLength(移动的长度(有正负))、CurrentImg(当前轮播图索引) 在页面挂在完成后..., 触发methods中的startPlay方法,开启轮播功能 在触摸事件中主要运用 StartPoint - EndPoint 的值使得图片跟着手指的滑动方向同步移动, 并且在触摸开始时,关闭自动轮播定时器

    9.1K20

    touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event使用

    首先触摸的对象是视图,而视图的类UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义的事件处理函数。...对于这4个方法,都有两个相同的参数:NSSet类型的touches和UIEvent类型的event。其中touches表示触摸产生的所有UITouch对象,而event表示特定的事件。...下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。...[touch locationInView : self . view ] 获取手指触摸在当前视图上的位置,用CGPoint变量记录,然后在手指移动事件touchesMoved方法中获取触摸对象当前位置...,并通过于与原始位置的差值计算出移动偏移量,再设置当前视图的位置。

    57420

    进入移动Web世界

    简而言之,就是通过touch,监听touchstart和tarchend,如果两者间隔较短,例如100ms甚至更短,且起始位置的偏移量极小,控制在几个像素之内,那么就判定为点击事件。...2. touch相关 触摸是移动设备交互的核心事件 a....事件属性 touches:跟踪触摸操作的touch对象数组 targetTouches:特定事件目标的touch对象数组 changeTouches:上次触摸改变的touch对象数组 c....每个touch对象包含属性 clientX:触摸目标在视口中的横坐标 clientY:触摸目标在视口中的纵坐标 identifier:标识触摸的唯一id pageX:触摸目标在页面中的横坐标(含滚动)...pageY:触摸目标在页面中的纵坐标(含滚动) screenX:触摸目标在屏幕中的横坐标 screenY:触摸目标在屏幕中的纵坐标 target:触摸的DOM节点的目标 d.

    1K20

    前端成神之路-WebAPIs06

    核心算法: (目标值 - 现在的位置) / 10 做为每次移动的距离步长 停止的条件是: 让当前盒子位置等于目标位置就停止定时器 注意步长值需要取整 1.1.2 动画函数多个目标值之间移动 可以让动画函数从...将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调。 回调函数写的位置:定时器结束的位置。...比如触屏事件 touch(也称触摸事件),Android和 IOS 都有。 touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。...这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等 touchstart、touchmove、touchend 三个事件都会各自有事件对象。...然后用盒子原来的位置 + 手指移动的距离 手指移动的距离: 手指滑动中的位置 减去 手指刚开始触摸的位置 拖动元素三步曲: (1) 触摸元素 touchstart: 获取手指初始坐标,同时获得盒子原来的位置

    1.3K40

    View的滑动方式 详细介绍

    = 触摸点滑动到的坐标 - 开始触摸的坐标 (都是相对于view本身) int offsetX = x - mLastX; int offsetY...= 触摸点滑动到的坐标 - 开始触摸的坐标 (都是相对于view本身) int offsetX = x - mLastX; int offsetY...代码使用方法: case MotionEvent.ACTION_MOVE: //滑动的距离 = 触摸点滑动到的坐标 - 开始触摸的坐标 (都是相对于...负值表示 view左边缘在view内容的左侧。 mScrollY:VIew上边缘和 view的内容(即view的子view)上边缘的距离。负值表示 view上边缘在view内容的上面。...或者,换一种理解方式(个人感觉这个更好理解):scrollBy、scrollTo移动的就是view本身,而view的内容不动,只不过此时屏幕也随view本身一起移动,视觉上就是 view的内容 就会反向移动

    1K00

    WPF --- 触摸屏下的两个问题

    期间遇到了两个问题: WPF在触摸屏下,如果有滚动条(ScrollViewer)的情况下,默认包含触底反馈的功能,就是触摸屏滑动到底或从底滑到顶,界面都会出现抖动的情况。...我处理这个问题的时候,是先处理的鼠标滑轮无法滚动,处理方案就是根据鼠标的偏移量,手动设置 ScrollViewer 的位置,如下: private void DataGrid_MouseWheel(object...,那么解决触摸屏触点在 DataGrid 中无法滚动的问题,也是一样的思路,根据触点的偏移量,模拟鼠标滚轮的偏移量,在调用鼠标滚动事件,模拟滚动,代码如下: private const double TouchMoveThreshold...(object sender, System.Windows.Input.TouchEventArgs e) { // 获取当前触摸位置 Point currentTouchPosition...小结 总的来说,大部分鼠标和触摸屏事件是类似的,但是有些场景下,可能两者不通用的。所以可能需要自行测试一下,保证软件的稳定性。

    23510

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

    在Cocos Creator中实现一个可拖动组件,只需对目标节点拖拽配置就能让节点任意移动,这对策划、美术人员来说是不是很有杀伤力! 1....(location); } }); 代码主要是设置节点的触摸监听,在监听事件中修改节点的位置。...设置移动目标 有了这个组件,可以控制节点任意移动了,但是很多情况下,需要将节点移动到指定位置,比如将果皮投进垃圾箱,我们增强一下组件代码: cc.Class({ extends: cc.Component..._oldPosition; } }); 代码变复杂了,简单说明一下: 是增加了一个target节点属性,他是节点要移动到的目标 增加TOUCH_END事件,当手指抬起时,检查当前节点是否在目标节点之中...小结 这次主要运用了节点的触摸事件监听,在触摸事件的touchEvent参数中获取当前触摸坐标点。

    4.9K31

    移动端的touch事件处理

    changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组。每个Touch对象包含的属性如下。  clientX:触摸目标在视口中的x坐标。  ...TouchList是一个只读的类数组对象,它表示在当前的touch事件中,与触摸屏的接触点的个数,比如:如果你当前是三根手指在同时在触摸屏上,那么每一根手指都会有一个相对应的touch对象,来记录对应手指的操作相关的信息...而changedTouches却可以获取到这个触点的touch对象,为什么?...验证这个可以通过很简单的方法,用两个触点(两根手指),其中一个触点一直按着屏幕,而另外一个触点,触发touchend事件,可以看到这个时候,touches和targetTouches的属性中,数组长度为...和touchend时的位置信息的原因了吧,关于这个,在下一篇文章中进行测试说明。

    1.7K20

    RN手势

    而这里面会有很多的成员变量比如说触摸点的位置,比如说手势状态的ID. 手势状态有以下变量 stateID—触摸状态的ID,在屏幕上至少有一个点的情况下,这个id会一直存在。...vx—当前的横向移动速度 vy—当前的纵向移动速度 numberActiveTouches—当前在屏幕上的有效触摸点的数量。...这里列举出的三个生命周期方法是最常见的,但是其实它还有其他很多的方法。不过我们平常用的单次点击事件就是这三个。 在移动手势中,也有它自己的生命周期方法。这里不做详解。通过下面一个小的案例进行解说。...为啥要在这个方法里面呢,是因为这个方法在UI渲染之前运行的,我们可以让它来做一些定义变量或赋值的操作。所以我们将事件的按下、移动和结束的方法都写到这边来。分别给这几个属性各自定义一个方法。...虽然我们看到的是简写的方法,但是实际上,系统按下的方法会给我们自定义的这个方法传入两个参数,一个是事件,而另外一个是手指触摸的位置。在开始的时候,我们要将开始偏移的位置给记录下来。

    2.5K120

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

    注意如果不是写在行内style中的属性都不能通过id.style.atrr来获取。 touch事件 touch事件模型现阶段规定了很多种类型的触摸事件,以下三种是应用最广泛的: 1. ...表示当前跟踪的触摸操作的touch对象的数组。 targetTouches:特定于事件目标的Touch对象的数组。...changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组。 每个Touch对象包含的属性如下。 clientX:触摸目标在视口中的x坐标。...clientY:触摸目标在视口中的y坐标。 identifier:标识触摸的唯一ID。 pageX:触摸目标在页面中的x坐标。(触摸点相对于页面的位置) pageY:触摸目标在页面中的y坐标。...touchend事件中应该是只有个changedTouches触摸实例列表的。 参考链接:原生js完美拖拽,每次刷新可以记住上次拖拽的位置

    4.3K50
    领券