一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

注冊

微信小程序開發之OFO共享單車分析,小程序的地圖組件

2017-12-20
導讀:想學一下微信小程序,發現文檔這東西,干看真沒啥意思。所以打算自己先動手擼一個。摩拜單車有自己的小程序,基本功能都有,方便又小巧,甚是喜愛。于是我就萌生了一個給ofo共...
想學一下微信小程序,發現文檔這東西,干看真沒啥意思。所以打算自己先動手擼一個。摩拜單車有自己的小程序,基本功能都有,方便又小巧,甚是喜愛。于是我就萌生了一個給ofo共享單車擼一個小程序(不知道為啥ofo沒有小程序)的想法。
這一節我們先來剖析一下小程序的地圖組件

1.準備工作

微信小程序當然屬于騰訊大佬的(給大佬遞茶):微信小程序開發者工具下載,騰訊開放了小程序個人開發平臺,只需要一個微信號就可以成為小程序開發者了。

2.小程序頁面

打開小程序開發者工具,用微信掃碼登錄,創建一個默認的小程序。

pages文件夾下存放著小程序所有的業務頁面;
index文件夾就是一個頁面,index.wxml是頁面的結構文件,類似html。
index.wxss是頁面的樣式,其實就是css;index.js是頁面的邏輯,數據請求與渲染都是都在這個頁面完成。
logs文件夾存放著小程序開發日志,目前暫時用不到。
utils.js可以編寫自己的JavaScript插件也可以引入第三方插件。
app.js處理全局的一些邏輯,比如定義全局變量存放獲取的用戶信息,這樣每個頁面都可以獲取用戶信息。
app.json 是全局配置文件,比如設置標題欄的背景色等。
app.wxss 存放頁面的公共樣式,如果多個頁面需要用到同一樣式,就可以寫在這里。
調試按鈕用來進行調試,功能和chrome dev調試工具差不多。
項目按鈕顯示預覽二維碼,用于真機調試。必須真機調試測試代碼,自帶的調試工具有時候會出bug

3.創建頁面結構

上一節已經分析了默認的文件結構以及它們的功能,現在我們要創建ofo小程序所需要的頁面。
刪除pages下默認的index文件夾,logs/utils文件夾可選擇性刪除
在與pages同級目錄下創建images文件夾,存放頁面需要用到的圖標,下載圖標
本小程序不需要在app.js里面編寫內容,可以先注釋這里面的代碼
在app.json里,刪掉默認代碼,編寫如下代碼(注:app.json文件里不能有任何注釋,這里是為了描述頁面功能更直觀):
  1. {
  2.   "pages":[
  3.     "pages/index/index", // 地圖頁
  4.     "pages/warn/index",  // 車輛報障頁
  5.     "pages/scanresult/index", // 掃碼成功頁
  6.     "pages/billing/index", // 開始計費頁
  7.     "pages/my/index", // 賬戶頁
  8.     "pages/wallet/index", // 錢包頁
  9.     "pages/charge/index", // 充值頁
  10.     "pages/logs/logs" // 日志頁
  11.   ],
  12.   "window":{
  13.     "backgroundTextStyle":"light",
  14.     "navigationBarBackgroundColor": "#b9dd08", // 標題欄背景色
  15.     "navigationBarTitleText": "ofo 共享單車",  // 標題欄文字
  16.     "navigationBarTextStyle":"black" // 標題欄文字樣式
  17.   }
  18. }
復制代碼

在app.wxss里面。我們先把頁面的通用樣式給出來(這一步我是在所有頁面寫完后,發現有些頁面有著相同的樣式,再把公共樣式抽離出來放在app.wxss里面的。)
  1. /**app.wxss**/
  2. .container{
  3.         background-color: #f2f2f2;
  4.         height: 100vh;
  5. }
  6. .title{
  7.         background-color: #f2f2f2;
  8.         padding: 30rpx 0 30rpx 50rpx;
  9.         font-size: 28rpx;
  10.         color: #000;
  11. }
  12. .tapbar{
  13.         display: flex;
  14.         align-items: center;
  15.         justify-content: space-between;
  16.         background-color: #fff;
  17.         padding: 40rpx;
  18. }
  19. .btn-charge{
  20.         width: 90%;
  21.         background-color: #b9dd08;
  22.         margin: 40rpx auto 30rpx;
  23.         text-align: center;
  24. }

保存后,你的pages文件夾下就是這樣的界面了(在app.json下創建路徑會自動創建文件夾,賊方便):


4.編寫地圖首頁 (index文件夾)

先來看一下地圖首頁效果圖


頁面分析:
  • 整頁顯示地圖,寬高占手機窗口的100%
  • 地圖之上有五個按鈕圖標和多個黃色ofo標記:定位按鈕,立即用車按鈕,舉報按鈕,黃色頭像按鈕和位于地圖中心的定位標記。


要在頁面顯示地圖,我們需要在index.wxml引入地圖組件:
  1. <!--index.wxml-->
  2. <view class="container">
  3.   <map id="ofoMap"
  4.     latitude="{{latitude}}"  // 緯度
  5.     longitude="{{longitude}}"  // 經度
  6.     scale="{{scale}}"  // 縮放級別
  7.     show-location/>    // 顯示帶有方向的小圓點
  8. </view>
復制代碼

{{...}} 里面是模板數據,待會會在index.js里的data對象里面定義。

初始化模板數據,在index.js的data對象里添加如下代碼:
  1. //index.js
  2. Page({
  3.   data: {
  4.     scale: 18, // 縮放級別,默認18,數值在0~18之間
  5.     latitude: 0, // 給個默認值
  6.     longitude: 0 // 給個默認值
  7.   },
  8.   onLoad: function(options){
  9.     // 1.頁面初始化 options為頁面跳轉所帶來的參數
  10.   },
  11.   onReady: function(){
  12.     // 頁面渲染完成
  13.   },
  14.   onShow: function(){
  15.     // 頁面顯示
  16.   },
  17.   onHide: function(){
  18.     // 頁面隱藏
  19.   },
  20.   onUnload: function(){
  21.     // 頁面關閉
復制代碼

這樣我們的地圖就默認中心位置為經度 0,緯度0。當然可能在開發者工具里顯示不出來(有bug)。莫慌!因為這不是我們想要的,我們想要的是我們自己的位置,所以得先獲取我們當前所在位置的經緯度,在index.js里的onLoad方法里添加如下代碼:
  1. onLoad: function(options){
  2.   // 1.頁面初始化 options為頁面跳轉所帶來的參數
  3.   
  4.   // 2.調用wx.getLocation系統API,獲取并設置當前位置經緯度
  5.     wx.getLocation({
  6.       type: "gcj02", // 坐標系類型
  7.       // 獲取經緯度成功回調
  8.       success: (res) => { // es6 箭頭函數,可以解綁當前作用域的this指向,使得下面的this可以綁定到Page對象
  9.         this.setData({  // 為data對象里定義的經緯度默認值設置成獲取到的真實經緯度,這樣就可以在地圖上顯示我們的真實位置
  10.           longitude: res.longitude,
  11.           latitude: res.latitude
  12.         })
  13.       }
  14.     });
復制代碼

tips:res是一參數對象,它是由調用的對應API傳過來的,如果你想知道res的具體值,可以在成功回調函數里打印:console.log(res),然后在控制臺輸出,看看它包含什么內容。在調用一個陌生API的時候可以用這種方法查看返回的對象數據,對處理邏輯很有幫助。
我們在地圖上顯示了我們的真實位置,但沒有移動到頁面的中心位置,微信提供的wx.moveToLocation()函數可以把當前位置移動到地圖中心。修改index.js:
  1. //index.js
  2. Page({
  3.   data: {
  4.     scale: 18,
  5.     latitude: 0,
  6.     longitude: 0
  7.   },
  8. // 頁面加載
  9.   onLoad: function(options){
  10.   // 1.頁面初始化 options為頁面跳轉所帶來的參數
  11.   
  12.   // 2.調用wx.getLocation系統API,獲取并設置當前位置經緯度
  13.     wx.getLocation({
  14.       type: "gcj02", // 坐標系類型
  15.       // 獲取經緯度成功回調
  16.       success: (res) => { // es6 箭頭函數,可以解綁當前作用域的this指向,使得下面的this可以綁定到Page對象
  17.         this.setData({  // 為data對象里定義的經緯度默認值設置成獲取到的真實經緯度,這樣就可以在地圖上顯示我們的真實位置
  18.           longitude: res.longitude,
  19.           latitude: res.latitude
  20.         })
  21.       }
  22.     });
  23. }
  24. // 頁面顯示
  25.   onShow: function(){
  26.     // 1.創建地圖上下文,移動當前位置到地圖中心
  27.     this.mapCtx = wx.createMapContext("ofoMap"); // 地圖組件的id
  28.     this.movetoPosition()
  29.   },
  30. // 定位函數,移動位置到地圖中心
  31.   movetoPosition: function(){
  32.     this.mapCtx.moveToLocation();
  33.   }
  34. })
復制代碼

我們在onShow函數里為地圖組件(id為ofoMap)創建了一個地圖上下文,調用了自定義函數movetoPosition(),而在自定義函數里又調用了moveToLocation這個API,這樣,頁面一顯示就在地圖中心顯示當前位置。

我們地圖上定位了我們的真實位置,但地圖組件還是默認樣式(點擊調試,右側面板點擊wxml可以查看地圖組件的默認格式),所以我們為地圖組件添加樣式,在index.wxss里編寫樣式:
  1. /**index.wxss**/
  2. .container{
  3.   position: relative;
  4.   width: 100%; // 寬度占滿設備
  5.   height: 100vh; // 高度占滿設備
  6. }
  7. #ofoMap{
  8.   position: absolute;
  9.   left: 0;
  10.   top: 0;
  11.   right: 0;
  12.   bottom: 0;
  13.   width: 100%;
  14.   height: 100%;
復制代碼

保存刷新,整個屏幕就都顯示地圖了>_<

我們再來添加地圖上的按鈕
其實這里的按鈕不是真正的按鈕,它們屬于地圖上的控件屬性,并且不隨著地圖移動。這里有一個坑:
地圖組件屬于微信原生組件,層級最高,任何元素都不能在地圖之上顯示,即無論設置多大z-index都無法顯示。所以,要想在地圖上添加按鈕來滿足需求,就要用到地圖控件屬性。

要添加地圖控件,先在地圖組件里聲明controls="...":
  1. <!--index.wxml-->
  2. <view class="container">
  3.   <map id="ofoMap"
  4.     latitude="{{latitude}}"  // 緯度
  5.     longitude="{{longitude}}"  // 經度
  6.     scale="{{scale}}"  // 縮放級別
  7.     controls="{{controls}}" // 地圖控件數組,多個控件存放在數組里
  8.     show-location/>    // 顯示帶有方向的小圓點
  9. </view>
復制代碼

然后在index.js設置controls(看代碼注釋了解具體用法)
  1. //index.js
  2. Page({
  3.   data: {
  4.     scale: 18,
  5.     latitude: 0,
  6.     longitude: 0
  7.   },
  8. // 頁面加載
  9.   onLoad: function(options){
  10.   // 1.頁面初始化 options為頁面跳轉所帶來的參數
  11.   
  12.   // 2.調用wx.getLocation系統API,獲取并設置當前位置經緯度
  13.     ...已省略
  14.    
  15.   // 3.設置地圖控件的位置及大小,通過設備寬高定位
  16.     wx.getSystemInfo({ // 系統API,獲取系統信息,比如設備寬高
  17.       success: (res) => {
  18.         this.setData({
  19.           // 定義控件數組,可以在data對象初始化為[],也可以不初始化,取決于是否需要更好的閱讀
  20.           controls: [{
  21.             id: 1, // 給控件定義唯一id
  22.             iconPath: '/images/location.png', // 控件圖標
  23.             position: { // 控件位置
  24.               left: 20, // 單位px
  25.               top: res.windowHeight - 80, // 根據設備高度設置top值,可以做到在不同設備上效果一致
  26.               width: 50, // 控件寬度/px
  27.               height: 50 // 控件高度/px
  28.             },
  29.             clickable: true // 是否可點擊,默認為true,可點擊
  30.           },
  31.           {
  32.             id: 2,
  33.             iconPath: '/images/use.png',
  34.             position: {
  35.               left: res.windowWidth/2 - 45,
  36.               top: res.windowHeight - 100,
  37.               width: 90,
  38.               height: 90
  39.             },
  40.             clickable: true
  41.           },
  42.           {
  43.             id: 3,
  44.             iconPath: '/images/warn.png',
  45.             position: {
  46.               left: res.windowWidth - 70,
  47.               top: res.windowHeight - 80,
  48.               width: 50,
  49.               height: 50
  50.             },
  51.             clickable: true
  52.           },
  53.           {
  54.             id: 4,
  55.             iconPath: '/images/marker.png',
  56.             position: {
  57.               left: res.windowWidth/2 - 11,
  58.               top: res.windowHeight/2 - 45,
  59.               width: 22,
  60.               height: 45
  61.             },
  62.             clickable: false
  63.           },
  64.           {
  65.             id: 5,
  66.             iconPath: '/images/avatar.png',
  67.             position: {
  68.               left: res.windowWidth - 68,
  69.               top: res.windowHeight - 155,
  70.               width: 45,
  71.               height: 45
  72.             },
  73.             clickable: true
  74.           }]
  75.         })
  76.       }
  77.     });
  78. }
  79. // 頁面顯示
  80.   onShow: function(){
  81.     ...已省略
  82.   },
  83. // 定位函數,移動位置到地圖中心
  84.   movetoPosition: function(){
  85.     this.mapCtx.moveToLocation();
  86.   }
  87. })
復制代碼

tips: 我們在給控件設置top,left值時,用到了設備寬高。這樣的話我們的控件位置就會在所有不同比例的設備上顯示相同的效果了

我們再為地圖控件綁定事件

現在地圖上總共有四個圖標可點擊(地圖中心的標記控件不需要點擊,是用來指示中心位置的),所有我們需要為每個控件綁定不同的事件以實現不同的功能:
  • 點擊定位控件,定位當前位置到地圖中心,因為用戶在拖動地圖,有時需要回到當前所在位置。
  • 點擊立即用車控件,調用微信內置掃碼功能。然后獲取開鎖密碼。
  • 點擊舉報按鈕,前往維修報障頁面。
  • 點擊用戶頭像按鈕,前往登錄頁面進行登錄,查看余額,充值等操作

為控件綁定事件,同樣需要在地圖控件進行聲明:
  1. <!--index.wxml-->
  2. <view class="container">
  3.   <map id="ofoMap"
  4.     latitude="{{latitude}}"  // 緯度
  5.     longitude="{{longitude}}"  // 經度
  6.     scale="{{scale}}"  // 縮放級別
  7.     controls="{{controls}}" // 地圖控件數組,多個控件存放在數組里
  8.     bindcontroltap="bindcontroltap" // 控件點擊事件
  9.     show-location/>    // 顯示帶有方向的小圓點
  10. </view>
復制代碼


注意: bindcontroltap事件會響應所有控件的點擊,所以,我們需要根據控件id來區分控件,然后響應不同的事件。這就是為什么要給控件設置id。

在index.js添加bindcontroltap事件:
  1. //index.js
  2. Page({
  3.   data: {
  4.     scale: 18,
  5.     latitude: 0,
  6.     longitude: 0
  7.   },
  8. // 頁面加載
  9.   onLoad: function(options){
  10.   // 1.獲取定時器,用于判斷是否已經在計費
  11.     this.timer = options.timer;
  12.    
  13.   // 2.調用wx.getLocation系統API,獲取并設置當前位置經緯度
  14.     ...已省略
  15.    
  16.   // 3.設置地圖控件的位置及大小,通過設備寬高定位
  17.     ...已省略
  18. }
  19. // 地圖控件點擊事件
  20.   bindcontroltap: function(e){
  21.     // 判斷點擊的是哪個控件 e.controlId的值是當前點擊控件的id。
  22.     switch(e.controlId){
  23.       // 點擊定位控件
  24.       case 1: this.movetoPosition();
  25.         break;
  26.       // 點擊立即用車,判斷當前是否正在計費,此處只需要知道是調用掃碼,后面會講到這里的判斷條件
  27.       case 2: if(this.timer === "" || this.timer === undefined){
  28.           // 沒有在計費就掃碼
  29.           wx.scanCode({
  30.             success: (res) => {
  31.               // 正在獲取密碼通知
  32.               wx.showLoading({
  33.                 title: '正在獲取密碼',
  34.                 mask: true // 顯示蒙層
  35.               })
  36.               // 請求服務器獲取密碼和車號
  37.               wx.request({
  38.                 url: 'https://www.easy-mock.com/mock/59098d007a878d73716e966f/ofodata/password',
  39.                 data: {},
  40.                 method: 'GET',
  41.                 success: function(res){
  42.                   // 請求密碼成功隱藏等待框
  43.                   wx.hideLoading();
  44.                   // 攜帶密碼和車號跳轉到密碼頁
  45.                   wx.redirectTo({
  46.                     url: '../scanresult/index?password=' + res.data.data.password + '&number=' + res.data.data.number,
  47.                     success: function(res){
  48.                       wx.showToast({
  49.                         title: '獲取密碼成功',
  50.                         duration: 1000
  51.                       })
  52.                     }
  53.                   })           
  54.                 }
  55.               })
  56.             }
  57.           })
  58.         // 當前已經在計費就回退到計費頁
  59.         }else{
  60.           wx.navigateBack({
  61.             delta: 1
  62.           })
  63.         }  
  64.         break;
  65.       // 點擊保障控件,跳轉到報障頁
  66.       case 3: wx.navigateTo({
  67.           url: '../warn/index'
  68.         });
  69.         break;
  70.       // 點擊頭像控件,跳轉到個人中心
  71.       case 5: wx.navigateTo({
  72.           url: '../my/index'
  73.         });
  74.         break;
  75.       default: break;
  76.     }
  77.   },
  78. // 頁面顯示
  79.   onShow: function(){
  80.     ...已省略
  81.   },
  82. // 定位函數,移動位置到地圖中心
  83.   movetoPosition: function(){
  84.     this.mapCtx.moveToLocation();
  85.   }
  86. })
復制代碼

這里用到的API:
掃碼API: wx.scanCode({})
顯示加載框: wx.showLoading()
隱藏加載框: wx.hideLoading()
顯示提示框: wx.showToast()
隱藏提示框: wx.hideToast()
向服務器發送請求:wx.request({})
關閉當前頁面,跳轉到指定頁面: wx.redirectTo({})
保留當前頁面,跳轉到指定頁面: wx.navigateTo({})
回退到指定頁面: wx.naivgateBack({})

查看詳細用法,查看官方API文檔

tips:  跳轉頁面傳參示例:
  1. let num = 1;
  2. wx.navigateTo({
  3.     url: '../other/index?num=' + num
  4. });
  5. // other頁面onLoad接受參數
  6. onLoad: function(options){
  7.     console.log(options.num); // 1
  8. }
  9. // 多個參數用&分隔,如 'index?num=' + num + '&text=' + 'text'
  10.  
復制代碼

我們現在在地圖上添加單車標記makers和位置連線,還是在地圖組件里先聲明:
  1. <!--index.wxml-->
  2. <view class="container">
  3.   <map id="ofoMap"
  4.     latitude="{{latitude}}"  // 緯度
  5.     longitude="{{longitude}}"  // 經度
  6.     scale="{{scale}}"  // 縮放級別
  7.     controls="{{controls}}" // 地圖控件數組,多個控件存放在數組里
  8.     bindcontroltap="bindcontroltap" // 控件點擊事件
  9.     polyline="{{polyline}}"  // 位置連線
  10.     markers="{{markers}}" // 標記數組
  11.     bindmarkertap="bindmarkertap" // 標記點擊事件
  12.     show-location/>    // 顯示帶有方向的小圓點
  13. </view>
復制代碼

然后在index.js里定義:
  1. //index.js
  2. Page({
  3.   data: {
  4.     scale: 18,
  5.     latitude: 0,
  6.     longitude: 0
  7.   },
  8. // 頁面加載
  9.   onLoad: function(options){
  10.   // 1.獲取定時器,用于判斷是否已經在計費
  11.     this.timer = options.timer;
  12.    
  13.   // 2.調用wx.getLocation系統API,獲取并設置當前位置經緯度
  14.     ...已省略
  15.    
  16.   // 3.設置地圖控件的位置及大小,通過設備寬高定位
  17.     ...已省略
  18.    
  19.   // 4.請求服務器,顯示附近的單車,用marker標記
  20.     wx.request({
  21.       url: 'https://www.easy-mock.com/mock/59098d007a878d73716e966f/ofodata/biyclePosition',
  22.       data: {},
  23.       method: 'GET',
  24.       // header: {}, // 設置請求的 header
  25.       success: (res) => {
  26.           this.setData({
  27.             markers: res.data.data
  28.           })
  29.       }
  30.     })
  31. }
  32. // 地圖控件點擊事件
  33.   bindcontroltap: function(e){
  34.     ...已省略
  35.   },
  36. // 地圖標記點擊事件,連接用戶位置和點擊的單車位置
  37.   bindmarkertap: function(e){
  38.     let _markers = this.data.markers; // 拿到標記數組
  39.     let markerId = e.markerId; // 獲取點擊的標記id
  40.     let currMaker = _markers[markerId]; // 通過id,獲取當前點擊的標記
  41.     this.setData({
  42.       polyline: [{
  43.         points: [{ // 連線起點
  44.           longitude: this.data.longitude,
  45.           latitude: this.data.latitude
  46.         }, { // 連線終點(當前點擊的標記)
  47.           longitude: currMaker.longitude,
  48.           latitude: currMaker.latitude
  49.         }],
  50.         color:"#FF0000DD", // 連線顏色
  51.         width: 1, // 連線寬度
  52.         dottedLine: true // 虛線
  53.       }],
  54.       scale: 18
  55.     })
  56.   },
  57. // 頁面顯示
  58.   onShow: function(){
  59.     ...已省略
  60.   },
  61. // 定位函數,移動位置到地圖中心
  62.   movetoPosition: function(){
  63.     this.mapCtx.moveToLocation();
  64.   }
  65. })
復制代碼

我在easy-mock上偽造了一些單車的經緯度,是基于我自己的位置。你可以在你周圍設置經緯度,使用easy-mock偽造。可以看一下我的數據格式,單車經緯度接口

接下來我們為用戶拖動地圖綁定事件
我們已經為地圖控件和標記響應了不同的事件,現在如果用戶拖動地圖,我們需要在拖動附近顯示單車,先在地圖組件聲明地圖拖動事件:
  1. <!--index.wxml-->
  2. <view class="container">
  3.   <map id="ofoMap"
  4.     latitude="{{latitude}}"  // 緯度
  5.     longitude="{{longitude}}"  // 經度
  6.     scale="{{scale}}"  // 縮放級別
  7.     controls="{{controls}}" // 地圖控件數組,多個控件存放在數組里
  8.     bindcontroltap="bindcontroltap" // 控件點擊事件
  9.     polyline="{{polyline}}"  // 位置連線
  10.     markers="{{markers}}" // 標記數組
  11.     bindmarkertap="bindmarkertap" // 標記點擊事件
  12.     bindregionchange="bindregionchange" // 拖動地圖事件
  13.     show-location/>    // 顯示帶有方向的小圓點
  14. </view>
  15.  
復制代碼

然后在index.js里實現這個事件方法:
  1. //index.js
  2. Page({
  3.   data: {
  4.     scale: 18,
  5.     latitude: 0,
  6.     longitude: 0
  7.   },
  8. // 頁面加載
  9.   onLoad: function(options){
  10.   // 1.獲取定時器,用于判斷是否已經在計費
  11.     this.timer = options.timer;
  12.    
  13.   // 2.調用wx.getLocation系統API,獲取并設置當前位置經緯度
  14.     ...已省略
  15.    
  16.   // 3.設置地圖控件的位置及大小,通過設備寬高定位
  17.     ...已省略
  18.    
  19.   // 4.請求服務器,顯示附近的單車,用marker標記
  20.     ...已省略
  21. }
  22. // 地圖控件點擊事件
  23.   bindcontroltap: function(e){
  24.     ...已省略
  25.   },
  26. // 拖動地圖事件
  27.   bindregionchange: function(e){
  28.     // 拖動地圖,獲取附件單車位置
  29.     if(e.type == "begin"){
  30.       wx.request({
  31.         url: 'https://www.easy-mock.com/mock/59098d007a878d73716e966f/ofodata/biyclePosition',
  32.         data: {},
  33.         method: 'GET',
  34.         success: (res) => {
  35.           this.setData({
  36.             _markers: res.data.data
  37.           })
  38.         }
  39.       })
  40.     // 停止拖動,顯示單車位置
  41.     }else if(e.type == "end"){
  42.         this.setData({
  43.           markers: this.data._markers
  44.         })
  45.     }
  46.   },
  47. // 地圖標記點擊事件,連接用戶位置和點擊的單車位置
  48.   bindmarkertap: function(e){
  49.     ...已省略
  50.   },
  51. // 頁面顯示
  52.   onShow: function(){
  53.     ...已省略
  54.   },
  55. // 定位函數,移動位置到地圖中心
  56.   movetoPosition: function(){
  57.     this.mapCtx.moveToLocation();
  58.   }
  59. })
復制代碼


至此,首頁地圖已經完成了,下一節我們要編寫響應的跳轉頁面

其他章節
微信小程序開發之OFO共享單車——掃碼
微信小程序開發之OFO共享單車——單車報障頁
微信小程序開發之OFO共享單車——個人中心頁
微信小程序開發之OFO共享單車——錢包與充值

重磅推薦:小程序開店目錄

第一部分:小商店是什么

第二部分:如何開通一個小商店

第三部分:如何登錄小商店

第四部分:開店任務常見問題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結算

第十部分:小程序客服

第十一部分:電商創業

第十二部分:小程序游戲開發

主站蜘蛛池模板: HD性丰满白嫩白嫩少妇=aV|免费成人黄色大片|久久精品中文字幕|久久无码国产专区精品|欧美=a∨|91精品一久久香蕉国产线看观看软件 | 国产成人毛片在线视频软件|日韩欧美一区二区三区不卡在线|中文亚洲字幕|91=av在线影院|涩涩视频在线看|欧美日韩在线观看二区视频 | zzijzzij亚洲日本少妇jizjiz|日韩精品在线视频播放|欧美亚洲黄色片|99久久国产福利自产拍|日韩人妻潮喷中文在线视频|亚洲精品字幕在线观看 | 亚洲国产精品一区二区制服换脸|中文字幕极品|文中字幕一区二区三区视频播放|亚洲欧洲美洲综合色网|成人爱爱=a=a啪啪看片|五十六十老熟女HD60 | 伊人偷拍视频|久久久久99精品成人片三人毛片|午夜影院中文字幕|J=aP=aNESE国产中文在线观看|久久国产精品福利二区三区|yy8090新视觉午夜毛片 | 国产免费=ab|视频精品在线观看|国产小视频毛片|高潮好爽视频在线观看|欧美一区二区大片|三级黄片毛片 | 久久精品欧美一区二区|国产91精品网站|精品免费|亚洲=aV无码一区二区乱孑伦=aS|超碰影院在线观看|內射XXX韩国在线观看 | 国产一区二区三区片|一区二区视频在线看|欧美=av在线|国产熟妇疯狂4P交在线播放|亚洲精品午夜无码专区|亚洲=aⅴ精品国产首次亮相 | 国内精品久久国产|国产一区二区三区内射高清|一二三四视频在线社区中文字幕2|大地资源在线观看中文免费|午夜精品免费观看|无码成人18禁动漫网站 | chinese一区二区|亚洲国产综合在线播放=av66|午夜视频=a|99热这里|夜夜操影院|#NAME? | 阿v天堂2018在无码免费|男人添女人下身视频网站|日韩精品久久久久久免费|日韩爱爱免费视频|视频在线精品一区|成人欧美一区二区三区视频xxx | 天天看片导航|又粗又猛又黄又爽无遮挡|人妻无码专区一区二区三区|国产l精品国产亚洲区久久|少妇被又大又粗猛烈进出视频|国产精品夜色一区二区三区 | 欧美成人一二三|一区二区国产在线|欧美黑人激情性久久|欧美性大战久久久久久久蜜桃|亚洲色播爱爱爱爱爱爱爱|亚洲日本二区 | 一区二区三区日韩视频在线观看|日韩欧美在线观看一区|91精品一区二区三区久久|FREEZEFR=aME丰满人妻|亚洲=aV无码一区二区二三区|欧美综合区自拍亚洲综合绿色 | 成人国产午夜在线观看|久久综合九色综合97欧美|99视频免费观看|久久久久久久国产精品毛片|久久99精品国产99久久|天堂成人国产精品一区 | 大地免费资源|成人综合色区|无码综合天天久久综合网|男人猛躁女人网站|国产午夜福利小视频合集|国产女人与公拘交在线播放 | 亚洲精品小区久久久久久|日韩欧美久久精品|男女网站免费|中文=av字幕在线|免费看片91|中美日韩毛片免费观看 | 日韩一级片网站|#NAME?|国产在线可以看麻豆|亚洲高清免费视频|中文字幕内射无码制服剧情|伊人色综合九久久天天蜜桃 | chin=a熟妇老熟女hd|精品国产国产综合精品|成人亚洲精品777777ww|欧美日本一道本在线视频|欧美肥屁videossex精品|高潮毛片无遮挡高清免费视频 | 国产高跟丝袜脚交视频|最短的距离是圆的高清在线观看|一区二区三区视频播放|国产精品黄页在线播放免费|#NAME?|精品国产乱码久久久久久中文 | 日韩精品成人=av|午夜精品一区二区三区免费视频|亚洲精品国产综合久久一线|国产三级=aV在在线观看|GV无码免费无禁网站男男|欧美videos另类极品 | 亚洲人成77777在线播放网站|逼逼久久|亚洲最大成人网4388xx|国产=a级黄色录像|日韩高清国产一区在线|无码综合天天久久综合网色吧影院 | 中文乱码人妻一区二区三区视频|亚洲高清专区|中文毛片无遮挡高潮免费|黄人成=a动漫片免费网站|99re在线免费|女乱淫免费看视频大黄 | 一级影片在线观看|亚洲精品久久久久9999吃药|免费毛片wwwcomcn|91一级片|超碰人人精品|GOGO亚洲肉体艺术 | 羞羞涩涩网站|亚洲高清免费看|色爱天堂|国产一级无码片在线观看免费|91=av视频观看|推川悠里在线观看=av影片 | 精品久久久成人|欧美人与性囗牲恔配|漂亮人妇中出中文字幕在线|91=avpornwwww蝌蚪99|狠狠爱亚洲|久久亚洲一区二区三区四区五区高 | 法国少妇XXXX做受|狂野欧美性猛xxxx乱大交|天堂在线最新版www资源|国产在观线免费观看久久|国产综合自拍|午夜毛片在线 | 亚洲久久综合|久久伊甸园|青草国产超碰人人添人人碱|91资源在线播放|九九九免费观看视频|又黄又爽的免费视频 | 国产人妖在线|国产午夜福利在线播放|亚洲国产成人精品久久久国产成人|高柳の肉嫁动漫在线播放|日韩久久精品一区二区三区|精品偷自拍另类在线观看 | 欧美人人|91精品久久久久久综合|日本一区二区三区视频视频|欧美老熟妇乱子伦视频|91精品国产99久久久久|国产不卡三区 | 中文字幕亚洲码在线|国变精品美女久久久久=av爽|一区在线免费观看|精品91久久|国产精品成人=a片在线播放免费|小12萝裸乳无码 | 91看片网页版|郎在远方免费观看|色偷偷噜噜噜亚洲男人|国产成人免费在线观看不卡|欧美国产日韩=a在线观看|韩国在线观看=av | 亚洲=av禁18成人毛片一级在线|九九在线视频免费观看|饥渴少妇高潮正在播放|欧美成人精品高清视频在线观看|伊人久久大香线蕉综合色狠狠|黄色片一级的 | CHINESE熟女熟妇1乱|亚洲一区二区三区乱码=aⅴ蜜桃女|最新国产福利一区二区免费视频|爱豆传媒国产剧情|国産精品久久久久久久|超碰超碰在线 | 牛牛热在线视频|久久精品2024|久久久久久国产一区二区三区|波多野结衣乳巨码无在线观看|亚洲综合色视频在线观看|草的爽=aV导航 | 中文字幕在线中文乱|精品videossexfreeohdbbw|青青青国产在线视频在线观看|91国在线视频|性xxxx搡xxxxx搡欧美|婷婷中文 | 高清视频在线播放|天堂资源在线www中文|无码人妻=aⅤ一区二区三区|亚洲一区中文字幕永久在线|中文字幕第27页|免费69视频 | j=ap=anese熟睡侵犯|无码精品日韩中文字幕|国产黄色在线看|欧美高清g=ayxxx|日韩每日更新|777777影院 | 亚洲国产一区在线观看|免费=a级伦费影视在线观看|日本在线不卡一区二区三区|91在线免费视频观看|俄罗斯=a级毛片|丁香五月开心婷婷综合中文 | 偷看农村女人做爰毛片色|亚洲成人=av在线播放|国内视频一区|国产三级黄色|久久色亚洲|91精选国产 | 亚洲wwww|给个毛片网站|欧美日韩伦理在线|日本妈妈黄色片|日韩毛片在线观看|久久精品观看 |