Html5拖放unicode棋盘

Posted

技术标签:

【中文标题】Html5拖放unicode棋盘【英文标题】:Html5 drag and drop unicode chessboard 【发布时间】:2011-12-08 21:08:51 【问题描述】:

我正在尝试使用 unicode 块在我的 html5/css 棋盘上执行 html5 dragndrop,但目前遇到了问题。 在拖放时,整个 'li' 元素似乎在移动,而在放下时,这会破坏棋盘。

这可以在国际象棋 WordPress 网站上看到: http://www.buryknightschess.org.uk/play-chess/

(可以看出,我在 SitePoint 论坛上寻求帮助,但尚未从那里得到帮助)。

可能我只需要使 unicode 棋子可拖动,而不是整个棋盘 (<li></li>)。

我将继续尝试解决此问题,但同时我将非常感谢任何有助于解决此 html5 拖放问题的建议。我期待有帮助的回复,非常感谢

【问题讨论】:

【参考方案1】:

<li/> 被移动(从而重新排列棋盘)的原因是因为在您的drop 函数中调用了appendChild

function drop(event) 
    var element = event.dataTransfer.getData("Text");

    // This changes the DOM
    event.target.appendChild(document.getElementById(element));
    event.stopPropagation();

    return false;

drop 函数应该复制被拖动节点的innerHTML,而不是移动那个实际的 DOM 节点。以下是新的drop 的功能:

function drop(event) 
    var coordinate = event.dataTransfer.getData("Text");
    var element = document.getElementById(coordinate);

    event.target.innerHTML = element.innerHTML; // Moving piece to new cell
    element.innerHTML = ""; // Clearing old cell

    event.stopPropagation(); // Consider using `event.preventDefault` instead

    return false;

另外,我会考虑使用event.preventDfault 而不是event.stopPropagation。这使得可以将新的 drop listener 添加到 board 或其父级之一。例如,您可能希望在文档正文中添加一个放置侦听器,以处理用户试图将一块棋子拖出棋盘的情况。

作为一般评论,您是否考虑使用 jQueryUI draggable 和 droppable 库?您将能够支持更丰富的拖放交互,例如对齐网格移动和延迟启动。此外,HTML5 拖放通常用于允许用户将文件从其操作系统桌面拖放到网页上。使用方式完全没问题,就是有点奇怪。

【讨论】:

Xavi-非常感谢您出色而详细的回答。我将使用您的建议并研究它们,以便了解有关 html5 dragndrop 的更多信息。也许 jQuery dnd 总体上更好,但由于棋盘是 html5,我想尝试使用 html5 dnd 保持所有“原生”。我可能会使用 jQuery 做另一个版本-再次感谢您的出色回复!

以上是关于Html5拖放unicode棋盘的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 字符编码

unicode 是几个字节?

Unicode详解

Unicode 范围以及python中生成所有Unicode的方法

unicode16与unicode32之间是啥转换关系

如何将unicode字符转换成汉字?