【问题标题】:Dragula - copy element on double tap (mobile)Dragula - 双击复制元素(移动设备)
【发布时间】:2018-02-22 10:14:04
【问题描述】:

有没有办法通过双击(双击)将dragula 元素从一个容器复制到另一个容器,仅用于移动视图?拖动在手机上效果不佳,因为当您用手指按住元素时屏幕会滚动。

为了让事情变得更有趣,我的可拖动元素是 div 'btn-group',它具有下拉按钮,例如:

<div class="btn-group">
  <button type="button" class="btn dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id="dropdownMenuButton1">
   OPTIONS
  </button>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
    <a class="dropdown-item" href="#!">OPTION 1</a>
    <a class="dropdown-item" href="#!">OPTION 2</a>
    <a class="dropdown-item" href="#!">OPTION 3</a>
  </div>
</div>

我正在复制 div(btn-group)而不是下拉项。

这就是为什么双击似乎是更好的解决方案。一键选择下拉项,双击复制。

【问题讨论】:

  • 您要将下拉项复制到什么位置?您需要先禁用引导程序的下拉项单击事件。

标签: javascript jquery double-click dragula


【解决方案1】:

您可以通过在点击事件中使用event.preventDefault() 来禁用默认下拉项点击。然后在双击时,您可以移动点击的项目。

$("#copyfrom .dropdown-item").on("click", function(e){
  e.preventDefault();  
  return false;
});

$("#copyfrom .dropdown-item").on("dblclick", function(){
  $(this).clone().appendTo("#copyto");
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/js/bootstrap.bundle.min.js"></script>

Dropdown Source:<div class="dropdown">
  <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown link
  </a>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink" id="copyfrom">
    <a class="dropdown-item" href="#">Action</a>
    <a class="dropdown-item" href="#">Another action</a>
    <a class="dropdown-item" href="#">Something else here</a>
  </div>
</div>

Dropdown Target:<div class="dropdown">
  <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown link
  </a>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink" id="copyto">
  </div>
</div>

对于移动检测,您可以将这些方法封装在如下内容中:

$( document ).ready(function() {      
    var isMobile = window.matchMedia("only screen and (max-width: 760px)");

    if (isMobile.matches) {
        // Run the code above.
    }
 });

取自这里:

What is the best way to detect a mobile device in jQuery?

【讨论】:

  • 嗨 Taha,感谢您的回答,但这会移动对象,而不是复制它。我想把它复制过来。理想情况下使用 Dragula 语法(如果可能)。我相信我们彼此误解了。我不是在复制下拉项,而是按钮本身,尽管对于问题原则来说对象是什么并不重要。
  • 我检查并看到 Dragula 组件没有以编程方式拖动方法,我在答案中从 detach() 切换到 clone() 以复制元素而不是移动。
猜你喜欢
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多