loadingSVG

// ==UserScript==
// @name         loading.io下载动态svg图片
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://loading.io/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const btn = document.createElement('button')
    btn.innerText = '下载当前SVG'
    btn.style = 'position: fixed;top: 90vh;right: 0;z-index:99999'
    document.body.appendChild(btn)
    btn.onclick = copySVG
    function copySVG() {
        // 正则匹配style-@keyframes id
        const reg = /running\s.+?;/g
        // 获取svg的innerHTML
        const svgStr = document.getElementsByClassName('inner')[2].innerHTML
        // 得到 running breath-e2285f69-fd29-4f44-b16a-9447336f09db; 类似数据
        const arr = svgStr.match(reg)
        // 如果没有使用@keyframes动画
        if(!arr) {
            let svgLabel = svgStr.replace(/\n/g, '')
            // navigator.clipboard.writeText(svgLabel)
            download("test.svg",svgLabel)
            console.log('无keyframes动画,下载成功!')
            // console.log(svgLabel)
        } else {
            // 获取@keyframes-id
            const idArr = arr.map(item => item.replace('running ','').replace(';',''))
            // 数组去重
            const noRepeat = [...new Set(idArr)]
            // 获取页面中的样式表
            const stylesObj = document.styleSheets;
            // 循环样式对象中的每一个数据
            Object.keys(stylesObj).forEach(k => {
            // 匹配svg中的@keyframes-id
                if(noRepeat.includes(stylesObj[k].ownerNode.id)) {
                    // @keyframes str去掉\n
                    let str1
                    const keyframes = stylesObj[k].ownerNode.innerHTML.replace(/\n/g, '')
                    const attr = '<?xml version="1.0" encoding="utf-8"?>'
                    str1 = attr + svgStr.replace(/\n/g, '').replace('<\/svg', '')+`<style id="${stylesObj[k].ownerNode.id}">`+ keyframes + '<\/style><\/svg>'
                    // navigator.clipboard.writeText(str1)
                    download("test.svg",str1)
                    console.log('有keyframes动画,下载成功!')
                    // console.log(str1)
                }
            })
        }
    }
    // 下载
    function download(filename, text) {
        var element = document.createElement('a');
        element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
        element.setAttribute('download', filename);
        element.style.display = 'none';
        document.body.appendChild(element);
        element.click();
        document.body.removeChild(element);
    }
    // Your code here...
})();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值