Jquery UI Touch Punch点击事件在Android应用程序中不起作用[重复]

Posted

技术标签:

【中文标题】Jquery UI Touch Punch点击事件在Android应用程序中不起作用[重复]【英文标题】:Jquery UI Touch Punch click event is not working in Android app [duplicate] 【发布时间】:2020-06-02 12:18:58 【问题描述】:

我使用“Jqueryui-touch-punch”库进行拖放。拖放功能和事件在 Chrome 浏览器和 ios 移动应用上运行良好。

问题在于,在 android 应用上,拖放工作正常,但点击事件在 Android 应用中不起作用。

基本上,id="clickinEventFired" 上的代码拖放和单击事件在 chrome 浏览器和 ios 移动应用上运行良好。

但 Android 应用程序中的相同代码,拖放工作正常,但点击事件不起作用。 当我们点击“Drag me around”时总是触发拖动事件。

请帮我看看我犯了什么错误。

代码:

$(function() 
  $("#draggable").draggable(
    cursor: 'move',
    start: startDrag,
    //stop: stopDrag
  );

  $("#clickinEventFired").click(function() 
    alert("Handler for .click() called.");
  );
);

function startDrag() 
  alert('Dragging event is fired');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>


<div id="draggable" class="ui-widget-content">
  <p id="clickinEventFired">Drag me around</p>
</div>

谢谢。

【问题讨论】:

也许这不能解决你的问题,但是当当前版本是 3.4(6 年的差异)时,是否有理由使用 jQuery 版本 1.11?我不知道 touchpunch 是否需要最低版本,但在示例中它显示了 jquery 1.8 版的使用 感谢 Calvin 的回复,但我也使用了以下库,但遇到了同样的问题: 看这里:github.com/furf/jquery-ui-touch-punch/issues/215,解决方案不止一种 欢迎来到 Stack Overflow。我想其他人已经给了你一些很好的建议。 Touch Punch 可以提供很多帮助,但是当事件冒出来时,它也会让人感到困惑。在这种情况下,tap 事件应该虚拟执行click 事件。 tap hold move 应该触发 drag 事件。我还建议考虑为您的 Draggable 制作一个句柄。这对于避免混淆或模棱两可的事件目标非常有帮助。 非常感谢@deblocker 的回答。 【参考方案1】:

对于移动设备,您希望更加具体。

这是一个可拖动和可点击项目的示例。

桌面测试:https://jsfiddle.net/Twisty/sd64ux8p/24/

手机测试:https://jsfiddle.net/Twisty/sd64ux8p/24/show/

HTML

<div id="draggable" class="ui-widget">
  <div class="ui-drag-handle">&nbsp;</div>
  <p id="clickinEventFired" class="ui-widget-content">Drag me around</p>
</div>

<div id="log">
</div>

CSS

#log 
  font-family: monospace;
  font-size: 0.75em;
  height: 6em;
  position: absolute;
  bottom: 0;
  overflow: hidden;


#log p 
  padding: 0;
  margin: 0;


.ui-widget 
  padding: 0;
  border: 1px solid #ccc;
  border-radius: 6px;
  background: #ccc;
  width: 150px;


.ui-drag-handle 
  width: 100%;
  height: 18px;


.ui-widget-content 
  background: #fff;
  margin: 0;
  padding: 2px;
  border-radius: 3px;

JavaScript

$(function() 
  function log(str) 
    $("#log").prepend("<p>" + str + "</p>");
  
  $("#draggable").draggable(
    cursor: 'move',
    handle: ".ui-drag-handle",
    start: function() 
      log("Drag Start");
    ,
    stop: function() 
      log("Drag Stop");
    
  );

  $("#clickinEventFired").click(function() 
    log("Handler for .click() called.");
  );
);

由于我们添加了一个句柄,我们现在创建一个可视队列,可以在其中单击以拖动。我们还将事件目标分开,因此现在“点击”不会与“拖动”事件混淆。

【讨论】:

非常感谢@Twisty 的回答。 @VikashMishra 如果它对你有帮助,我希望你会投票或将其标记为答案。我还建议参加巡回赛:***.com/tour

以上是关于Jquery UI Touch Punch点击事件在Android应用程序中不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

jquery ui可拖动手机版

jquery touch punch z 索引没有影响

可拖动的 jquery ui 触摸防止专注于 Chrome 上的输入

jquery ui slider在移动端不能拖动,有没有简单快捷的方法处理,比如把slider转化为touch事件之类的

在 iPad Web App 上拖放 - 同时保留滚动功能

touch和click优先性