做爲一個前端搬磚工,是否把80%的時間花在了活動專題頁面的編碼上?在電商行業,每個節日前都是前端搬磚工的加班時間週期,甚至上線前一秒還能收到領導或運營發來修改文案和圖片的郵件。javascript
本文將介紹一個移動端專題活動頁面製做平臺的搭建思路。css
其餘項目痛點分析:頁面功能大同小異、需求急、時間緊、下線快、研發性很比低,前端工程師沒法持續開發無窮無盡的活動頁面,須要採用活動頁面可視化搭建工具, 由運營人員/產品人員直接生成/修改活動頁面,研發人員的工做轉變爲提供知足活動頁面業務須要的活動模板。html
或許你也體驗過現有其餘頁面製做平臺,是否以爲本身一個前端開發人員都不會使用?以下圖是某一個在線頁面製做工具,是否是以爲比ps還複雜?前端
固然,他們這些平臺都是從通用性考慮,相似一個基礎性平臺,把前端技術以界面的方式呈現出來。不能否認,技術很強大,同時也很龐大,離普通人很遙遠,通常人使用不了。有句話說(具體我也不知道誰說的):不能把技術落地成你們都能使用的東西就不是好技術。沒錯,我如今就是要把技術落地成小朋友都會使用的東西。阿里雲鳳蝶vue
ice 阿里飛冰java
百度H5git
美團外賣前端可視化界面組裝平臺 —— 樂高github
gaea-editorweb
Vue-Layout數據庫
以上開源/非開源的可視化頁面製做平臺,無一例外都存在使用門檻高,專業術語多,操做複雜等。
以下圖所示分割組件:
統必定義頁面點擊事件,針對不一樣的環境作不一樣跳轉方式,處理APP內跳轉的兼容。另外還能夠特定的組件定義特定的事件:例如商品列表組件,動態獲取商品數據,點擊事件默認跳轉到商品詳情頁。
var url = JSON.parse(target.dataset.url)
var type = target.dataset.type
// 系統內部頁面
if (type === 'inside') {
if ('isAPP') {
openApp(url)
} else {
location.href = url
}
}
if (type === 'ouside') {
location.href = url
}
if (type === 'tel') {
location.href = 'tel:' + url
}
if (type === 'mail') {
location.href = 'mailto:' + url
}
// 領取優惠券
if (type === 'coupon') {
getCoupon(url)
}
複製代碼
隨着組件的增長,防止頁面資源太大影響頁面呈現速度,這裏除了公共代碼,根據用到的組件,加載該組件使用的css和js代碼。
// 按需生成script標籤
<script src="http://example.com/??swiper.min.js,timeout.min.js,form.min.js">複製代碼
在實現樓層導航菜單和圖片懶加載的過程當中發現須要預約義頁面高度,這就要求全部組件必須撐開自身的高度,禁止出現加載動態內容後才撐開高度的組件。
<div style="height:6.85vw;">
<img data-src="http://img.o" class="lazyload">
</div>
複製代碼
生成靜態頁面的緩存時間不能太長,必須能夠在短期內或支持用戶手動推送更新頁面,這裏能夠配合平臺使用的CDN系統進行處理。
組件會隨着系統迭代大幅增長,且每一個組件配置不統一,採用配置信息生成json字符串的方式保存到數據庫。解耦後端的存儲和接口邏輯,後端只須要提供一個增刪改接口便可。
h5消費端能夠採用原生、jQuery、vuejs等任何技術方案。 我的偏向使用原生(個人應用項目方案),jQuery在移動端存在的意義不大,vuejs等框架增長了消費的複雜度,活動專題頁這種純展現性的頁面沒有必要引入 mvv* 框架。
系統設計是一個數據生產平臺,不負責消費(所見和預覽也算是消費的兩種),能夠生成自定義格式的配置信息,供web或app消費使用。自行腦補:APP端須要預約義組件樣式。
這個仍是以系統的使用簡單爲主,在我這個系統上,開發多作幾個功能相似的組件並無太大難度,例如輪播圖組件,是否把swiper的全部功能集成到一個組件上,個人想法就是分開吧,運營人員喜歡直觀易用的,他想要的組件功能可能就是那麼簡單。
圖片組件:如上圖組件分割第一個組件,咱們使用一個圖片組件便可,上傳切割好的圖片,而後定義點擊區域(相似熱區area,用戶拖拉生成)實現點擊跳轉便可(PS:實際上圖片組件已經能夠知足頁面80%的佈局要求):
倒計時組件:上圖有一個倒計時功能,如何儘可能覆蓋平時使用要求?我採用圖片出樣式的原則,內部用用戶隨意定義各個倒計時數字樣式,設計以下:
其餘組件就不一一列舉了,感興趣的小夥伴能夠本身嘗試封裝組件,還能夠分裝從後端獲取數據的組件,好比我在實際項目中封裝的「商品列表」組件等,可是別忘記組件的封裝原則:圖片出樣式,高度要撐開。
項目開源地址: github地址
References