vue svg弧线路线动画组件

先看效果

在这里插入图片描述

然后直接上代码

组件publicSvg.vue

<template>
	<svg style="background:rgba(0,0,0,0.1)" :width="svgObject.endX" :height="svgObject.endY"
		xmlns="http://www.w3.org/2000/svg">
		<path :d="pathD" fill="none" class="svg-path-flow">
		</path>
	</svg>
</template>

<script>
	export default {
		name: "PublicSvg",
		components: {},
		props: {
			svgObject: {
				type: Object,
				default: null
			}
		},
		computed: {
			controlend() {
				let x1 = this.svgObject.startX;
				let y1 = this.svgObject.startY;
				let x2 = this.svgObject.endX;
				let y2 = this.svgObject.endY;
				let PI = Math.PI;
				console.log(x2)
				console.log(y2)
				let angle = this.svgObject.angle;
				// 两点间的x轴夹角弧度
				let xAngle = Math.atan2((y2 - y1), (x2 - x1));
				// 转为角度
				xAngle = 360 * xAngle / (2 * PI);
				// 两点间的长度
				let L = Math.sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1));
				// 计算等腰三角形斜边长度
				let L2 = L / 2 / Math.cos(angle * 2 * PI / 360);
				// 求第一个顶点坐标,位于下边
				let val1 = {};
				// 求第二个顶点坐标,位于上边
				let val2 = {};
				val1['x'] = x1 + Math.round(L2 * Math.cos((xAngle + angle) * 2 * PI / 360));
				val1['y'] = y1 + Math.round(L2 * Math.sin((xAngle + angle) * 2 * PI / 360));
				val2['x'] = x1 + Math.round(L2 * Math.cos((xAngle - angle) * 2 * PI / 360));
				val2['y'] = y1 + Math.round(L2 * Math.sin((xAngle - angle) * 2 * PI / 360));
				return {
					upPoint: val2, // 上方弧线
					downPoint: val1 // 下方弧线
				};
			},
			pathD() {
				return `M${this.svgObject.startX} ${this.svgObject.startY} Q${this.controlend.upPoint.x} ${this.controlend.upPoint.y} ${this.svgObject.endX} ${this.svgObject.endY}`;
			}
		},
		data() {
			return {};
		},
		created() {
			console.log(this.svgObject)
		},
		methods: {}
	}
</script>

<style lang="less" scoped>
	// 流光效果
	@keyframes path-flow {
		0% {
			stroke-dashoffset: 200;
			opacity: 0.3;
		}

		50% {
			stroke-dashoffset: 100;
			opacity: 0.8;
		}

		100% {
			stroke-dashoffset: 0;
			opacity: 0.3;
		}
	}

	.svg-path-flow {
		opacity: 0;
		stroke-width: 10px;
		stroke: #0055ff;
		stroke-dasharray: 100;
		stroke-dashoffset: 0;
		animation: path-flow 2s linear 2s infinite;
	}
</style>

然后是使用方法

<public-svg :svgObject="svgObject" />
import PublicSvg from "@/components/PublicSvg/PublicSvg.vue";
export default {
	components: {
		PublicSvg
	},
	data() {
		return {
			svgObject:{
				startX: 50,  //起始点X坐标
				startY: 50,  //起始点Y坐标
				endX: 500,  //结束点X坐标
				endY: 600,  //结束点Y坐标
				angle: 30  //弧线角度
			}
		};
	}
};

如图所示

在这里插入图片描述

弧线样式可以在style中自定义

参考文章:SVG path 标签根据两点和角度绘制弧线

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种流行的JavaScript框架,它可以方便地创建可交互的用户界面。在Vue中,使用SVG路径动画可以实现各种有趣的效果。 首先,要在Vue项目中使用SVG路径动画,需要安装vue-svg路径动画扩展。可以通过运行`npm install vue-svg-path-animation`命令来安装。 一旦安装完成,就可以在Vue组件中使用SVG路径动画了。首先,需要在Vue组件中引入`vue-svg-path-animation`模块。然后,可以在组件的`data`选项中创建一个属性来存储SVG路径。这个属性可以在`<svg>`元素的`d`属性中使用。 接下来,可以使用Vue的生命周期钩子函数来触发SVG路径动画。例如,在`mounted`钩子函数中可以使用`setPath`方法来更新SVG路径属性,从而触发动画。可以在该钩子函数中设置一定的延迟,以便动画效果更加明显。 除了在`mounted`钩子函数中触发动画,还可以根据需要在其他钩子函数中实现动画效果。例如,在`created`钩子函数中初始化SVG路径属性,然后在`beforeDestroy`钩子函数中清除SVG路径属性,以停止动画。 在Vue组件中使用SVG路径动画可以为用户提供一种更加丰富和吸引人的交互体验。通过使用Vue的生命周期钩子函数和`vue-svg-path-animation`扩展,可以轻松地实现各种有趣的SVG路径动画效果。这不仅可以使用户界面更加生动,还可以提高用户对网站或应用程序的参与度和满意度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值