返回顶部
首页 > 资讯 > 精选 >Vue.js中怎么动态更改svg的相关属性
  • 940
分享到

Vue.js中怎么动态更改svg的相关属性

2023-07-05 05:07:12 940人浏览 薄情痞子
摘要

本篇内容介绍了“vue.js中怎么动态更改svg的相关属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!怎样将一个远程的svg图标资源&qu

本篇内容介绍了“vue.js中怎么动态更改svg的相关属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

怎样将一个远程的svg图标资源"下载"到本地

首页我们可以利用XMLHttpRequest对象来请求对应的svg图标的远程资源链接地址,并监听实现XMLHttpRequest对象的load事件,将返回的资源进行dom对象的转换、string转换为xml。

代码如下:

const xhr = new XMLHttpRequest();      xhr.open('GET', 'https://www.xx.com/img/xxx.svg', true);      xhr.send();            xhr.onreadystatechange = function () {        if (xhr.readyState == 4 && xhr.status == 200) {          console.log(xhr.responseXML, 'xhr.responseXML---------')        }      };      xhr.addEventListener('load', () => {        const resXML = stringToXml(xhr.response);        this.svgDom = resXML.documentElement.clonenode(true);      });

这里的工具函数stringToXml的完整代码如下:

//将字符串转化成dom对象;string转换为xmlfunction stringToXml (xmlString) {  let xmlDoc;  if (typeof xmlString == "string") {    //FF    if (document.implementation.createDocument) {      const parser = new DOMParser();      xmlDoc = parser.parseFromString(xmlString, "text/xml");    } else if (window.ActiveXObject) {      // eslint-disable-next-line no-undef      xmlDoc = new ActiveXObject("Microsoft.XMLDOM");      xmlDoc.async = false;      xmlDoc.loadXML(xmlString);    }  }  else {    xmlDoc = xmlString;  }  return xmlDoc;}

这样就可以获取到远程svg资源对应的dom结构了。

怎样更改svgdom结构里面的相关属性

产品的要求需要能够动态更改对应svg图标的宽、高、颜色值等。要实现这样的功能有以下几个小点:

  • 将svgDom对象转换成Vue的虚拟dom,代码如下:const oSerializer = new XMLSerializer()

  • 根据序列化的对象提供的serializeToString方法将svgDom对象进行字符串化;

通过svgDom对象提供的宽、高属性值,结合正则来遍历svgDom字符串化后的字符串,进行宽高值的替换。代码如下:

let sXML = oSerializer.serializeToString(this.svgDom);sXML = sXML.replace(`width="${this.svgDom.width.baseVal.value}"`, 'width="40"').replace(`height="${this.svgDom.height.baseVal.value}"`, 'height="40"')
  • 根据sXML来截取svg结构表示的字符串里对应的颜色值,并结合is-color这个插件判断是否是一个真正的颜色,是的话,根据想要替换的颜色值进行全局替换就行。代码如下:

let curColor = sXML.split('#')[1].substr(0, 6)      if (!isColor(`#${curColor}`)) {        curColor = sXML.split('#')[1].substr(0, 3)      }      sXML = sXML.replace(new RegExp(`#${curColor}`, "gm"), '#90EE90')
  • 通过Vue实例提供的extend方法创建实例并挂载到某个元素上,代码如下:

const Profile = Vue.extend({          template: "<div id='svgTemplate'>" + sXML + '</div>'        });        // 创建实例,并挂载到元素上        new Profile().$mount('#svgTemplate');

处理前的效果图:

Vue.js中怎么动态更改svg的相关属性

处理后的效果图(将svg宽高由原来的20变为40,将颜色值改为"#90EE90"):

Vue.js中怎么动态更改svg的相关属性

最终完整的代码如下:

testSvg () {      const xhr = new XMLHttpRequest();      xhr.open('GET', 'https://www.xx.com/img/xxx.svg', true);      xhr.send();            xhr.onreadystatechange = function () {        if (xhr.readyState == 4 && xhr.status == 200) {          console.log(xhr.responseXML, 'xhr.responseXML---------')        }      };      xhr.addEventListener('load', () => {        const resXML = stringToXml(xhr.response);        this.svgDom = resXML.documentElement.cloneNode(true);                const oSerializer = new XMLSerializer();        let sXML = oSerializer.serializeToString(this.svgDom);        let curColor = sXML.split('#')[1].substr(0, 6)        if (!isColor(`#${curColor}`)) {          curColor = sXML.split('#')[1].substr(0, 3)        }        sXML = sXML.replace(`width="${this.svgDom.width.baseVal.value}"`, 'width="40"').replace(`height="${this.svgDom.height.baseVal.value}"`, 'height="40"').replace(new RegExp(`#${curColor}`, "gm"), '#90EE90')        const Profile = Vue.extend({          template: "<div id='svgTemplate'>" + sXML + '</div>'        });        // 创建实例,并挂载到元素上        new Profile().$mount('#svgTemplate');      });    },

“Vue.js中怎么动态更改svg的相关属性”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Vue.js中怎么动态更改svg的相关属性

本文链接: https://lsjlt.com/news/349855.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue.js中怎么动态更改svg的相关属性
    本篇内容介绍了“Vue.js中怎么动态更改svg的相关属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!怎样将一个远程的svg图标资源&qu...
    99+
    2023-07-05
  • Vue.js中动态更改svg的相关属性详解
    目录引言怎样将一个远程的svg图标资源"下载"到本地怎样更改svgdom结构里面的相关属性引言  公司项目中有一个关于图标库管理的需求,大致需要在页面...
    99+
    2023-02-23
    Vue.js动态更改svg属性 Vue.js svg
  • Vue.js中怎么动态为img的src属性赋值
    这篇文章将为大家详细讲解有关Vue.js中怎么动态为img的src属性赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需求是这样:ajax获取数据如下{ ...
    99+
    2024-04-02
  • uniapp中怎么动态改变图片的src属性
    随着移动端应用的广泛应用,前端技术的发展已经逐渐从web端向移动端方向转移,适配不同的移动端平台已经成为了开发者们必须考虑的问题。为此,出现了多种移动端框架,在这些框架中,uniapp框架已经逐渐成为了开发者们最为喜爱的一种选择。在unia...
    99+
    2023-05-14
  • Java中怎么实现动态的增删改查属性
    这篇文章将为大家详细讲解有关Java中怎么实现动态的增删改查属性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 JSON 字符串增加额外字段假如我们有这样结构的 JSON:{&nb...
    99+
    2023-06-16
  • css3中背景属性与边框相关的属性是什么
    这篇文章将为大家详细讲解有关css3中背景属性与边框相关的属性是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   1与背景相关的新增属性   backgroun...
    99+
    2024-04-02
  • 怎么在python中动态存取属性
    这篇文章给大家介绍怎么在python中动态存取属性,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮...
    99+
    2023-06-14
  • HTML与CSS中背景相关属性怎么用
    小编给大家分享一下HTML与CSS中背景相关属性怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   一.背景尺寸属性 ...
    99+
    2024-04-02
  • vue怎么动态绑定img的src属性
    本篇内容主要讲解“vue怎么动态绑定img的src属性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么动态绑定img的src属性”吧!动态绑定img的src属性(v-bind)今天遇到一...
    99+
    2023-06-30
  • Vue.js组件中插槽和相关动态组件、异步组件的示例分析
    这篇文章主要为大家展示了“Vue.js组件中插槽和相关动态组件、异步组件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue.js组件中插槽和相关动态...
    99+
    2024-04-02
  • C++11中和动态数组相关的新特性有哪些
    本篇内容介绍了“C++11中和动态数组相关的新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用初始化列表初始化可以像一般的数组一...
    99+
    2023-06-19
  • JavaScript中怎么动态创建div属性和样式
    JavaScript中怎么动态创建div属性和样式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.创建div元素:Javascript代...
    99+
    2024-04-02
  • vue中动态参数与计算属性怎么用
    这篇文章将为大家详细讲解有关vue中动态参数与计算属性怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一,动态参数从 2.6.0 开始,可以用方括号括起来的 JavaScript 表达式作为一个指令的...
    99+
    2023-06-20
  • vue中怎么给对象动态添加属性和值
    vue中怎么给对象动态添加属性和值,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、背景介绍:在vue中请求接口中,一个请求方法可能对应后台两...
    99+
    2024-04-02
  • 详解怎么用php更改文件的时间属性
    PHP 是一种开源的服务器端编程语言,常用于 Web 开发。在 PHP 中,我们可以使用内置函数实现改变文件时间。在 Linux/Unix 系统下,每个文件都有三种时间属性,即访问时间、修改时间和状态改变时间。PHP 中,可以使用 utim...
    99+
    2023-05-14
  • php中的静态属性和静态方法怎么用
    这篇文章主要介绍“php中的静态属性和静态方法怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中的静态属性和静态方法怎么用”文章能帮助大家解决问题。在php中,通过static关键字修饰的...
    99+
    2023-06-26
  • vue中更改数组中属性在页面中不生效怎么办
    这篇文章将为大家详细讲解有关vue中更改数组中属性在页面中不生效怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题描述:使用vue的方法获取了数组数据,获取数据后为...
    99+
    2024-04-02
  • CSS布局中常用的文字排版相关属性是什么
    这篇文章主要介绍了CSS布局中常用的文字排版相关属性是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  ...
    99+
    2024-04-02
  • 怎么使用JS动态合并两个对象的属性
    这篇文章给大家分享的是有关怎么使用JS动态合并两个对象的属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们可以使用扩展操作符(...)将不同的对象合并为一个对象,这也是合并两...
    99+
    2024-04-02
  • Laravel中怎么进行动态的config修改
    本篇内容主要讲解“Laravel中怎么进行动态的config修改”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel中怎么进行动态的config修改”吧!Laravel中的config文...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作