【问题标题】:Javascript drag div inside viewport containerJavascript在视口容器内拖动div
【发布时间】:2014-09-07 01:04:20
【问题描述】:

我正在尝试为移动设备实现拖放功能...有一个具有固定宽度/高度的容器 div 和其中另一个包含内容的 div,但它的大小比父级大得多。

我的问题是,一旦我点击了可拖动的 div,我就可以移动它,但我真的没有找到任何解决方案来保持每次我在屏幕上开始 touchmove 时可拖动元素的位置相同..

我尽量减少这种情况 我也不想使用 jQueryUI

附:拖动元素只能通过使用触摸模拟在桌面上工作

这是一个例子 JSFiddle

这是我的代码

<div class="container">
    <div class="draggable">

    </div>
</div>

<script>
    $(document).on('touchmove','.draggable',function(e){

        //Prevent default for mobile devices so the element inside the container can be dragged witouth stopping
        //e.preventDefault();

        //Calculating the distance where the touch event stopped
        var xPos = e.originalEvent.touches[0].pageX;
        var yPos = e.originalEvent.touches[0].pageY;


        //Moving the draggable element around
        $(this).css({
            left: xPos + $(this).offset().left + 'px',
            top: yPos + $(this).offset().top + 'px'
        });

    });
</script>

<style>
    .container
    {
        width:200px;
        height:200px;
        overflow:hidden;
        position:relative;
    }
    .draggable
    {
        width:1000px;
        height:1000px;
        background:url('http://th04.deviantart.net/fs71/PRE/f/2014/249/d/f/seraphim_by_alexiuss-d7y4v0o.jpg');
        position:relative;
    }
</style>

【问题讨论】:

  • 你的小提琴是空的。
  • 您需要容器 div 来“屏蔽”可拖动元素吗?我猜对了吗?我知道没有得到的是:可拖动元素应该做什么?你可以拖动它。然后?它应该放在哪里(因为它的拖放)JSfiddle 不模拟移动事件,所以我无法真正测试它。
  • 这就是我遇到的问题......我不想从左上角拖动容器内的元素,我想从我触摸元素的位置拖动它。所以基本上里面的元素它应该和这个小提琴 jsfiddle.net/WBv9r/1/light 一样工作

标签: javascript html mobile draggable viewport


【解决方案1】:

您需要获取位置变化而不是当前位置。所以这意味着你需要在touchstart 上获取pageXpageY 将它们保存在稍后可以访问的某个变量中,可能像这样:

var touch_x= 0;
var touch_y= 0;

touchstart 上,您可以将touch_xtouch_y 设置为当前的pageXpageY

然后在touchmove 上,您可以参考它并找出不同之处。所以你不会移动pageX,而是移动touch_x - pageX。这将导致你在积极和消极的方向上移动。您当前的代码将始终具有正数,因此只会朝正方向移动。

【讨论】:

  • 终于似乎按预期工作了,非常感谢您的帮助。我解决这个问题让我很困惑,因为我从来没有做过这样的事情:)
  • 等到您尝试添加捏合和缩放 ;)
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 2017-06-25
  • 2016-11-05
相关资源
最近更新 更多