为什么用css拖动转换为跳转
Why is dragging with css translate jumping?
我试图使用transform-translate拖动一个容器,但有些东西导致了跳跃行为,我不知道原因是什么
UPDATE:当元素的容器不总是位于文档的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可以为您提供相对于当前悬停的元素的光标位置。您在mousedown中保存了初始坐标。当鼠标移动被触发时,你的这个坐标发生了一点变化,所以当你从首字母中减去一时,你得到了零(或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-startX
,e.pageY-startY
)来获取新坐标。
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 删除对HTML元素的拖动
- jQuery UI可排序-多连接列表拖动
- 禁用SVG拖动
- 旋转后拖动对象
- JQuery UI可拖动潜水与滚动棒到鼠标
- jsPlumb-拖动克隆而不进行复制
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 如何使元素在可拖动元素内可单击
- 如何在使用Kinetic拖动同一对象后,在旋转动画中保持先前的偏移
- 拖动和调整 CSS 转换元素的大小
- 将复选框转换为图像,需要添加拖动功能才能更改图像
- 为什么用css拖动转换为跳转
- Raphaël转换相对于画布的拖动回调坐标
- 什么是最简单的方法,我可以转换图像/元素到另一个图像/元素,同时拖动它
- 节点转换后拖动不正常,D3
- jQuery拖动与CSS转换与jQuery UI
- 用于在浏览器中转换对象(拖动、缩放、旋转和扭曲)的Javascript框架
- 拖动一个Famous曲面,并使其在mouseup上转换回原点
- Jquery UI 可拖动,添加了 CSS 的缩放转换问题