hybird之web動態換膚實現

2021-09-06 19:49:02 字數 1518 閱讀 4282

前言

最近在重構個hybird(原生的殼包著web頁面)的ui框架,進行到了做換膚功能的階段,所以這裡是我思考的解決的方法。

預想

目前實現換膚的功能無非就兩種做法。

1.寫幾個**檔案,然後切換使用這幾個檔案達到換膚的目的。

不得不說這是最常見的方式,效果也比較明顯,但是它有幾個缺點。

缺點:1.如果更改乙個**的內容,那其他的**檔案也要做相應修改(這挺麻煩,不過可以用less管理css解決,所以也不是什麼大問題)。

2.它是固定的,在使用的時候**檔案已經是寫好的了,而當我需要動態設定一些屬性的時候就無可奈何了。

2.使用less這種工具,在頁面載入時才動態生成**樣式。

但這種方式的缺點卻很明顯。

缺點:1.效率低,為了乙個換膚的功能,卻要引乙個less工具(壓縮後大概126kb),在終端web是無法忍受的。

2.速度慢,因為有乙個**檔案編譯(姑且把它叫做編譯)生成的過程,在終端也難以接受(有可能還出現頁面**閃),如果更換**又要重新編譯。

考慮

鑑於上面兩種方法的缺點,一種無法動態,另一種效率低。

所以上面兩種方法沒辦法使用,只能思考另外的方法了,於是就分析哪些是hybird 頁面需要換膚的元素

有幾個需要換膚的元素:

1.導航欄

2.底部欄

3.預設圖示

而又尋找需要設定的屬性:

1.背景色

2.字型顏色

3....(主要是這兩個)

根據上面的兩個東西,我發現沒必要把頁面換膚想成那麼複雜一件事,不是需要用什麼工具或切換css檔案。是不是可以獲取需要動態設定的屬性,然後然後設定到需要換膚的元素就可以了(就是這個簡單想法)。

ps:有人會說**怎麼會需要動態生成。我只能說有可能某些**屬性是頁面啟動時才知道,又或者支援自定義**的。

實現

說幹就幹,實現起來**很少,就直接貼出來給大家看看。

ui.skin = (function

()",

color : "@selector "}

var init = function

(options)

var _createcss = function

(changeselectors, colortype, color));

return

html;

}return

})();

**很簡單,看看就明白

總結

我的實現方法很簡單,當然所能更換的內容也較少且固定,但這對hybird應用的換膚已經是夠的了。既能動態換膚,而且效率是不錯的。

——技術只是技術,工具只是工具,不能為用而用。

(本篇完)

hybird之web動態換膚實現

前言 最近在重構個hybird 原生的殼包著web頁面 的ui框架,進行到了做換膚功能的階段,所以這裡是我思考的解決的方法。預想 目前實現換膚的功能無非就兩種做法。1.寫幾個 檔案,然後切換使用這幾個檔案達到換膚的目的。不得不說這是最常見的方式,效果也比較明顯,但是它有幾個缺點。缺點 1.如果更改乙...

C linq查詢之動態OrderBy用法例項

grouplist是原始資料集合,list sortorder是排序型別,desc 或者asc sortname是排序屬性名稱 1.使用反射。private static object getpropertyvalue object obj,string property var resultlis...

Spring boot 之 動態的獲取不同的實現類

宣告介面 apiresult 就是返回值,可以根據自己的需求,定義 定義兩個實現類 service hdfsstoragetype public class hdfsstoragetype implements storagetype service ftpstoragetype public cl...