Webkit和jQuery可拖动跳跃

作为一个实验,我创建了几个div并使用CSS3旋转它们

.items{
位置:绝对位置;
光标:指针;
背景#FFC400;
-moz盒阴影:0px 0px 2px#E39900;
-网络工具包盒阴影:1px 1px 2px#E39900;
盒影:0px 0px 2px#E39900;
-moz边界半径:2px;
-webkit边界半径:2px;
边界半径:2px;
}

然后,我随机对它们进行了样式设置,并通过jQuery使它们可以拖动

$('.items')。每个(函数(){
$(this.css)({
顶部:(80*Math.random())+“%”,
左:(80*Math.random())+'%',
宽度:(100+200*Math.random())+px,
高度:(10+10*Math.random())+px,
“-moz transform”:“rotate(+(180*Math.random())+'deg)”,
“-o-transform”:“rotate(+(180*Math.random())+'deg)”,
“-webkit transform”:“rotate(”+(180*Math.random())+“deg)”,
});
});
$('.items').draggable();

拖拽是有效的,但我注意到拖拽div时突然跳了起来,这只适用于webkit浏览器,而在Firefox中一切正常

如果我删除position:absolute样式,“跳跃”更糟糕。我认为webkit和gecko之间的转换原点可能有所不同,但默认情况下它们都位于元素的中心

我已经到处搜索过了,但只找到了关于滚动条或可排序列表的结果

这是我的问题的工作演示。尝试在Safari/Chrome和Firefox中查看它。http://jsbin.com/ucehu/

这是webkit中的错误还是浏览器呈现webkit的方式

我在不同的浏览器上绘制了一幅图像来表示旋转后的偏移量,如@David Wick的回答

如果您不想修补或修改jquery.ui.draggable.js,下面是要修复的代码

$(文档).ready(函数(){
var补偿,补偿;
$(“#框”)。可拖动({
开始:功能(事件、用户界面){
var left=parseInt($(this).css('left'),10);
左=isNaN(左)?0:左;
var top=parseInt($(this).css('top'),10);
top=isNaN(top)?0:top;
RecoverPleft=左-ui.position.left;
Receptop=top-ui.position.top;
},
拖动:函数(事件、ui){
ui.position.left+=recoverpleft;
ui.position.top+=补偿点;
}
});
});

或者你可以看演示

发表评论