在 RaphaelJS 中拖放
Drag and drop in RaphaelJS
我有以下 fiddle:
http://jsfiddle.net/zugzq7vv/
我想做的是能够将输入框左边的数字1拖到正方形的中心,使正方形变成黑色,数字变成白色。
如何使用 RaphaelJS 2.1 实现这一点?
JS代码:
// Creates canvas 320 × 200 at 10, 50
var paper = Raphael(document.getElementById("papercanvas"), 320, 200);
var circle = paper.rect(50, 40, 50, 50);
// Sets the fill attribute of the circle to red (#f00)
circle.attr("fill", "#f00");
// Sets the stroke attribute of the circle to white
circle.attr("stroke", "#fff");
var t = paper.text(75, 65,""); //I want this empty string to be a text I drag
和简单的 HTML:
1<input id="teste" disabled></input>
<div id="papercanvas"></div>
我知道拖放的界面,但我似乎无法将其应用于个人号码。
您不能使 non-svg/Raphael 元素使用 Raphael.js 进行拖动,即输入元素之前的字符串“1”。所以为此你需要有 Raphael-text 元素。
即使Raphael支持onDragOver功能,也不能完全达到你的要求。就像,它可以触发,当一个元素在它上面时,但它没有像 onOut 这样的任何 api,所以你可以恢复 colors/state 回来。
因此,正如我在其他 中所解释的那样,我们需要跟踪坐标,并基于此我们必须在 onDragComplete 方法中采取行动。
这是您要求的工作 fiddle。但是,随着它的扩展,您需要向其中添加更多逻辑来处理。
var text = paper.text(10, 10, "1");
text.attr('cursor','pointer');
text.attr('font-size', '20px');
text.drag(onDragMove, onDragStart, onDragComplete);
function onDragStart(){
this.ox = this.attr('x');
this.oy = this.attr('y');
}
function onDragMove(dx,dy){
this.attr({x: this.ox + dx, y: this.oy + dy });
}
function onDragComplete(){
if((this.attr('x') > 20 && (this.attr('x') < 70)) && (this.attr('y') < 50)) {
this.attr('fill', 'white');
rect.attr('fill', 'black');
} else {
this.attr('fill', 'black');
rect.attr('fill', 'red');
}
};
我有以下 fiddle: http://jsfiddle.net/zugzq7vv/
我想做的是能够将输入框左边的数字1拖到正方形的中心,使正方形变成黑色,数字变成白色。
如何使用 RaphaelJS 2.1 实现这一点?
JS代码:
// Creates canvas 320 × 200 at 10, 50
var paper = Raphael(document.getElementById("papercanvas"), 320, 200);
var circle = paper.rect(50, 40, 50, 50);
// Sets the fill attribute of the circle to red (#f00)
circle.attr("fill", "#f00");
// Sets the stroke attribute of the circle to white
circle.attr("stroke", "#fff");
var t = paper.text(75, 65,""); //I want this empty string to be a text I drag
和简单的 HTML:
1<input id="teste" disabled></input>
<div id="papercanvas"></div>
我知道拖放的界面,但我似乎无法将其应用于个人号码。
您不能使 non-svg/Raphael 元素使用 Raphael.js 进行拖动,即输入元素之前的字符串“1”。所以为此你需要有 Raphael-text 元素。
即使Raphael支持onDragOver功能,也不能完全达到你的要求。就像,它可以触发,当一个元素在它上面时,但它没有像 onOut 这样的任何 api,所以你可以恢复 colors/state 回来。
因此,正如我在其他
这是您要求的工作 fiddle。但是,随着它的扩展,您需要向其中添加更多逻辑来处理。
var text = paper.text(10, 10, "1");
text.attr('cursor','pointer');
text.attr('font-size', '20px');
text.drag(onDragMove, onDragStart, onDragComplete);
function onDragStart(){
this.ox = this.attr('x');
this.oy = this.attr('y');
}
function onDragMove(dx,dy){
this.attr({x: this.ox + dx, y: this.oy + dy });
}
function onDragComplete(){
if((this.attr('x') > 20 && (this.attr('x') < 70)) && (this.attr('y') < 50)) {
this.attr('fill', 'white');
rect.attr('fill', 'black');
} else {
this.attr('fill', 'black');
rect.attr('fill', 'red');
}
};