gpt4 book ai didi

javascript - raphaeljs 拖放

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

我正在为我的网络应用程序使用 rapaeljs。我想设置对象的可放置边界。对象可以在可放置区域移动。一旦物体进入可放置区域,该物体就应该没有出路。

最佳答案

Raphael 通过 .drag() 内置了拖放支持。以 element.drag(start, move, up); 的形式使用它,其中 3 个参数是对您编写的分别处理 mousedown、movement 和 mouseup 事件的函数的 3 个函数引用。

注意如何使用 this.oxthis.oy 来存储起始位置以及 dxdy > 用于移动。

<强> The following 实现对框的拖放。盒子总是可以移动,但一旦进入“ jail ”盒子,就无法再移出。当盒子进入 jail 时,颜色立即改变,以向用户表明功能已更改。

这是通过 Math.min() 实现的 Math.max() dxdy添加到当前位置后调整框的位置:

var nowX, nowY, move = function (dx, dy) {
// move will be called with dx and dy
if (this.attr("y") > 60 || this.attr("x") > 60)
this.attr({x: this.ox + dx, y: this.oy + dy});
else {
nowX = Math.min(60, this.ox + dx);
nowY = Math.min(60, this.oy + dy);
nowX = Math.max(0, nowX);
nowY = Math.max(0, nowY);
this.attr({x: nowX, y: nowY });
if (this.attr("fill") != "#000") this.attr({fill: "#000"});
}
}

你也可以让盒子一旦被放入“ jail ”盒子就无法再被拾起。这可以通过测试 move()start() 函数中的位置或使用 c.undrag(f) 来完成在 stop() 函数中。

<强> jsFiddle example

window.onload = function() {
var nowX, nowY, R = Raphael("canvas", 500, 500),
c = R.rect(200, 200, 40, 40).attr({
fill: "hsb(.8, 1, 1)",
stroke: "none",
opacity: .5,
cursor: "move"
}),
j = R.rect(0,0,100,100),
// start, move, and up are the drag functions
start = function () {
// storing original coordinates
this.ox = this.attr("x");
this.oy = this.attr("y");
this.attr({opacity: 1});
if (this.attr("y") < 60 && this.attr("x") < 60)
this.attr({fill: "#000"});
},
move = function (dx, dy) {
// move will be called with dx and dy
if (this.attr("y") > 60 || this.attr("x") > 60)
this.attr({x: this.ox + dx, y: this.oy + dy});
else {
nowX = Math.min(60, this.ox + dx);
nowY = Math.min(60, this.oy + dy);
nowX = Math.max(0, nowX);
nowY = Math.max(0, nowY);
this.attr({x: nowX, y: nowY });
if (this.attr("fill") != "#000") this.attr({fill: "#000"});
}
},
up = function () {
// restoring state
this.attr({opacity: .5});
if (this.attr("y") < 60 && this.attr("x") < 60)
this.attr({fill: "#AEAEAE"});
};
// rstart and rmove are the resize functions;
c.drag(move, start, up);
};​

关于javascript - raphaeljs 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3675519/

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