【svg】引入svg(非图标)

目的:如果直接以图片的方式引用svg 不能改变内层svg的属性 ,但是一下都引用方式都不能满足我的需求(svg的大小,内部背景颜色或者线条的颜色根据外部传入的值更改),最后我写了一个npm插件 ✌地址

直接插入页面—— 有各层svg内容并可赋值属性

<body>
    <svg>
        <circle>......</circle>
    </svg>
</body>

css 背景图 ——不可更改各层svg属性

 div {background-image:url("svg文件路径")}

创建标签(动态添加)——可改属性但是还不如直接插入

 mounted () {
        let svg = this.makeSVG('svg');
        let g = this.makeSVG('g');
        var circle = this.makeSVG('circle', { cx: 50, cy: 50, r: 10, stroke: 'black', 'stroke-width': 2, fill: 'red' });
        let terget = document.getElementById('s');
        g.appendChild(circle);
        svg.appendChild(g);
        terget.appendChild(svg);

    },
 methods: {
        makeSVG (tag, attrs) {
            const ns = 'http://www.w3.org/2000/svg';
            let el = document.createElementNS(ns, tag);
            for (let k in attrs) {
                el.setAttribute(k, attrs[k]);
            }
            return el;
        }
    }

在这里插入图片描述
在这里插入图片描述
textContent属性可以获取和设置text元素文本:

/ SVG
<text id="text" x="25" y="25" font-size="16" style="fill:rgb(0,0,0);">foo</text>;
 
// JS
<script>
    var text = document.getElementById( "text" );
    console.log( text.textContent ); // foo
    text.textContent = "Hello world!"; // 重新设置文本
</script>

获取元素高宽和坐标:getBBox方法可以获取所有元素的高宽和坐标:

// SVG
<text id="text" x="25" y="25" font-size="16" style="fill:rgb(0,0,0);">foo</text>;
 
// JS
<script>
    var text = document.getElementById( "text" );
    console.log( text.getBBox() ); // {height: 16, width: 32, y: 11, x: 25} 
</script>

SVG也可以像HTML那样为元素添加自定义事件。
使用on + 事件名属性监听:

// SVG
<text id="text" x="25" y="25" font-size="16" style="fill:rgb(0,0,0);">foo</text>;
 
// JS
<script>
    var text = document.getElementById( "text" );
    // 点击文本时弹出其内容
    text.onclick = function() {
        alert( this.textContent );
    };
</script>

也可以使用element.addEventListener方法监听:

// SVG
<text id="text" x="25" y="25" font-size="16" style="fill:rgb(0,0,0);">foo</text>;
 
// JS
<script>
    var text = document.getElementById( "text" );
    // 点击文本时弹出其内容
    // 事件名前面不带on
    text.addEventListener( 'click', function() {
        alert( this.textContent );
    } );
</script>

两种方法有什么不同?on +事件名属性只能为同一个事件添加一个处理方法,再对这个属性进行设置时会覆盖掉上一个方法,而element.addEventListener多次使用也不会覆盖上一个,而是从原来的事件上叠加

不常用(没弄明白)

object标签

<object type="image.svg+xml data="svg文件路径"></object>

在这里插入图片描述

embed标签 效果同object 不知原因

<embed type="image/svg+xml" src="svg文件路径"></embed>

iframe标签 效果同object 不知原因

<iframe src="svg文件路径"></iframe>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值