2
我已經能夠使用這個代碼拉斐爾弧動畫漸變,而不是按照弧形路徑
var archtype = Raphael("canvas", 200, 100);
archtype.customAttributes.arc = function (xloc, yloc, value, total, R) {
var alpha = 360/total * value,
a = (90 - alpha) * Math.PI/180,
x = xloc + R * Math.cos(a),
y = yloc - R * Math.sin(a),
path;
if (total == value) {
path = [
["M", xloc, yloc - R],
["A", R, R, 0, 1, 1, xloc - 0.01, yloc - R]
];
} else {
path = [
["M", xloc, yloc - R],
["A", R, R, 0, +(alpha > 180), 1, x, y]
];
}
return {
path: path
};
};
//make an arc at 50,50 with a radius of 30 that grows from 0 to 40 of 100 with a bounce
var my_arc = archtype.path().attr({
"stroke": "#f00",
"stroke-width": 14,
arc: [50, 50, 0, 100, 30]
});
my_arc.animate({
arc: [50, 50, 40, 100, 30]
}, 1500, "bounce");
使用此代碼唯一的問題是,我需要成功的動畫沿着圓弧的路徑弧在頁面上有多個畫布元素,我不想在同一頁面上定義archtype.customAttributes.arc
10次。
爲了解決這個問題,我想我可能只是做到這一點...
function arc (xloc, yloc, value, total, R) {
var alpha = 360/total * value,
a = (90 - alpha) * Math.PI/180,
x = xloc + R * Math.cos(a),
y = yloc - R * Math.sin(a),
path;
if (total == value) {
path = [
["M", xloc, yloc - R],
["A", R, R, 0, 1, 1, xloc - 0.01, yloc - R]
];
} else {
path = [
["M", xloc, yloc - R],
["A", R, R, 0, +(alpha > 180), 1, x, y]
];
}
return path;
}
var path = arc(50, 50, 0, 100, 30);
var my_arc = archtype.path().attr({
"stroke": "#f00",
"stroke-width": 14,
path:path
});
var path = arc(50, 50, 40, 100, 30);
my_arc.animate({
path:path
}, 1500, "bounce");
然而,當我嘗試做這樣的圓弧終點帶給新端點最直的路引起扭曲變形效果。
任何人都可以解釋爲什麼我的例子這樣做,並建議一個是我爲了克服這個問題,而無需聲明我需要在頁面上的每個畫布的自定義屬性?假設arc: [50, 50, 0, 100, 30]
與path: path
一樣嗎?
感謝您的幫助。
有同樣的問題 - 有沒有人解決了嗎? –