svg绘制的一个路径 如何加上一个箭头 也沿着这个路径运动哎
<template>
<div class="box">
<svg
id="one"
width="100%"
height="100%"
xmlns="http://www.w3.org/2000/svg"
>
<g>
<path
id="svg_3"
width="200"
height="200"
d="m200.25019,1199.72662l450.25028,-180.27314l409.99998,180l-200,-160.49993"
fill-opacity="0"
stroke-opacity="null"
stroke-width="100.5"
stroke="#224464"
fill=""
/>
</g>
</svg>
</div>
</template>
<script>
import anime from "animejs/lib/anime.es.js";
export default {
mounted() {
let path_one = document.querySelectorAll("#one path");
for (let i = 0; i < path_one.length; i++) {
console.log(path_one, i);
anime({
targets: path_one[i],
delay: i * 100,
strokeDashoffset: [anime.setDashoffset, 0],
easing: "easeInOutSine",
duration: 1000,
loop: 1,
});
}
},
};
</script>
<style lang="scss" scoped>
.overall {
background: #f0f0f0;
}
svg {
position: absolute;
left: 0;
top: 0;
}
path {
stroke-width: 30px;
}
</style>
以下回答来自ChatGPT,
你可以在路径的终点处添加一个箭头,可以通过在路径的最后一个点上添加一个三角形来实现。具体步骤如下:
在路径的最后一个点上添加一个三角形,可以使用SVG的polygon元素来创建一个三角形。
将三角形的fill属性设置为与路径相同的颜色,以使其看起来像是路径的一部分。
将三角形的transform属性设置为与路径的transform属性相同,以使其与路径保持一致。
将三角形的旋转角度设置为路径的方向角度,可以使用SVG的getTotalLength()和getPointAtLength()方法来获取路径的方向角度。
下面是一个示例代码,可以在路径的终点处添加一个箭头:
<template>
<div class="box">
<svg
id="one"
width="100%"
height="100%"
xmlns="http://www.w3.org/2000/svg"
>
<g>
<path
id="svg_3"
width="200"
height="200"
d="m200.25019,1199.72662l450.25028,-180.27314l409.99998,180l-200,-160.49993"
fill-opacity="0"
stroke-opacity="null"
stroke-width="100.5"
stroke="#224464"
fill=""
/>
<polygon
id="arrow"
points="0,0 20,10 0,20"
fill="#224464"
transform="translate(1059.25, 1019.45348) rotate(45)"
/>
</g>
</svg>
</div>
</template>
<script>
import anime from "animejs/lib/anime.es.js";
export default {
mounted() {
let path_one = document.querySelectorAll("#one path");
for (let i = 0; i < path_one.length; i++) {
console.log(path_one, i);
anime({
targets: path_one[i],
delay: i * 100,
strokeDashoffset: [anime.setDashoffset, 0],
easing: "easeInOutSine",
duration: 1000,
loop: 1,
});
}
let arrow = document.querySelector("#arrow");
let path = document.querySelector("#svg_3");
let pathLength = path.getTotalLength();
let endPoint = path.getPointAtLength(pathLength);
let prevPoint = path.getPointAtLength(pathLength - 1);
let angle = Math.atan2(endPoint.y - prevPoint.y, endPoint.x - prevPoint.x);
let degrees = angle * (180 / Math.PI);
arrow.setAttribute(
"transform",
`translate(${endPoint.x}, ${endPoint.y}) rotate(${degrees})`
);
},
};
</script>
<style lang="scss" scoped>
.overall {
background: #f0f0f0;
}
svg {
position: absolute;
left: 0;
top: 0;
}
path {
stroke-width: 30px;
}
</style>
在这个示例中,我们在路径的最后一个点上添加了一个三角形,然后使用getTotalLength()和getPointAtLength()方法获取路径的方向角度,并将三角形的旋转角度设置为路径的方向角度。
参考代码编写思路:使用SVG的marker元素来添加箭头,并使用marker-start,marker-mid和marker-end属性来引用这些箭头
<svg>
<path d="M10 10 L90 90" stroke="black" stroke-width="2" fill="none" />
<marker id="arrow" markerWidth="10" markerHeight="10" refX="15" refY="5" orient="auto">
<path d="M10,10 L10,10 L15,5 L20,10 L20,10 Z" fill="black" />
</marker>
<path d="M10 10 L90 90" marker-start="url(#arrow)" marker-mid="url(#arrow)" marker-end="url(#arrow)" stroke="black" stroke-width="2" fill="none" />
</svg>