[TOC]
>[success] # 動態引入阿里圖標庫
最近項目中加入了給菜單**選擇圖標**的功能,因為用[阿里圖標](https://www.iconfont.cn/)的**鏈接方式**引入到項目中,如果想實現向下面一樣**展示阿里圖標庫所有的圖標**,有**2**種方法。
**第1種:單個去手動記錄圖標的class類名,整理成數組的形式進行在列表中循環**。
**第2種: 用ajax請求阿里圖標的鏈接,鏈接會返回一個JSON字符串的一大串icon的類名的數據,需要寫一個截取方法把所有class整合成數組的形式進行在列表中循環**

<br>
>[success] ## 截取class類名方法
~~~
/**
* 獲取阿里圖標列表
* @param {String} url 阿里巴巴圖標URL
*/
getCssJson(url) {
const xhr = new XMLHttpRequest()
xhr.open('GET', url)
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
const css = JSON.parse(JSON.stringify(xhr.responseText))
let [,, ...iconArr ] = Object.keys(this.css2json(css))
// 去除掉class類名上的點
for(let i=0;i<iconArr.length;i++){
iconArr[i] = iconArr[i].replace('.','')
}
// 把遠程圖標跟本地圖標合并
this.iconArr = [...iconArr, ...localIconList] || [...localIconList]
}
}
xhr.send()
},
/**
* 將CSS形式的字符串轉換為JSON
* @param {String} css 字符串
*/
css2json(css) {
// 移除CSS所有注釋
let open //開始注釋
let close //結束注釋
while ((open = css.indexOf('/*')) !== -1 && (close = css.indexOf('*/')) !== -1) {
css = css.substring(0, open) + css.substring(close + 2)
}
// 初始化返回值
let json = {}
while (css.length > 0) {
// 存儲第一個左/右花括號的下標
const lbracket = css.indexOf('{')
const rbracket = css.indexOf('}')
let declarations = css
.substring(lbracket + 1, rbracket)
.split(';')
.map(e => e.trim())
.filter(e => e.length > 0) // 移除所有""空值
// 轉為Object對象
declarations = this.toObject(declarations)
let selectors = css
.substring(0, lbracket)
.split(',')
.map(selector => {
//去掉偽類
const signBracket = selector.indexOf(':')
if (signBracket === -1) {
return selector.trim()
} else {
return selector.substring(0, signBracket)
}
})
// 迭代賦值
selectors.forEach(selector => {
// 若不存在,則先初始化
if (!json[selector]) json[selector] = {}
// 賦值到JSON
Object.keys(declarations).forEach((key) => {
json[selector][key] = declarations[key]
})
})
// 繼續下個聲明塊
css = css.slice(rbracket + 1).trim()
}
// 返回JSON形式的結果串
return json
},
toObject(array){ //?輔助方法:將array轉為object
let?ret?=?{}
array.forEach(e?=>?{
const?index?=?e.indexOf(':')
const?property?=?e.substring(0,?index).trim()
const?value?=?e.substring(index?+?1).trim()
ret[property]?=?value
})
return?ret
}
~~~
- vue復選框邏輯
- get請求給后臺傳數組
- 提交表單時傳值參數處理方案
- Element ui上傳圖片功能
- async和await的使用
- 時間戳轉換
- 日期格式轉換時間戳
- 時間戳轉換日期格式
- 對深拷貝的認知總結
- vue-右鍵菜單功能
- textarea中換行、回車、空格的識別與處理
- element ui表格合并
- 合并行(上下行)
- 雙層for循環
- 數組去重
- 瀑布流
- 前端多條件篩選
- 閉包的理解
- 改變this指向
- vue單選框邏輯
- 對象數組根據某個屬性來進行排序
- vscode插件整理
- 對象數組多條件去重
- Blob類型數據轉換Json數據類型
- Element ui做批量上傳功能
- 前端cookie和后端cookie
- 強制轉換https協議
- 給事件傳額外參數
- 樹形結構數據處理
- 查找所有父級數據
- 根據id篩選單條數據
- 動態引入阿里圖標庫
- 四舍五入
- 封裝一個Promise.allSettled方法
- 判斷輸入框內是否有emoji表情
- element-ui的popover組件位置偏移
- formData上傳文件時,攜帶【數組對象參數】
- 前端解壓壓縮包(zip)解壓后上傳解壓的文件
- element ui表格列相同解決辦法
- elementUI,table復選框多選,翻頁/切換條數時保持選中狀態
- cookie 和 token 的區別