nbr*_*ein 8 safari firefox html5 drag-and-drop google-chrome
在Chrome,Safari和Firefox中查看以下jsFiddle.它应该详细解释我所看到的.
总之,drag和dragend事件要么没有x和y值,要么具有奇怪的x和y值.
(见下面粘贴的代码) http://jsfiddle.net/CgzV3/10/
这些错误是否在浏览器中?我们可以期望浏览器最终在drag和dragend事件中具有合理的x和y值吗?我们可以期待FireFox最终支持offsetX和offsetY以及dragenter/dragleave/dragover/drop事件吗?
谢谢,Nate
HTML:
<aside draggable="true" id="dragme">
Drag Me
</aside>
<aside droppable="true" id="drophere">
Drop Here
</aside>
<div id="notes">
Notes:
<ul>
<li>drag: In Chrome the x/y values for drag are reasonable as the drag is happening,
but then you get some crazy values in the last drag event when
the element is dropped.</li>
<li>drag: In Firefox, there are no x/y values in drag events at all</li>
<li>drag: In Safari, the x/y values in drag events seem reasonable</li>
<li>dragend: In Chrome, the x/y values in dragend are just strange. The screenX/screenY values seem to be almost accurate, except they are offset by the distance from the bottom left corner of the dragged element to the place where the dragged element was grabbed.</li>
<li>dragend: In Safari, the x/y values in the dragend seem to all be relevant to the outer window, not the iframe (which exists since this is inside jsFiddle. This is different from the dragstart event, which sets all the x/y values (except for screenX/screenY) relative to the iframe</li>
<li>dragend: In Firefox, there is only screenX/y, and it seems right.</li>
<li>dragenter/dragover/dragleave/drop: Seem good in Chrome/Safari/FireFox except that FireFox does not have offsetX/Y values</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
function setCell(eventType, label, x, y) {
var row = ['', 'dragstart', 'drag', 'dragend', '',
'dragenter', 'dragover', 'dragleave',
'drop'].indexOf(eventType);
var cell = ['', 'client', 'page', 'screen', 'offset'].indexOf(label);
var val = [x, y].join('/');
document.getElementsByTagName('table')[0].rows[row].cells[cell].textContent = val;
}
function setRow(evt) {
var eventType = evt.type;
setCell(eventType, 'client', evt.clientX, evt.clientY);
setCell(eventType, 'page', evt.pageX, evt.pageY);
setCell(eventType, 'screen', evt.screenX, evt.screenY);
setCell(eventType, 'offset', evt.offsetX, evt.offsetY);
}
function dragstart(evt){
// FF needs this
evt.dataTransfer.setData("text/plain", "asd");
setRow(evt);
}
function dragover(evt){
evt.preventDefault();
if (evt.stopPropagation) evt.stopPropagation();
setRow(evt);
}
function drop(evt) {
console.log(evt.stopPropagation);
if(evt.preventDefault) evt.preventDefault();
if (evt.stopPropagation) evt.stopPropagation();
setRow(evt);
}
var dragme = document.getElementById('dragme');
dragme.addEventListener('dragstart',dragstart,false);
dragme.addEventListener('drag',setRow,false);
dragme.addEventListener('dragend',setRow,false);
drophere.addEventListener('dragenter',setRow,false);
drophere.addEventListener('dragover',dragover,false);
drophere.addEventListener('dragleave',setRow,false);
drophere.addEventListener('drop',drop,false);
Run Code Online (Sandbox Code Playgroud)
小智 -1
我认为你不应该考虑光标相对于浏览器的位置。光标相对于页面上元素的位置应该在每个浏览器上为您提供相同的数字。你可以使用这样的代码:
var x = evt.pageX - $('#element').offset().left
var y = evt.pageY - $('#element').offset().top
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |