gpt4 book ai didi

javascript - 移动拉斐尔矢量图形中三 Angular 形的位置

转载 作者:行者123 更新时间:2023-11-30 05:51:51 25 4
gpt4 key购买 nike

我正在使用 Raphael.js 创建一个“播放”按钮图标。但是,三 Angular 形的位置太靠近圆的边缘。在鼠标悬停时,我增加了笔划宽度 - 问题是三 Angular 形实际上位于圆圈之外,这根本不是我想要的。 HTML 只是一个带有 id 的 div:

<html>
<head>
</head>
<body>
<div id="playB"></div>
</body>
</html>

javascript 相当长,所以 here is the jsfiddle

在这种情况下,“移动”SVG 路径的最简单方法是什么?即 - 从右边开始,从顶部开始。我尝试过各种方法,但除了改变图标的​​大小——将路径的每个数字乘以 x 之外,我根本无法操作图标。在这种情况下,移动图标的特定元素。

最佳答案

您需要拆分路径以调整三 Angular 形的位置。通过找出路径中第二个“M”的位置,我能够通过肉眼做到这一点:

var playB = Raphael('playB', 200, 200);
var circle = playB.path("M64,5.864C31.892,5.864,5.864,31.892,5.864,64c0,32.108,26.028,58.136,58.136,58.136c32.108,0,58.136-26.028,58.136-58.136C122.136,31.892,96.108,5.864,64,5.864z");
var triangle = playB.path("M26.736,102.728L97.264,62L26.736,21.272V102.728z");

然后你可以把三 Angular 形移过去:

triangle.attr("transform", "T15,0");

要保持属性和动画完整,将两者添加到 Raphael 集中:

var playBP = playB.set();
playBP.push(circle, triangle);
playBP.attr({
'stroke-width': 5,
'stroke': "#000",
'fill': "#fff",
'opacity': 1
});

然后你只需要一个小的改变:将鼠标悬停命令中的“this”更改为“playBP”。这似乎是多余的,但“this”指的是鼠标悬停的单个元素,而不是集合。

var speed = 5;

playBP.mouseover(function(){
playBP.animate({
'stroke-width': 10,
'stroke': "#fff",
'fill': "#000",
'opacity': .9
}, 1000, 'elastic');

});
playBP.mouseout(function(){
playBP.stop().animate({
'stroke-width': 5,
'stroke': "#000",
'fill': "#fff",
'opacity': 1
}, speed*4, 'elastic');

});

jsFiddle updated

如果您只想修复路径,可以使用 Raphael.mapPath() 函数来获取调整后的三 Angular 形 x/y,如下所示:

console.log(Raphael.mapPath(triangle.attr("path"), triangle.matrix));

关于javascript - 移动拉斐尔矢量图形中三 Angular 形的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242237/

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