在 Chromium (版本45.0.2454.101 Ubuntu 15.04(64位))中:
当我将两个可拖动文本放在一起时,并在右侧开始拖动操作时,拖动图像会向左移动一个奇怪的偏移。好像它已与左侧文本对齐。
我在firefox中没有看到这种行为。
HTML5对我来说有点新鲜,所以我不确定我做的一切都是正确的 这是一个错误吗? 有办法解决吗? (不离开Chromium);)
使用例如DnD测试页面(下面的链接)并将其代码替换为下面的(稍作修改)代码。然后开始拖动'HelloHello2'文本:
http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop
<!DOCTYPE HTML>
<html>
<head>
<style>
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script>
function allowDrop(ev) {
ev.preventDefault();
document.getElementById("div1").style.backgroundColor = "#EEEEEE";
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function restoreBg() {
document.getElementById("div1").style.backgroundColor = "white";
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<p>Start dragging the 'HelloHello2' text (into the rectangle):</p>
<div id="div1" ondrop="drop(event)" ondragleave="restoreBg()" ondragover="allowDrop(event)"></div>
<br>
<a id="drag1" draggable="true" ondragstart="drag(event)">HelloHello1</a><a id="drag2" draggable="true" ondragstart="drag(event)">HelloHello2</a>
</body>
</html>
答案 0 :(得分:1)
我能够在Chrome和Opera中重现这个问题(在Windows 64上),然后发现这似乎是导致这种行为的根本原因,但是找不到任何参考来支持它为什么会这样工作(如果我能找到答案,我稍后会检查并更新答案。
根本原因:可拖动元素(锚点)是inline
元素。
解决方案:让可拖动元素使用CSS显示block
(或您的inline-block
),这样就可以解决问题。
function allowDrop(ev) {
ev.preventDefault();
document.getElementById("div1").style.backgroundColor = "#EEEEEE";
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function restoreBg() {
document.getElementById("div1").style.backgroundColor = "white";
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
&#13;
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
#drag1, #drag2 { display:inline-block; }
&#13;
<p>Start dragging the 'HelloHello2' text (into the rectangle):</p>
<div id="div1" ondrop="drop(event)" ondragleave="restoreBg()" ondragover="allowDrop(event)"></div>
<br>
<a id="drag1" draggable="true" ondragstart="drag(event)">HelloHello1</a><a id="drag2" draggable="true" ondragstart="drag(event)">HelloHello2</a>
&#13;