SVGJS操作

svgjs用于操作 SVG 和动画的轻量级库。

官网 SVG.js v3.2 |家 (svgjs.dev)

效果

代码如下

<template>
  <h3>测试操作已有SVG</h3>
  <button @click="changeText()">利用ID定位</button>
  <button @click="changeChild()">changeText</button>
  
  <br/>
  <div id="svgdiv">
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="500"
      height="300"> 
      <title>编组 8</title>
    <desc>Created with Sketch.</desc>
    <defs>
        <linearGradient x1="0%" y1="55.1934265%" x2="100%" y2="53.8302813%" id="linearGradient-1">
            <stop stop-color="#A5C4D6" offset="0%"></stop>
            <stop stop-color="#C2DEEE" offset="54.9605389%"></stop>
            <stop stop-color="#A6C4D7" offset="100%"></stop>
        </linearGradient>
        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-2">
            <stop stop-color="#12BCFF" offset="0%"></stop>
            <stop stop-color="#02FFF5" stop-opacity="0" offset="100%"></stop>
        </linearGradient>
        <linearGradient x1="50%" y1="15.5856635%" x2="50.9111047%" y2="67.3949442%" id="linearGradient-3">
            <stop stop-color="#27D0F9" stop-opacity="0" offset="0%"></stop>
            <stop stop-color="#FFFFFF" stop-opacity="0.256482111" offset="49.4772045%"></stop>
            <stop stop-color="#27CFFB" stop-opacity="0.657014266" offset="100%"></stop>
        </linearGradient>
        <polygon id="path-4" points="0.00292682927 0.0410609756 39.9590244 0.0410609756 39.9590244 40.0000488 0.00292682927 40.0000488"></polygon>
        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-6">
            <stop stop-color="#12BCFF" offset="0%"></stop>
            <stop stop-color="#0160E8" offset="100%"></stop>
        </linearGradient>
        <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-7">
            <stop stop-color="#12BCFF" offset="0%"></stop>
            <stop stop-color="#0160E8" offset="100%"></stop>
        </linearGradient>
    </defs>
      <rect width="20" height="20" x="0" y="0" fill="#ff0066"></rect>
      <rect width="20" height="20" x="20" y="20" fill="#ff0066"></rect>
      <rect width="20" height="20" fill="#ff0066" x="40" y="0"></rect>
      <rect width="20" height="20" fill="#ff0066" x="0" y="40"></rect>
      <circle id="circle" r="10" cx="50" cy="50" fill="#ff0066"></circle>
      <text x="100" y="106"><tspan dy="0" x="10" id="textdiv">Hello SVG</tspan></text>
      <g>
        <path d="M55.875,16.5 C56.0821068,16.5 56.25,16.6678932 56.25,16.875 L56.25,25.875 C56.25,26.0821068 56.0821068,26.25 55.875,26.25 C55.6678932,26.25 55.5,26.0821068 55.5,25.875 L55.5,16.875 C55.5,16.6678932 55.6678932,16.5 55.875,16.5 Z" id="Rectangle-6" fill="url(#linearGradient-2)"></path>
                    <path d="M36.375,19.5 C36.5821068,19.5 36.75,19.6678932 36.75,19.875 L36.75,28.875 C36.75,29.0821068 36.5821068,29.25 36.375,29.25 C36.1678932,29.25 36,29.0821068 36,28.875 L36,19.875 C36,19.6678932 36.1678932,19.5 36.375,19.5 Z" id="Rectangle-6-Copy" fill="url(#linearGradient-2)" opacity="0.500905797"></path>
                    <path d="M63.375,28.5 C63.5821068,28.5 63.75,28.6678932 63.75,28.875 L63.75,37.875 C63.75,38.0821068 63.5821068,38.25 63.375,38.25 C63.1678932,38.25 63,38.0821068 63,37.875 L63,28.875 C63,28.6678932 63.1678932,28.5 63.375,28.5 Z" id="Rectangle-6-Copy-2" fill="url(#linearGradient-2)" opacity="0.500905797"></path>
                    <rect id="Rectangle-6-Copy-5" fill="url(#linearGradient-2)" opacity="0.720278533" x="57" y="46.5" width="1" height="9.75" rx="0.5"></rect>
                    <path d="M32.625,45 C32.8321068,45 33,45.1678932 33,45.375 L33,54.375 C33,54.5821068 32.8321068,54.75 32.625,54.75 C32.4178932,54.75 32.25,54.5821068 32.25,54.375 L32.25,45.375 C32.25,45.1678932 32.4178932,45 32.625,45 Z" id="Rectangle-6-Copy-6" fill="url(#linearGradient-2)" opacity="0.500905797"></path>
                    <path d="M28.875,29.25 C29.0821068,29.25 29.25,29.4178932 29.25,29.625 L29.25,38.625 C29.25,38.8321068 29.0821068,39 28.875,39 C28.6678932,39 28.5,38.8321068 28.5,38.625 L28.5,29.625 C28.5,29.4178932 28.6678932,29.25 28.875,29.25 Z" id="Rectangle-6-Copy-3" fill="url(#linearGradient-2)" opacity="0.500905797"></path>
                    <path d="M44.625,51 C44.8321068,51 45,51.1678932 45,51.375 L45,60.375 C45,60.5821068 44.8321068,60.75 44.625,60.75 C44.4178932,60.75 44.25,60.5821068 44.25,60.375 L44.25,51.375 C44.25,51.1678932 44.4178932,51 44.625,51 Z" id="Rectangle-6-Copy-4" fill="url(#linearGradient-2)" opacity="0.500905797"></path>
                    <path d="M0,62.0928688 C0.660866835,75.5939223 15.8389753,83.1462994 45.5343255,84.75 C88.8376691,83.6027592 93.0930486,67.1565 92.565431,62.0928688 L93.75,3.8052316 C78.6952656,6.46876398 63.1822994,7.80053017 47.2111013,7.80053017 C31.2399033,7.80053017 15.5028695,5.20035344 0,0 L0,62.0928688 Z" id="Path-47" fill="url(#linearGradient-3)" opacity="0.50073596"></path>
      </g>
    </svg>
  

  </div>
</template>
<script setup>

import { onMounted, reactive, ref } from "vue";
import { SVG, Rect } from '@svgdotjs/svg.js'

const testref = ref("Hello SVG");

function testclicked() {
  console.log("test clicked");
};

onMounted(() => {
  console.log("mounted");
})

function changeText()
{
  //利用id直接定位修改
  console.log("change text");
  SVG("#textdiv").text("new text");
  SVG("#circle").attr('fill', '#ff00ff');
  console.log(SVG("#textdiv"));
}


function changeChild()
{
  let rects = SVG("#svgdiv rect"); //获取到第一个rect
  rects.fill("#ffaa00");

  //find 获取所有的rect
  SVG("#svgdiv").find("rect").fill("#ffff00");
  console.log(rects);
}

</script>

<style scoped></style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值