首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Svelte组件将每个手指注册为单独的触摸事件。

Svelte组件将每个手指注册为单独的触摸事件。
EN

Stack Overflow用户
提问于 2022-09-11 13:38:37
回答 1查看 41关注 0票数 -1

我在循环中有一个Svelte组件的实例,我希望能够同时使用多个手指独立地滑动每个Slider组件的.box元素。

下面是代码的简化版本(不能包含在REPL中):https://github.com/dtsmarin/svelteSOexample

编辑:我认为我在这里使用苗条运动会带来比它解决更多的问题。我正在用一些更简单的东西来代替它,比如Hammer.js。无论如何,如果有人找到了解决办法,我仍然感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-12 08:40:38

这里的方法应该是使用指针事件,它提供了一个可以用来识别手指的pointerId。您可以使用捕捉功能来防止手指之间的干扰,并在手指松开之前继续滑动滑块,即使手指在交互过程中意外离开了滑块的区域。

示例:

代码语言:javascript
复制
<script>
  let element;
  
  let capturedPointerId = null;
  let x = 0;
  let y = 0;

  function onPointerDown(e) {
    element.setPointerCapture(e.pointerId);
    capturedPointerId = e.pointerId;
  }
  function onPointerUp(e) {
    capturedPointerId = null;
    element.releasePointerCapture(e.pointerId);
  }
  function onPointerMove(e) {
    if (capturedPointerId != e.pointerId)
      return;

    e.preventDefault();
    e.stopPropagation();

    x += e.movementX;
    y += e.movementY;
  }
</script>

<div bind:this={element}
     on:pointerdown={onPointerDown}
     on:pointerup={onPointerUp}
     on:pointermove={onPointerMove}
     style:transform="translate({x}px, {y}px)">
  {capturedPointerId}
</div>

<style>
  div {
    /* This is important to prevent panning/zooming/reload gestures. */
    touch-action: none;
  }
</style>

REPL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73679722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档