Javascript将div拖动到视口(viewport)容器内

标签 javascript html mobile draggable viewport

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

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

我尽量将其保持在最低限度 我也不想使用 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>

最佳答案

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

var touch_x= 0;
var touch_y= 0;

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

然后在 touchmove 上您可以引用它并找到差异。因此,您不会按 pageX 移动,而是按 touch_x - pageX 移动。这将导致你朝积极和消极的方向发展。您当前的代码将始终为正数,因此只会朝正方向移动。

关于Javascript将div拖动到视口(viewport)容器内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706185/

相关文章:

javascript - 使用 Zurb Foundation 和 Symfony2

html - 将鼠标悬停在下拉菜单上会将其下方的内容稍微向上移动并在页面右侧创建边距

javascript - 您如何查看哪个 Javascript 脚本生成了特定的 html 行?

单击图像后,Html css 播放/启动 youtube 视频

javascript - 使用数字键盘但没有箭头按钮的跨浏览器数字输入

javascript - 如何在 JavaScript 中基于另一个对象动态创建属性和对象?

javascript - res.send 和 res.render 调用

jquery - 奇怪的 iOS 动画,用 jQuery 显示?

iPhone 随机数附加 URL

javascript - 如何渲染隐藏预设轨迹的绘图,即基于列表的 'legendonly'