JavaScript/jQuery在两个iframe之间拖放元素
JavaScript/jQuery drag and drop element between two iframes
我有一个页面,里面有两个并排的iframe,都来自同一个域。我想把一个元素从一个iframe的特定拖放区域(例如表)拖放到另一个ifame的特定拖放区(例如列表)。我检查了stackoverflow和其他地方的所有相关问题,但我找不到合适的解决方案。我在jQueryUIdraggable中尝试过,但问题是返回的draggable元素包含在iframe中。我无法将其拖出iframe边界。因此,我的下一个想法是在顶部(父窗口)创建可拖动元素,但我想我必须以某种方式从iframe上的dragstart事件触发父窗口上的拖动事件。但是,当我将鼠标悬停在放置框上的适当元素上时,我将如何检测放置事件?
哦,如果这还不够难的话,我也想让它在IE8上运行:)但就目前而言,让我们只说我会为IE8找到一个不涉及拖放的后备解决方案。
您可以通过将鼠标消息从iframe发送到父对象,并在父对象中进行拖动来模拟拖动。这是一个代码笔,显示将列表项从一个帧拖动到另一个帧:http://codepen.io/brenzy/details/zxMZmO/
由于SO想要一些代码,下面是dragHandler与父级的对话:
$("li").mousedown(function (event) {
dragElement = $(this);
if(event.stopPropagation) event.stopPropagation();
if(event.preventDefault) event.preventDefault();
event.cancelBubble=true;
event.returnValue=false;
return false;
});
$(document).mousemove(function (event) {
if (dragElement) {
if (!dragStarted) {
// tell the parent to start dragging the item
parent.postMessage({
action: "dragStart", frame: myId,
itemText: dragElement.text(), itemId: dragElement.attr('id'),
offset: {left: event.pageX, top: event.pageY}
}, '*');
dragStarted = true;
} else {
parent.postMessage({action: "dragMove", frame: myId,
offset: {left: event.pageX, top: event.pageY}}, '*');
}
}
});
$(document).mouseup(function (event) {
if (dragStarted) {
parent.postMessage({
action: "cancelDrag", frame: myId,
itemText: dragElement.text(), itemId: dragElement.attr('id'),
offset: {left: event.pageX, top: event.pageY}
}, '*');
}
dragStarted = false;
dragElement = null;
});
注意:这只适用于Chrome浏览器,但我确信你可以在其他浏览器中使用它。
我不会为您编写完整的代码,因为其中涉及到很多代码。但我会给你一些基础知识。它被称为消息元素。您可以将消息元素传递给带有表的框架中的父窗口。然后将另一个消息元素从父窗口传递给具有列表的子窗口。
不幸的是,我在制作中唯一的亮点是你必须登录才能查看的网站。而且我的游乐场服务器对外部世界是看不到的。否则,我会给你看一个工作示例,让你从我那里偷代码,或者至少对它的工作原理有个好主意。
看看你是否将下面列出的两组代码放在两个文件中,如果你能让它一起工作,
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
window.onload = function () {
var iframeWin = document.getElementById("da-iframe").contentWindow,
form = document.getElementById("the-form"),
myMessage = document.getElementById("my-message");
myMessage.select();
form.onsubmit = function () {
iframeWin.postMessage(myMessage.value, "http://localhost/payground/");
return false;
};
};
</script>
</head>
<body>
<form id="the-form" action="/">
<input type="text" id="my-message" value="Your message">
<input type="submit" value="postMessage">
</form>
<iframe id="da-iframe" src="frame.php"></iframe>
</body>
</html>
下一位应该放在名为frame.php 的同一目录中
<html><head>
<script>
function displayMessage (evt) {
var message;
if (evt.origin !== "http://localhost") {
message = "You are not worthy "+evt.origin;
}
else {
message = "I got " + evt.data + " from " + evt.origin;
}
document.getElementById("received-message").innerHTML = message;
}
if (window.addEventListener) {
// For standards-compliant web browsers
window.addEventListener("message", displayMessage, false);
}
else {
window.attachEvent("onmessage", displayMessage);
}
</script>
</head>
<body>
<div id="received-message">I heard nothing yet</div>
</body>
</html>
我希望这就足够了,你可以弄清楚你想做什么的细节。
- JQuery合并了keyup和focusout两个函数
- 如何在两个不同的iframe HTML之间进行通信
- JavaScript/jQuery在两个iframe之间拖放元素
- 如何使用jquery或vanillajavascript从iframe中获取两个脚本src
- 从iframe中选择具有相同类名的两个DIV中的第二个
- 单击即可在两个网页之间更改两个iframe的相同内容
- 带有两个选择框的动态页面,iframe和jQuery(不带PHP)
- 使用javascript或iframe同步两个按钮
- 获取两个下拉菜单以在同一iframe中显示数据
- 一次加载两个HTML文档(从字符串加载iframe内容)
- 两个窗口或选项卡之间的跨文档消息传递,而不是iframe
- 获取两个值之间的YouTube链接并替换为iframe
- 我有两个iframe在同一页面上,但它加载在不同的时间持续时间
- 为两个iframe创建公共卷轴
- 两个Javascript无法创建两个iframe,只有最后一个Javascript创建iframe
- 我可以同步两个iframe的滚动条吗
- 两个iframe正在通信:SecurityError
- 如何使用iframe API同时播放两个Youtube视频
- 页面上两个位置的相同 iframe
- 一键刷新两个iframe