为什么用CSS拖动拖动会跳?

shuji

我正在尝试使用转换翻译来拖动容器,但是某些原因导致了跳动行为,我无法弄清楚是什么原因。
更新:当元素的容器不总是位于文档的0,0位置时,这必须对元素起作用。

http://jsfiddle.net/dML5t/2/

HTML:

<div id=container style="position:absolute;left:50px;top:50px;width:500px;height:500px;background-color:red;">
    <div id=tcontainer style="position:relative;left:50px;top:50px;width:400px;height:400px;background-color:green;">
        <div id=move style="position:relative;left:20px;top:20px;height:150px;width:150px;background-color:lightgray;">
    </div>
</div>


Javascript:

obj = {startPositionX:0,startPositionY:0};
$('#move').on("mousedown",function(){
    var move = $(this);
    obj.startPositionX=event.offsetX+$('#tcontainer').offset().left;
    obj.startPositionY=event.offsetY+$('#tcontainer').offset().top;
    $(document).on("mousemove",function(e){
        console.log("dragging", e.pageX-obj.startPositionX, e.pageY-obj.startPositionY);
        move.css('transform','translate('+(e.pageX-obj.startPositionX)+'px, '+(e.pageY-obj.startPositionY)+'px)');
    });
});
$(document).on("mouseup",function(){
    $(this).off("mousemove");
});
托尼

OffsetX和OffsetY可能会给您相对于现在悬停的元素的光标pos。您将初始坐标保存在mousedown中。触发mousemove时,此坐标略有变化,因此当您从首字母减去1时,您得到零(或相差1px),并且div移至左上角。鼠标悬停后,光标将悬停在body元素上,并在mousemove中获得与body相关的坐标。因此,当您从新坐标中减去零时,您将获得真实坐标,并且div将移至正确的位置。然后,您将获得与拖动div相关的坐标,并且将再次获得零,然后是实坐标,依此类推。

请改用pageX和pageY!小提琴

$('.move').on("mousedown",function(me){
    var move = $(this);

    var lastOffset = move.data('lastTransform');
    var lastOffsetX = lastOffset ? lastOffset.dx : 0,
        lastOffsetY = lastOffset ? lastOffset.dy : 0;

    var startX = me.pageX - lastOffsetX, startY = me.pageY - lastOffsetY;

    $(document).on("mousemove",function(e){
        var newDx = e.pageX - startX,
            newDy = e.pageY - startY;
        console.log("dragging", e.pageX-startX, e.pageY-startY);
        move.css('transform','translate(' + newDx + 'px, ' + newDy + 'px)');

        // we need to save last made offset
        move.data('lastTransform', {dx: newDx, dy: newDy });
    });
});
$(document).on("mouseup",function(){
    $(this).off("mousemove");
});

您需要保存div(move.offset())的原始坐标,并使用鼠标偏移(e.pageX-startXe.pageY-startY)获取新坐标。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么用$$替换仅会导致$

来自分类Dev

为什么用$$替换仅会导致$

来自分类Dev

为什么HTML可拖动元素在父背景下拖动?

来自分类Dev

为什么droppable不接受被拖动的项目?

来自分类Dev

为什么用Option包装通用方法调用会延迟ClassCastException?

来自分类Dev

为什么用-fllvm编译此Haskell程序会产生不同的结果?

来自分类Dev

为什么用_空白标识符进行范围迭代会产生不同的值

来自分类Dev

为什么用innerText替换InnerHTML会导致性能下降> 15倍

来自分类Dev

为什么用universal_newlines打开子进程会导致Unicode解码异常?

来自分类Dev

为什么用Magick.NET进行转换会导致黑色的PCX文件?

来自分类Dev

为什么用Javascript字符串替换会颠倒从右到左语言的单词顺序?

来自分类Dev

为什么用scipy保存mat文件会导致文件大小比Matlab大?

来自分类Dev

为什么用Java ImageIO读写JPEG会减小文件大小?

来自分类Dev

为什么用char *替换char []会产生总线错误?

来自分类Dev

为什么用向量中的变量索引会产生NA?

来自分类Dev

为什么用sed替代我的单引号会消失

来自分类Dev

为什么用CGImageSource加载gif会导致内存泄漏?

来自分类Dev

为什么用Pandoc创建的RTF文件会以纯文本格式打开?

来自分类Dev

为什么可拖动的容器在拖动时没有变成圆角?

来自分类Dev

为什么我的左拖动/滑块正常工作,而右拖动/滑块却无效

来自分类Dev

iOS Swift MapKit为什么MKPointAnnotation是可拖动的,而符合MKAnnotation的类却无法拖动

来自分类Dev

CSS [可拖动]元素

来自分类Dev

为什么用“ if(!! variable)”而不是“ if(variable)”?

来自分类Dev

为什么用QT编译OpenCV?

来自分类Dev

为什么用阴谋而不是使

来自分类Dev

为什么用TCPDF代替mpdf

来自分类Dev

Vim:为什么用$作为行尾?

来自分类Dev

为什么用.call(this)代替括号

来自分类Dev

为什么用ViewStates代替Sessions

Related 相关文章

  1. 1

    为什么用$$替换仅会导致$

  2. 2

    为什么用$$替换仅会导致$

  3. 3

    为什么HTML可拖动元素在父背景下拖动?

  4. 4

    为什么droppable不接受被拖动的项目?

  5. 5

    为什么用Option包装通用方法调用会延迟ClassCastException?

  6. 6

    为什么用-fllvm编译此Haskell程序会产生不同的结果?

  7. 7

    为什么用_空白标识符进行范围迭代会产生不同的值

  8. 8

    为什么用innerText替换InnerHTML会导致性能下降> 15倍

  9. 9

    为什么用universal_newlines打开子进程会导致Unicode解码异常?

  10. 10

    为什么用Magick.NET进行转换会导致黑色的PCX文件?

  11. 11

    为什么用Javascript字符串替换会颠倒从右到左语言的单词顺序?

  12. 12

    为什么用scipy保存mat文件会导致文件大小比Matlab大?

  13. 13

    为什么用Java ImageIO读写JPEG会减小文件大小?

  14. 14

    为什么用char *替换char []会产生总线错误?

  15. 15

    为什么用向量中的变量索引会产生NA?

  16. 16

    为什么用sed替代我的单引号会消失

  17. 17

    为什么用CGImageSource加载gif会导致内存泄漏?

  18. 18

    为什么用Pandoc创建的RTF文件会以纯文本格式打开?

  19. 19

    为什么可拖动的容器在拖动时没有变成圆角?

  20. 20

    为什么我的左拖动/滑块正常工作,而右拖动/滑块却无效

  21. 21

    iOS Swift MapKit为什么MKPointAnnotation是可拖动的,而符合MKAnnotation的类却无法拖动

  22. 22

    CSS [可拖动]元素

  23. 23

    为什么用“ if(!! variable)”而不是“ if(variable)”?

  24. 24

    为什么用QT编译OpenCV?

  25. 25

    为什么用阴谋而不是使

  26. 26

    为什么用TCPDF代替mpdf

  27. 27

    Vim:为什么用$作为行尾?

  28. 28

    为什么用.call(this)代替括号

  29. 29

    为什么用ViewStates代替Sessions

热门标签

归档