gpt4 book ai didi

javascript - 拉斐尔对 Angular 变换对象和无限 setIntervals

转载 作者:行者123 更新时间:2023-11-28 09:08:51 26 4
gpt4 key购买 nike

我正在制作一个小动画,用户拖动一个圆圈,然后圆圈返回到起点。我想出了一个办法让圆圈回到起点。唯一的问题是它在返回之前会撞到框架的一侧。它是否可以直接返回(沿着形状和起点之间绘制的线的路径)。

另一个问题是我的 setInterval 不想停止。如果您尝试第二次拉动它,它会在您释放鼠标之前将其拉回。每次之后似乎也加快了速度。我尝试过使用带有计时器的 while 循环,但结果不太好。这可以修复吗?

    var paper = Raphael(0, 0, 320, 200);
//var path = paper.path("M10 10L40 40").attr({stoke:'#000000'});
//var pathArray = path.attr("path");
var circle = paper.circle(50, 50, 20);
var newX;
var newY;
circle.attr("fill", "#f00");
circle.attr("stroke", "#fff");



var start = function () {
this.attr({cx: 50, cy: 50});
this.cx = this.attr("cx"),
this.cy = this.attr("cy");
},
move = function (dx, dy) {
var X = this.cx + dx,
Y = this.cy + dy;
this.attr({cx: X, cy: Y});
},

up = function () {
setInterval(function () {
if(circle.attr('cx') > 50){
circle.attr({cx : (circle.attr('cx') - 1)});
} else if (circle.attr('cx') < 50){
circle.attr({cx : (circle.attr('cx') + 1)});
}

if(circle.attr('cy') > 50){
circle.attr({cy : (circle.attr('cy') - 1)});
} else if (circle.attr('cy') < 50){
circle.attr({cy : (circle.attr('cy') + 1)});
}
path.attr({path: pathArray});
},2);
};

circle.drag(移动、开始、向上);

这是 Jfiddle:http://jsfiddle.net/Uznp2/

非常感谢:D

最佳答案

我将“向上”函数修改为下面的

up = function () {
//starting x, y of circle to go back to
var interval = 1000;
var startingPointX = 50;
var startingPointY = 50;
var centerX = this.getBBox().x + (this.attr("r")/2);
var centerY = this.getBBox().y + (this.attr("r")/2);
var transX = (centerX - startingPointX) * -1;
var transY = (centerY - startingPointY) * -1;
this.animate({transform: "...T"+transX+", "+transY}, interval);
};

“启动”函数如下:

var start = function () {
this.cx = this.attr("cx"),
this.cy = this.attr("cy");
}

这是您正在寻找的行为吗?抱歉,如果我误解了这个问题。

关于javascript - 拉斐尔对 Angular 变换对象和无限 setIntervals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555763/

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