阿里巴巴矢量图标批量下载

文章目录

前言

阿里巴巴矢量图标库作为国产的图标库,使用人数多、图标也很丰富。但在功能上还是有改进的地方的,如最近我在使用的过程中就遇到批量下载矢量图标的问题……

在网上找了好几篇文章,然而基本上都是千篇一律的,无疑的是通过浏览器的控制台写js去下载图标是必然的途径……

虽然阿里巴巴矢量图标库是有批量操作的功能,但只能加入到购物车再下载,而这种操作既麻烦又有一次最多下载20个图标的数量限制,要么就逐个下载更不可取。或许你可以把Font class字体文件下载到本地再去使用,但这里我们主要探讨如何一次性下载20个以上的svg图标文件

Iconfont图标批量下载20个以上要如何实现?

1.解决思路

通过js代码获取阿里巴巴矢量图标库页面中的svg标签,然后使用文件流将其下载到本地。

2.实现方法

1.打开阿里巴巴矢量图标库的项目

https://www.iconfont.cn/manage/index?manage_type=myprojects

2.按F12打开浏览器的开发者工具执行自动下载图标的代码

tips:可以把浏览器的下载提示关掉并指定好下载路径,否则每次下载图标还要手动确认下载

直接批量下载阿里巴巴矢量图标的js代码如下:

// 保存本地文件
function saveLocalFile(content, fileName) { 
    let downLink = document.createElement('a')
    downLink.download = fileName
    downLink.style.display = 'none'
    let blob = new Blob([content])
    downLink.href = URL.createObjectURL(blob)
    document.body.appendChild(downLink)
    downLink.click()
    document.body.removeChild(downLink)
}

// 批量下载阿里巴巴矢量图标
function downloadIconfont() { 
    // 获取当前项目的图标
    let iconList = document.querySelectorAll('.project-iconlist .icon-item')
    console.log('当前项目的图标数量:' + iconList.length)
    iconList.forEach(function (item, index) { 
        // 添加定时器去下载,否则最多下载10个。至于间隔时间可自行把握
        setTimeout(() => { 
            // 获取svg图标的内容以写入到文件中
            let svg = item.children[0].innerHTML
            // 获取图标名称作为svg文件名。这里给文件名取时间戳作为后缀,可防止覆盖下载重名的svg图标
            let fileName = item.children[1].innerText + '_' + new Date().getTime() + '.svg' 
            saveLocalFile(svg, fileName)
        }, 100 * index)
    })
}

// 执行批量下载阿里巴巴矢量图标
downloadIconfont()

导出阿里巴巴矢量图标并压缩的js代码如下:

// 将js的引用写入到阿里巴巴矢量图标库的网站上会有跨域问题。
// 如果需要下载打包的,需将这个网址的第13行代码(即整个jszip.min.js的代码)拷贝进来。
// https://github.com/Stuk/jszip/blob/master/dist/jszip.min.js

// 导出阿里巴巴矢量图标(压缩包)
async function exportIconfont() { 
    // // 引入jszip.min.js 
    // let script = document.createElement('script');
    // script.src = "https://github.com/Stuk/jszip/blob/master/dist/jszip.min.js";
    // document.getElementsByTagName('head')[0].appendChild(script);

    let iconList = document.querySelectorAll('.project-iconlist .icon-item')
    console.log('当前项目的图标数量:' + iconList.length)

    let zip = new JSZip()
    const currDate = new Date()
    const dateWithOffset = new Date(currDate.getTime() - currDate.getTimezoneOffset() * 60000)
    // 修复jszip插件打包文件或文件夹的修改时间有误的BUG
    JSZip.defaults.date = dateWithOffset
    let count = 0
    await iconList.forEach(item => { 
        let svg = item.children[0].innerHTML
        let fileName = item.children[1].innerText + '.svg'
        while(zip.files[fileName]){ 
            // 重命名同名的图标
            count++;
            fileName = item.children[1].innerText + count + '.svg'
        }
        let svgBlob = new Blob([svg])
        // 往zip压缩包的icon文件夹添加svg文件
        zip.folder('icon').file(fileName, svgBlob)
        count = 0
    })
    // 生成zip文件并下载
    zip.generateAsync({ 
        type: 'blob'
    }).then(function (content) { 
        let projectName = document.querySelectorAll('.project-top .top-title')
        let fileName = projectName[0].textContent + '.zip'
        saveLocalFile(content, fileName)
    })
}

// 执行导出阿里巴巴矢量图标(压缩包)
exportIconfont()

至此,批量下载阿里巴巴矢量图标的解决方案到此结束。

    原文作者:DD1024z
    原文地址: https://blog.csdn.net/q740084020/article/details/108401347
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞