gpt4 book ai didi

javascript - html 拖放 setDragImage 在第一次拖动时不会设置重影图像

转载 作者:行者123 更新时间:2023-12-03 22:29:14 34 4
gpt4 key购买 nike

我正在尝试创建一个拖放菜单,用户可以在其中将图像缩略图从 div 拖动到 Canvas 。

问题是源 div 使用 Sprite 来显示其背景缩略图,因此我必须使用 setDragImage 来允许在拖动 div 时显示图像。

我可以成功地将 div 拖到 Canvas 上并很好地放置图像,但是我的问题是,在拖动时,直到第二次拖动 div 时才会显示重影图像。

我使用之前答案中的代码:[ HTML5 Drag and Drop events and setDragImage browser support

这是我对此代码稍作修改的版本:

var isIE =  (typeof document.createElement("span").dragDrop === "function");


$.fn.customDragImage = function(options) {
var offsetX = 0,
offsetY = 0;

var createDragImage = function($node, x, y) {
var $img = $(options.createDragImage($node));
icon = "icon" + window.draggedimgsrc;
offsetX = window[icon][2] / 2;
offsetY = window[icon][3] / 2;
$img.css({
"top": Math.max(0, y-offsetY)+"px",
"left": Math.max(0, x-offsetX)+"px",
"position": "absolute",
"pointerEvents": "none"
}).appendTo(document.body);

setTimeout(function() {
$img.remove();
});

return $img[0];
};

if (isIE) {
$(this).on("mousedown", function(e) {
var originalEvent = e.originalEvent,
node = createDragImage($(this), originalEvent.pageX, originalEvent.pageY);
node.dragDrop();
});
}

$(this).on("dragstart", function(e) {
var originalEvent = e.originalEvent,
dt = originalEvent.dataTransfer;
if (typeof dt.setDragImage === "function") {
node = createDragImage($(this), originalEvent.pageX, originalEvent.pageY);
console.log("node="+node);
dt.setDragImage(node, offsetX, offsetY);
}
});

return this;

};

$("[draggable='true']").customDragImage({
createDragImage: function($node) {
//init icon [0] = icon filename | [1] = icon set | [2] = icon width | [3] = icon height
icon = "icon" + window.draggedimgsrc;
window.draggedimgset = window[icon][1];
image="/boards/markers/soccerm/set" + window[icon][1] + "/" + window[icon][0] + ".png";
return $node.clone().css("width", window[icon][2]).css("height", window[icon][3]).css("background", "transparent url(" + image + ") no-repeat center"); }
}).on("dragstart", function(e) {
e.originalEvent.dataTransfer.setData("Text", "Foo");
});

奇怪的是,当我在 $node.clone() 上弹出边框时,当我第一次拖动时它就被设置了,它似乎没有将图像放在那里。

我还输入了手动宽度和高度,因此我知道它不是图像的大小。

我在菜单出现之前预加载图像。

有什么想法吗?

最佳答案

所以这已经很旧了,但我也一直在努力解决这个问题。我发现问题是我在 Dragstart 事件中创建了重影图像,我看到您也在这样做。

因此,当您创建自定义重影图像时,拖动就已经开始,这意味着在您开始新的拖动之前,它是不可见的。

所以尝试在dragstart之外调用createDragImage。为我工作。

关于javascript - html 拖放 setDragImage 在第一次拖动时不会设置重影图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30887707/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com