我目前正在探索从Qt应用程序拖放到未知目标应用程序的可能性.问题是Qt应用程序是否有可能接收即将接收丢弃的应用程序的信息(例如进程名称或标题).
一个(组成)示例可能是将绘图从Qt窗口拖动到文本编辑器或电子表格编辑器.在前者中,它将数据作为图像提供,后者作为数据点.
似乎Qt在悬停时有点意识到丢弃的基础目标是什么,因为在改变DropAction状态时会发出actionChanged信号.如果我没有弄错的话,似乎目标应用程序会查看拖动对象中包含的mime类型,并指示该操作将被放置在那里.我也没有从targetChanged信号中获取任何信息(据我所知,这是在当前的Qt应用程序中丢弃).
任何指针都会有所帮助,我很乐意跟进.
我正在为观点实施"拖放".当拖动开始时,我将视图的可见性设置为INVISIBLE,然后,如果拖动被中断 - 返回到VISIBLE:
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Skipped some code
boolean dragStarted = v.startDrag(data, shadowBuilder, v, 0);
if (dragStarted) {
v.setVisibility(View.INVISIBLE)
}
}
}
Run Code Online (Sandbox Code Playgroud)
和:
if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) {
View droppedView = (View) event.getLocalState();
droppedView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)
当调用"Drag ended"事件时,我会遇到异常:
E/AndroidRuntime(7118): FATAL EXCEPTION: main
E/AndroidRuntime(7118): java.util.ConcurrentModificationException
E/AndroidRuntime(7118): at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
E/AndroidRuntime(7118): at java.util.HashMap$KeyIterator.next(HashMap.java:819)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1046)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1048)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1048)
E/AndroidRuntime(7118): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1048)
E/AndroidRuntime(7118): at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:3471)
E/AndroidRuntime(7118): …Run Code Online (Sandbox Code Playgroud) 我现在已经看过几个这样的地方,但是找不到很多关于它的信息:
-webkit-user-drag: element
Run Code Online (Sandbox Code Playgroud)
这是HTML5拖放标准的一部分吗?这比使用属性版本更好/更差:
<div draggable="true">my draggable element</div>
Run Code Online (Sandbox Code Playgroud)
编辑:我熟悉当前的规范并使用draggable属性,我不清楚的是CSS属性*-user-drag.
根据HTML5拖放API 的文档,删除元素时会触发两个事件:
drop事件是由放置目标发射dragend事件从拖动源发射在进行简单的测试(参见片段)时,drop事件总是在事件发生之前触发dragend(至少在Chrome中),但我在规范中找不到有关这些事件排序的任何信息.
是定义了这些事件的顺序,还是可以按任意顺序自由发射?
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
console.log("drop at " + Date.now());
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
function dragend(ev) {
console.log("dragend at " + Date.now());
}Run Code Online (Sandbox Code Playgroud)
#div1 {
background-color: red;
height: 100px;
width: 100px;
}
#drag1 {
background-color: green;
height: 50px;
width: 50px;
}Run Code Online (Sandbox Code Playgroud)
<div>Drag the green square in to the red one</div>
<div id="div1" ondrop="drop(event)" …Run Code Online (Sandbox Code Playgroud)我正在尝试实现一个编辑器,可以在其中拖动项目以将其添加到主要内容中,问题是当我拖出源项目容器时,源项目总是被破坏。
有没有办法强制源项目保持原样,同时仍然可以拖放项目?基本上,我想要一个复制行为而不是移动行为。
我已经看到了与我想要实现的基本目标相对应的其他问题,但它们都没有真正帮助我,因为问题更多地是关于如何在技术上完成复制项目的同时我想知道我如何实现这种行为在 UI 中,因为查看项目是否刚刚消失非常令人困惑。
我正在尝试使用Paperclip在Rails 3应用程序中获得一些html5拖放功能.所以,基本上:
现在,我能够实现这一目标的唯一方法是发送带有文件数据的XMLHttpRequest并让我的Rails操作读取request.raw_post ...这不是一个可行的解决方案,因为我需要发送其他POST参数和真实性令牌.
这是我到目前为止所拥有的:
<!-- IN MY VIEW -->
<h2>Drag and drop upload</h2>
<div id="drop">
<h2>Drop Files Here</h2>
</div>
<script type="text/javascript" charset="utf-8">
var dropbox = document.getElementById("drop");
drop = function(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files;
var count = files.length;
if (count > 0) {
// handleFiles(files);
var url = '/images/raw';
var request = new XMLHttpRequest();
request.open("POST", url, true); // open asynchronous post request
request.send(files[0]);
}
}
dragEnter = function(evt) {
evt.stopPropagation();
evt.preventDefault();
}
dragExit = …Run Code Online (Sandbox Code Playgroud) 我正在制作一个拖放JavaScript引擎.我学会了如何将边界框设置为父元素.但是,现在我希望将边界框设置为任何父级的任何父级,或者设置为整个页面(无边界).
现在我的Javascript引擎看起来像:
// JavaScript Document
var dragObj;
document.addEventListener("mousedown", down, false);
function down(event) {
if(~event.target.className.search(/drag/)) {
dragObj = makeObj(event.target);
dragObj.element.style.zIndex="100";
document.addEventListener("mousemove", freeMovement, false);
}
}
function freeMovement(event) {
if (typeof(dragObj.element.mouseup) == "undefined")
document.addEventListener("mouseup", drop, false);
//Prevents redundantly adding the same event handler repeatedly
dragObj.element.style.left = Math.max(0, Math.min(event.clientX - dragObj.posX, dragObj.boundX)) + "px";
dragObj.element.style.top = Math.max(0, Math.min(event.clientY - dragObj.posY, dragObj.boundY)) + "px";
}
function drop() {
dragObj.element.style.zIndex="1";
document.removeEventListener("mousemove", freeMovement, false);
document.removeEventListener("mouseup", drop, false);
//alert("DEBUG_DROP");
}
function makeBoundlessObj(e) {
var obj = new …Run Code Online (Sandbox Code Playgroud) 目前我在我的XAML中
<TabControl
AllowDrop="True"
PreviewDragOver="DragOver"
PreviewDrop="Drop" />
Run Code Online (Sandbox Code Playgroud)
我的所有拖放代码都存在于我的View的代码隐藏中,而不是在我的ViewModel中.
如何在ViewModel中处理拖放操作而不在View上添加任何依赖项?
我想倾斜一个被拖动的项目以显示区别.我有基本的拖放小提琴这里https://jsfiddle.net/igaurav/bqprc9p8/3/
我的javascript看起来像:
"use strict";
var source = null;
function listItemDragStartHandler(event){
// What is true there for?
source = event.currentTarget;
event.dataTransfer.setData("text/plain", event.currentTarget.innerHTML);
event.currentTarget.style.transform = 'rotate(15deg)';
event.dataTransfer.effectAllowed = "move";
}
function dragoverHandler(event) {
event.preventDefault();
event.dataTransfer.dropEffect = "move";
}
function dropHandler(event) {
event.preventDefault();
event.stopPropagation();
var currentElement = event.currentTarget;
var listContainer = currentElement.parentNode;
listContainer.insertBefore(source, currentElement);
source.style.transform = 'rotate(0deg)';
}
function delete_item(event) {
var currentTarget = event.currentTarget;
var grandParentOfDelete = currentTarget.parentNode.parentNode;
grandParentOfDelete.remove();
}
function add_item() {
var item_text_node = document.getElementsByName("add-item-text")[0]
var item_text = item_text_node.value; …Run Code Online (Sandbox Code Playgroud) drag-and-drop ×10
javascript ×5
html5 ×4
html ×3
css ×2
.net ×1
android ×1
angular ×1
angular-cdk ×1
c++ ×1
mvvm ×1
qt ×1
view ×1
wpf ×1