Dojo Dijit Buttons 使用 CSS 将“真实”按钮隐藏在屏幕外:
.dijitOffScreen {
position: absolute !important;
left: -10000px !important;
top: -10000px !important;
}
- 为什么这会导致 HTML5 拖放在 Chrome 和 FireFox 中无法正常工作?
- 有哪些替代方法可以隐藏输入元素并保持相同的 Dojo Dijit 按钮行为?(添加
display:none
到屏幕外输入元素似乎有效,但这是否在功能上改变了输入的行为,从而改变了小部件?)
原始问题:
有时,默认的“幽灵”HTML5 拖动图像尺寸较小或根本不呈现。它因浏览器而异,并且似乎与涉及的 Dojo Dijits 交互。
将 Dijit 按钮添加到可拖动的 Dijit ContentPane 后,是什么导致拖动图标在 FireFox 中很小并且在 Chrome 中根本不呈现?
var cp1 = new ContentPane({
style: "width: 400px; height: 124px; background:red",
content: "cp1: 'ghost 'drag icon is tiny or not visible :(<br />",
});
// Make draggable
domProp.set(cp1.domNode, 'draggable', 'true');
cp1.on('dragstart', onDragStartHandler); // otherwise FF doesn't show drag icon
// PROBLEM -> adding button messes up drag icon
button = new Button({label: 'Dijit Button'});
button.placeAt(cp1.containerNode);
更新:
- 除了不正确地呈现拖动图标之外,其他 HTML5 拖放事件也不再正常工作。在 Chrome 上,整个文档在添加
dragover
和/或end
添加事件后就会消失。在 FireFox 上,拖动事件的处理速度要慢得多。 - 添加通用 HTML 按钮输入而不是 Dijit 按钮不会导致任何这些副作用:Dojo Dijit 肯定会以某种方式干扰......
更新2:
- 根本原因:Dijit Button 通过类隐藏了 HTML 按钮输入元素
dijitOffScreen
。从元素中删除left: 10000px !important
和top: 10000px !important
样式会以显示空白按钮为代价来恢复拖放。信用:肯尼斯·G·弗兰凯罗