【问题标题】:Capture drag amount using dragstart and dragend in jquery在jQuery中使用dragstart和dragend捕获拖动量
【发布时间】:2018-04-25 08:06:36
【问题描述】:

我想捕获开始拖动的初始位置和拖动量(在 x 和 y 方向)并将其传递给另一个函数以进行进一步处理。我的html如下:

<style>
body{
padding:0;
margin:0;
}
.wrapper{
    width:1800px;
    height:2500px;
    background:#86CDEA;
}
</style>
<div class="wrapper" draggable="true"></div>

我的脚本是:

<script>
    var parentOffset, relX, relY;
    $(".wrapper").on("dragstart", function(event) {
        parentOffset = $(this).offset();
        relX = event.pageX - parentOffset.left;
        relY = event.pageY - parentOffset.top;
        alert("Drag Started - x: "+relX+"px & y: "+relY+"px");
    });

    $(".wrapper").on("dragend", function(event) {
        relX = event.pageX - parentOffset.left;
        relY = event.pageY - parentOffset.top;
        alert("Drag End - x: "+relX+"px & y: "+relY+"px");
    });
  function someFunction(x,y,sftX,sftY){
      //Where x, y is the initial position of the drag and sftX,sftY is the amount of drag in x & y direction respectively which can be +ve or -ve
  }
  </script>

我的目标是使用动画向方向滚动文档或元素,并在拖动量中添加一些额外的像素朝用户想要移动文档或元素的方向。

谁能帮我实现这个目标?

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-draggable


    【解决方案1】:

    由于您已标记 jquery-ui-draggable,我将使用 jQuery UI draggable 函数。像这样:

    var relX, relY;
    $('.wrapper').draggable(
    {
        drag: function(){
            var offset = $(this).offset();
            relX = offset.left;
            relY = offset.top;           
        }
    });
    

    看看这个小提琴:https://jsfiddle.net/tjuh5kpv/

    【讨论】:

    • 我不想拖动 .wrapper。它将被固定在它的位置。我想在 .wrapper 元素中捕获拖动量。您的代码正在拖动 .wrapper 本身。同样在 dragend 我想要拖动量的警报。当我在您的代码中添加 relX 警报时,它会阻止由于警报而拖动(仅拖动 1 或 2 个像素)。
    【解决方案2】:

    你可以通过 jQuery-UI 来实现,如下所示:

    HTML

    Start Position: <span id="start"></span>
    <br/> 
    End Position: <span id="end"></span>
    
    <div class="wrapper" draggable="true">Drag me!</div>
    

    JS

    $('.wrapper').draggable({
      start: function(e, ui) {
        // Getting start position
        var parentOffset = $(this).parent().offset();
        var relX = e.pageX - parentOffset.left;
        var relY = e.pageY - parentOffset.top;
        $("#start").html(" x: " + relX + ", y: " + relY);
      },
      stop: function(e, ui) {
        // Getting stop position
        var parentOffset = $(this).parent().offset();
        var relX = e.pageX - parentOffset.left;
        var relY = e.pageY - parentOffset.top;
        $("#end").html(" x: " + relX + ", y: " + relY);
      }
    });
    

    Online Demo (jsFiddle)

    【讨论】:

    • 对不起,先生们,我认为将 draggable 与 .wapper 一起使用会造成混乱。 我不想移动框。 我的所有要求是移动和平板设备。我想检测拖动量、拖动方向和拖动速度在手机和平​​板电脑中触摸、拖动和释放容器包装。捕获这些数据后,它将被传递给一个函数,我将对这些数据执行一些操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2015-04-09
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多