




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第微信小程序中如何實現(xiàn)動態(tài)改變SVG顏色和尺寸目錄前言1.創(chuàng)建一個微信小程序項目,準(zhǔn)備好SVG素材2.封裝修改svg顏色的工廠函數(shù)3.封裝一個自定義組件,方便使用svg圖標(biāo)4.注冊組件,使用結(jié)語總結(jié)
前言
最近在做項目的時候總是因為組件庫的圖標(biāo)無法滿足需求而煩惱,而每次需要新的圖標(biāo)又要去找字體圖標(biāo)、生成新的css代碼而苦惱。
所以想到用svg來代替,體積也小,主要就是方便一點,不用每次還重新生成代碼。但是一個最重要的問題也隨之出現(xiàn),小程序中不支持svg代碼....但是也有曲線救國的方式,image可以顯示svg,還好沒有趕盡殺絕。
但隨之而來的又是一個新的問題,雖然能顯示svg,但是并不能動態(tài)改變顏色呀!偶天哪。。。又但是,image的src支持base64,哎呀,這思路不就來了嗎,既然你能base64,我還不能修改base64了?說干就干,那就來吧!
1.創(chuàng)建一個微信小程序項目,準(zhǔn)備好SVG素材
創(chuàng)建好項目之后,就到iconfont上找兩個圖標(biāo)的svg吧!那么怎么管理svg呢?首先我們需要將svg代碼base64編碼
例如:
svgt="1656728349217"viewBox="0010241024"version="1.1"xmlns="/2000/svg"p-id="2589"width="200"height="200"pathd="M874.666667467.2c-10.666667-10.666667-29.866667-12.8-42.6666670l-343.466667341.333333c-74.66666774.666667-198.474.666667-275.20-36.266667-36.266667-57.6-85.333333-57.6-136.533333s19.2-100.26666757.6-136.533333L556.8192c46.933333-46.933333121.6-46.933333168.533333023.46666723.46666734.13333353.33333334.13333483.2032-12.861.866667-34.13333483.2L384704c-17.06666717.066667-44.817.066667-640-8.533333-8.533333-12.8-19.2-12.8-32s4.266667-23.46666712.8-32l317.866667-315.733333c10.666667-10.66666712.8-29.8666670-42.666667-10.666667-12.8-29.866667-12.8-42.6666670L277.333333597.333333c-19.219.2-29.86666746.933333-29.86666674.666667S258.133333725.333333277.333333746.666667c40.53333340.533333106.66666740.533333147.20L768403.2c34.133333-34.13333353.333333-78.93333353.333333-125.866667s-19.2-93.866667-53.333333-125.866666a178.986667178.986667000-253.8666670l-341.333333341.333333c-46.93333346.933333-74.666667110.933333-74.666667179.2s25.6132.26666774.666667179.2c49.06666749.066667115.274.666667179.274.666667s130.133333-25.6179.2-74.666667l343.466667-341.333333c10.666667-12.810.666667-320-42.666667z"p-id="2590"/path/svg
轉(zhuǎn)為image支持的base64代碼
data:image/svg+xml;base64,PHN2ZyB0PSIxNjU2NzI4MzQ5MjE3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODkiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNODc0LjY2NjY2NyA0NjcuMmMtMTAuNjY2NjY3LTEwLjY2NjY2Ny0yOS44NjY2NjctMTIuOC00Mi42NjY2NjcgMGwtMzQzLjQ2NjY2NyAzNDEuMzMzMzMzYy03NC42NjY2NjcgNzQuNjY2NjY3LTE5OC40IDc0LjY2NjY2Ny0yNzUuMiAwLTM2LjI2NjY2Ny0zNi4yNjY2NjctNTcuNi04NS4zMzMzMzMtNTcuNi0xMzYuNTMzMzMzczE5LjItMTAwLjI2NjY2NyA1Ny42LTEzNi41MzMzMzNMNTU2LjggMTkyYzQ2LjkzMzMzMy00Ni45MzMzMzMgMTIxLjYtNDYuOTMzMzMzIDE2OC41MzMzMzMgMCAyMy40NjY2NjcgMjMuNDY2NjY3IDM0LjEzMzMzMyA1My4zMzMzMzMgMzQuMTMzMzM0IDgzLjIgMCAzMi0xMi44IDYxLjg2NjY2Ny0zNC4xMzMzMzQgODMuMkwzODQgNzA0Yy0xNy4wNjY2NjcgMTcuMDY2NjY3LTQ0LjggMTcuMDY2NjY3LTY0IDAtOC41MzMzMzMtOC41MzMzMzMtMTIuOC0xOS4yLTEyLjgtMzJzNC4yNjY2NjctMjMuNDY2NjY3IDEyLjgtMzJsMzE3Ljg2NjY2Ny0zMTUuNzMzMzMzYzEwLjY2NjY2Ny0xMC42NjY2NjcgMTIuOC0yOS44NjY2NjcgMC00Mi42NjY2NjctMTAuNjY2NjY3LTEyLjgtMjkuODY2NjY3LTEyLjgtNDIuNjY2NjY3IDBMMjc3LjMzMzMzMyA1OTcuMzMzMzMzYy0xOS4yIDE5LjItMjkuODY2NjY3IDQ2LjkzMzMzMy0yOS44NjY2NjYgNzQuNjY2NjY3UzI1OC4xMzMzMzMgNzI1LjMzMzMzMyAyNzcuMzMzMzMzIDc0Ni42NjY2NjdjNDAuNTMzMzMzIDQwLjUzMzMzMyAxMDYuNjY2NjY3IDQwLjUzMzMzMyAxNDcuMiAwTDc2OCA0MDMuMmMzNC4xMzMzMzMtMzQuMTMzMzMzIDUzLjMzMzMzMy03OC45MzMzMzMgNTMuMzMzMzMzLTEyNS44NjY2NjdzLTE5LjItOTMuODY2NjY3LTUzLjMzMzMzMy0xMjUuODY2NjY2YTE3OC45ODY2NjcgMTc4Ljk4NjY2NyAwIDAgMC0yNTMuODY2NjY3IDBsLTM0MS4zMzMzMzMgMzQxLjMzMzMzM2MtNDYuOTMzMzMzIDQ2LjkzMzMzMy03NC42NjY2NjcgMTEwLjkzMzMzMy03NC42NjY2NjcgMTc5LjJzMjUuNiAxMzIuMjY2NjY3IDc0LjY2NjY2NyAxNzkuMmM0OS4wNjY2NjcgNDkuMDY2NjY3IDExNS4yIDc0LjY2NjY2NyAxNzkuMiA3NC42NjY2NjdzMTMwLjEzMzMzMy0yNS42IDE3OS4yLTc0LjY2NjY2N2wzNDMuNDY2NjY3LTM0MS4zMzMzMzNjMTAuNjY2NjY3LTEyLjggMTAuNjY2NjY3LTMyIDAtNDIuNjY2NjY3eiIgcC1pZD0iMjU5MCI+PC9wYXRoPjwvc3ZnPg==
這里對轉(zhuǎn)換之后的結(jié)果做一個說明,共分成三部分:
data:image/svg+xml;base64首部的這一串作為固定值,讓image能夠識別你給它的是什么東西,是一個圖片、svg+xml格式的、經(jīng)過了base64編碼的,這個解釋不是專業(yè)的哈,能看懂就行。一個英文逗號,將前后隔離開。逗號后面的就是svg代碼base64編碼之后得到的字符串,這就是我們可操作的字符串啦
接下來,在小程序中新建一個文件/asstes/SvgManager.js用來管理我們?nèi)康膕vg代碼,因為要操作svg的base64,最好就直接在項目中存儲,將轉(zhuǎn)換為base64字符串的svg通過export導(dǎo)出去
exportdefault{
attachment:'data:image/svg+xml;base64,PHN2ZyB0PSIxNjU2NzI4MzQ5MjE3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODkiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNODc0LjY2NjY2NyA0NjcuMmMtMTAuNjY2NjY3LTEwLjY2NjY2Ny0yOS44NjY2NjctMTIuOC00Mi42NjY2NjcgMGwtMzQzLjQ2NjY2NyAzNDEuMzMzMzMzYy03NC42NjY2NjcgNzQuNjY2NjY3LTE5OC40IDc0LjY2NjY2Ny0yNzUuMiAwLTM2LjI2NjY2Ny0zNi4yNjY2NjctNTcuNi04NS4zMzMzMzMtNTcuNi0xMzYuNTMzMzMzczE5LjItMTAwLjI2NjY2NyA1Ny42LTEzNi41MzMzMzNMNTU2LjggMTkyYzQ2LjkzMzMzMy00Ni45MzMzMzMgMTIxLjYtNDYuOTMzMzMzIDE2OC41MzMzMzMgMCAyMy40NjY2NjcgMjMuNDY2NjY3IDM0LjEzMzMzMyA1My4zMzMzMzMgMzQuMTMzMzM0IDgzLjIgMCAzMi0xMi44IDYxLjg2NjY2Ny0zNC4xMzMzMzQgODMuMkwzODQgNzA0Yy0xNy4wNjY2NjcgMTcuMDY2NjY3LTQ0LjggMTcuMDY2NjY3LTY0IDAtOC41MzMzMzMtOC41MzMzMzMtMTIuOC0xOS4yLTEyLjgtMzJzNC4yNjY2NjctMjMuNDY2NjY3IDEyLjgtMzJsMzE3Ljg2NjY2Ny0zMTUuNzMzMzMzYzEwLjY2NjY2Ny0xMC42NjY2NjcgMTIuOC0yOS44NjY2NjcgMC00Mi42NjY2NjctMTAuNjY2NjY3LTEyLjgtMjkuODY2NjY3LTEyLjgtNDIuNjY2NjY3IDBMMjc3LjMzMzMzMyA1OTcuMzMzMzMzYy0xOS4yIDE5LjItMjkuODY2NjY3IDQ2LjkzMzMzMy0yOS44NjY2NjYgNzQuNjY2NjY3UzI1OC4xMzMzMzMgNzI1LjMzMzMzMyAyNzcuMzMzMzMzIDc0Ni42NjY2NjdjNDAuNTMzMzMzIDQwLjUzMzMzMyAxMDYuNjY2NjY3IDQwLjUzMzMzMyAxNDcuMiAwTDc2OCA0MDMuMmMzNC4xMzMzMzMtMzQuMTMzMzMzIDUzLjMzMzMzMy03OC45MzMzMzMgNTMuMzMzMzMzLTEyNS44NjY2NjdzLTE5LjItOTMuODY2NjY3LTUzLjMzMzMzMy0xMjUuODY2NjY2YTE3OC45ODY2NjcgMTc4Ljk4NjY2NyAwIDAgMC0yNTMuODY2NjY3IDBsLTM0MS4zMzMzMzMgMzQxLjMzMzMzM2MtNDYuOTMzMzMzIDQ2LjkzMzMzMy03NC42NjY2NjcgMTEwLjkzMzMzMy03NC42NjY2NjcgMTc5LjJzMjUuNiAxMzIuMjY2NjY3IDc0LjY2NjY2NyAxNzkuMmM0OS4wNjY2NjcgNDkuMDY2NjY3IDExNS4yIDc0LjY2NjY2NyAxNzkuMiA3NC42NjY2NjdzMTMwLjEzMzMzMy0yNS42IDE3OS4yLTc0LjY2NjY2N2wzNDMuNDY2NjY3LTM0MS4zMzMzMzNjMTAuNjY2NjY3LTEyLjggMTAuNjY2NjY3LTMyIDAtNDIuNjY2NjY3eiIgcC1pZD0iMjU5MCI+PC9wYXRoPjwvc3ZnPg=='
2.封裝修改svg顏色的工廠函數(shù)
開始之前,我們要先明白,svg是如何改變顏色的。
svg中有一個屬性fill,這里就是用來填寫svg的填充顏色的,支持十六進制,例如#ff0000就是紅色,也可以填寫red,跟css差不多,明白這一點就可以進行接下來的操作了。
工廠函數(shù)代碼:實現(xiàn)思路就是將SVG的base64字符串解碼之后得到svg代碼,替換svg的fill屬性來改變顏色,然后再Base64編碼回去。Base64的代碼網(wǎng)上隨便找一份就行,文章尾部會貼出代碼片段,內(nèi)含Base64代碼
import{Base64}from"./Base64";
exportconstgetColorSVG=(svgBase64,color)={
try{
svgBase64=svgBase64.substring(svgBase64.indexOf(',')+1,svgBase64.length);//取出第三部分
constsvg=Base64.decode(svgBase64);//解碼得到svg代碼
if(/svg/.test(svg)){//先簡單判斷是一下否是一個svg
letnewSvg;
if(/fill=".*"/.test(svg)){
newSvg=svg.replace(/fill=".*"/,`fill="${color}"`);//SVG有默認色
}else{
newSvg=svg.replace(/svg/,`svgfill="${color}"`);//無默認色
return'data:image/svg+xml;base64,'+Base64.encode(newSvg);//替換完之后再組合回去
}catch{}
return'';
3.封裝一個自定義組件,方便使用svg圖標(biāo)
新建一個組件,保存在/components/m-icon/index
importSvgManagerfrom"../../asstes/SvgManager"
import{getColorSVG}from"../../utils/tools"
Component({
options:{
styleIsolation:'apply-shared',
virtualHost:true
properties:{
/**圖標(biāo)名稱*/
name:{
type:String,
value:''
/**圖標(biāo)顏色*/
color:{
type:String,
value:'#000000'
size:{
type:String,
value:'28rpx'
observers:{
//監(jiān)聽名稱和顏色變化
'name,color':function(name,color){
this.changeIcon(name,color);
data:{
svgData:''
meth
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025裝飾裝修工程承包合同范文
- 工程運輸分包合同協(xié)議書
- 疫情合同補充協(xié)議書
- 物業(yè)只有協(xié)議書沒有合同
- 2025年餐廳租賃合同模板
- 南華醫(yī)院招聘面試題及答案
- 防干擾測試題目及答案大全
- 經(jīng)濟金融試題及答案詳解
- 數(shù)字仿真技術(shù)應(yīng)用試題及答案
- 澳門樂理8級考試題目及答案
- 三方協(xié)議書(消防)
- 工序能耗計算方法及等級指標(biāo)
- 預(yù)激綜合征臨床心電圖的當(dāng)前觀點
- 閥門檢修作業(yè)指導(dǎo)書講解
- 畢業(yè)設(shè)計(論文)秸稈粉碎機的設(shè)計(含全套圖紙)
- 藥店組織機構(gòu)圖及部門設(shè)置說明
- 樁基鋼筋籠吊裝計算書(共16頁)
- 危大工程驗收表-
- 葉輪動平衡試驗報告A
- 注漿管施工方案
- 公共場所衛(wèi)生行政許可延續(xù)申請表
評論
0/150
提交評論