国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過Weex 300行代碼開發一款簡易的跑步App

isaced / 1457人閱讀

摘要:你就可以在目錄下用或者開發應用代碼了設計原理結合了高德地圖多個功能,比如定位,地圖縮放,繪制折現,進行點的標記等常用功能。文件源代碼打包運行開發完畢后,我們可以運行命令,讓它安裝到我們的測試手機上。

Weex正如它的目標,

一套構建高性能、可擴展的原生應用的跨平臺開發方案

Weex 給大家帶來的無疑是客戶端開發效率的提升,我們可以通過一套代碼,實現web,android, iOS的三個平臺上運行。自己最近嘗試了一次借助weex的插件機制,使用Weex-Amap地圖插件 可以開發 LBS 相關的應用。

首先我們先來看下運行的效果吧:

iOS 版

Android 版

截圖數據僅供參考

它大概具備下面的一些功能;

統計用戶在運動過程中的距離累計,時間計算等。

存儲用戶的運動數據

使用地圖定位和距離計算的API,實現距離統計。

顯示地圖折線,通過對定位的數據地理位置進行折線繪制

統計用戶運動的數據,計算總距離和時間

點擊用戶的歷史記錄,可以查看軌跡

感覺和大家所用到的app功能相差不多了,但實際上我們借助 Weex 和 Weex-Amap 插件可以非??焖俚膶崿F這些功能,下面我們來看下具體怎么實現吧。

使用 weex-toolkit 創建項目

首先我們按照官網的教程安裝weex-toolkit。如果已經安裝過請忽略。

$ npm install -g weex-toolkit

安裝完成后,我們創建一個項目目錄,比如running-app。

weex create running-app

大家可能會看到下面的提示,輸入y安裝即可。

This command need to install weexpack. Install now? Yes

項目創建完成后,我們需要添加我們的運行平臺比如android或者ios,這里我們添加 android 平臺。

weex platform add android

添加成功后,我們在通過weex的插件機制,安裝weex-amap高德的地圖依賴。

weex plugin add weex-amap

安裝完成后,你可以到項目目錄 plugins 里面看下是否有新增的 weex-amap 的項目目錄,如果存在即表示插件安裝成功。你就可以在src目錄下用we或者vue開發應用代碼了

設計原理

[weex-amap]結合了高德地圖多個功能,比如定位,地圖縮放,繪制折現,進行點的標記等常用功能。實現一款跑步應用,我們需要解決最核心的問題就是:

統計一個在運動過程的總距離 (s)

當我們能夠獲取到總距離(s)的時候,和運動時間(t) 通過小學物理知識,我們知道:

速度(v) = 總路程(s) / 總時間(t)

在結合一些公式,我們還可以計算出我們的 卡路里(c);

其中 weex-amap 正好可以解決上面最為核心的問題,我們可以通過定位,然后在通過比較兩個連續點之間的距離,進行累加(微分累計),從而獲取總距離。(當然這只是最為簡單的實現原理,做成完整的app還需要更加科學化的算法)

[weex-amap] 其中提供了這么兩個API

getUserLocation 用于獲取用戶的當前位置地理位置,用戶會獲取經緯度 [Long, Lat]

getLineDistance 用戶獲取傳入的兩個地理位置的直線距離

除了這兩個API,我們還需要用到地圖的一個組件, 就是折線繪制 weex-amap-polyline 。它可以通過path屬性接收到一組地理位置坐標值,從而在地圖上繪制連續的折線。比如:

其中 your_path 指定類似這樣的數據: [[116.487, 40.00003],[113.487, 40.0002]...]

關于更多的如何使用weex-amap 插件,可以參考這篇 文章 以及 官方Demos

設計頁面功能和邏輯

大家也都用過跑步的APP,常見的界面布局如下:

那么我們頁面的基本結構就已經出來了:




其中 我們使用了weex-amap組件,其中一些屬性:

zoom 表示設置的地圖的縮放級別

geolocation 添加地圖定位插件沒如果你需要定位功能,必須設置

sdk-key 設置地圖的密鑰,這是地圖開發必須申請 (前往高德地圖申請)

center 設置地圖的中心,需要設置一個數組,傳入地理位置坐標[116.487, 40.00003]第一個數字表示經度,第二個值表示緯度

其中的樣式參考如下,當然你也可以自己實現一個布局:

.container{
  position: relative;
  flex: 1;
  min-height: 600;
  background-color: #eee;
}
.map{
  flex: 1;
  min-height: 600;
}
.map-controller{
  z-index: 10000;
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 500;
  background-color: rgba(255,255,255,1);
  border-top-width: 2;
  border-top-color: rgba(0,0,0,.25);
}
.distance-wrap{
  flex: 1;
  flex-direction: row;
  justify-content: center;
  align-items: center;
}

.dashboard{
  flex: 1;
  flex-direction: row;
}

.btn-wrap{
  flex: 1;
  flex-direction: row;
  align-items: center;
  justify-content: center;
}
定義數據模型

我們需要在界面里顯示四組數據:

運動距離

運動時間

運動消耗

運動配速

自己設計的runningData里面包含了下面一些數據:

runningData: {
  distance: 0,  // 表示運動的累計距離
  miles: 0,    // 表示運動的累計距離,單位是公里用于界面顯示
  path: [],    // 運動坐標數據
  time: "00:00:00",  // 用于界面的運動時間顯示
  seconds: 0,   // 運動的時間,單位:秒
  speed: 0,    // 配速 
  calories: 0,  // 運動的消耗,單位千卡
}

處于計算的方便其中我設計了幾個用于數據格式的轉換和計算,在我的 utils.js 里面。

這個時候我們需要在模板里面添加一些代碼用于顯示這些數據;

添加地圖折線polyline

  
添加流程控制

在我們進行跑步的過成功無疑就是這么幾個狀態,我將它定義在了 status.js

module.exports = {
  RUNNING_READY: 1, // 跑步開始前
  RUNNING_DOING: 2, // 跑步進行中
  RUNNING_PAUSE: 3, // 跑步暫停中
  RUNNING_END: 4  // 跑步結束,
  RUNNING_PREVIEW: 5 // 數據預覽
};

我們通過這幾個狀態來實現對界面的操作,比如開始或者暫停。這個時候我們需要添加一一些用于界面控制的按鈕。