vue引入svg文件及交互,使用svg-pan-zoom插件实现svg图放大缩小等操作

一、引入svg文件

1、若不需要交互,可以用img、iframe、object标签作为图片直接引入。

javascript 复制代码
<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文件中的元素显示隐藏、更改文字内容等操作,则需要作为元素加载到页面中。

javascript 复制代码
<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图像放大、缩小、平移、旋转等方法,用法如下:

javascript 复制代码
// 下载依赖: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, // 显示放大、缩小、重置控制按钮
})

注:关于插件更多内容可查看 https://github.com/bumbu/svg-pan-zoom

相关推荐
CharlesYu019 小时前
前端性能优化的第一性原理,是不断缩短“用户发起意图 → 获得可用结果”之间的时间
前端
平头哥技术团队9 小时前
Day 21 _ 页内锚点_给每段起个 id,目录写 href=_#id_,点一下页面就滚到那一段
前端·html·html5
子兮曰11 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
人民广场吃泡面11 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
中科三方11 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
bug总结11 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言12 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
IT_陈寒12 小时前
Vue的computed属性竟然坑了我一把
前端·人工智能·后端
威斯软科的老司机13 小时前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生
2601_9623824313 小时前
剑指大前端全栈工程师(全2册)主要情节
javascript·实战案例·全栈工程师·剑指大前端·html5+css3