一、引入svg文件
1、若不需要交互,可以用img、iframe、object标签作为图片直接引入。
<img src="images/year.svg" style="width: 100%" />
或
<iframe src="images/year.svg" frameborder="0" style="width: 100%; height: 100%;"></iframe>
或
<object data="images/year.svg" style="width: 100%; height: 100%;"></object>
2、若需要与其交互,如设置svg文件中的元素显示隐藏、更改文字内容等操作,则需要作为元素加载到页面中。
<template>
<div class="box">
<div id="svgElement" v-html="svgContent"></div>
</div>
</template>
<script>
import axios from 'axios';
export default {
data () {
return {
svgContent: ''
}
},
mounted () {
this.initSvgEle();
},
methods: {
// 初始化svg底图
initSvgEle () {
axios.get('images/year.svg').then(res => {
if (res.status === 200 && res.data) {
// 作为html渲染到页面中
this.svgContent = res.data;
// 设置某个元素隐藏,若有其他操作也可通过类似的方法获取到元素进行操作
this.$nextTick(() => {
document.querySelector('#defaultEle').style.display = 'none';
})
}
})
}
}
}
</script>
<style scoped lang="less">
.box {
height: 100%;
width: 100%;
/deep/#svgElement {
width: 100%;
height: 100%;
& > svg {
width: 100%;
height: 100%;
}
}
}
</style>
注:一般svg图中的元素没有进行id绑定,可通过专业的工具进行元素分组和id命名。
二、svg-pan-zoom插件
该插件提供了svg图像放大、缩小、平移、旋转等方法,以及平移缩放事件的监听,用法如下:
// 下载依赖:npm i svg-pan-zoom --save
import svgPanZoom from 'svg-pan-zoom';
svgPanZoom(document.querySelector("#svgElement > svg"), {
zoomEnabled: true, // 允许缩放
panEnabled: true, // 允许平移
maxZoom: 5, // 最大缩放级别
minZoom: 1, // 最小缩放级别
dblClickZoomEnabled: true, // 允许双击放大
controlIconsEnabled: true, // 显示放大、缩小、重置控制按钮,
onZoom: () => {
console.log('缩放触发');
},
onPan: () => {
console.log('平移触发');
}
})
注:关于插件更多内容可查看 https://github.com/bumbu/svg-pan-zoom