溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

類似滴滴打車小程序系統(tǒng)開(kāi)發(fā)的方法

發(fā)布時(shí)間:2022-03-15 09:55:30 來(lái)源:億速云 閱讀:259 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“類似滴滴打車小程序系統(tǒng)開(kāi)發(fā)的方法”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“類似滴滴打車小程序系統(tǒng)開(kāi)發(fā)的方法”文章能幫助大家解決問(wèn)題。

類似滴滴打車小程序系統(tǒng)開(kāi)發(fā)的方法

功能一:滴滴首頁(yè)

功能描述:頂部導(dǎo)航的制作,點(diǎn)擊相應(yīng)的nav頁(yè)面呈現(xiàn)不同的內(nèi)容,并且點(diǎn)擊時(shí)能判斷是向前還是向后自動(dòng)滑出下一個(gè)nav,實(shí)現(xiàn)動(dòng)畫(huà)過(guò)度效果。輸入起始位置模擬等待的時(shí)間。
實(shí)現(xiàn)原理:

  • 模擬等待時(shí)間加載效果,使用組件化的概念,創(chuàng)建一個(gè)template文件夾

<template name="sprinner"><block wx:if="{{isLoading}}">   <view class="spinner">   <view class="bounce1"></view>   <view class="bounce2"></view>   <view class="bounce3"></view>   </view></block>
</template>

在需要用到加載效果的地方就可以直接使用,

 <import  src="/templates/sprinner.wxml" /><template is="sprinner" data='{{isLoading}}'></template>//通過(guò)去設(shè)置isLoading的布爾值來(lái)判斷是否需要顯示
  • 頭部導(dǎo)航并且點(diǎn)擊時(shí)能判斷滑出方向以及自動(dòng)滑出,我們可以通過(guò)一個(gè)scroll-left="{{navScrollLeft}}"這個(gè)屬性去設(shè)置,點(diǎn)擊nav我們可以動(dòng)態(tài)的去改變這個(gè)值,從而達(dá)到這種效果。

  <scroll-view scroll-x="true" class="nav" scroll-left="{{navScrollLeft}}" scroll-with-animation="{{true}}"><block wx:for="{{navData}}" wx:for-index="id"  wx:for-item="navItem" wx:key="index"><view class="nav-item {{currentTab == id ?'active':''}}"  data-name="{{navItem.name}}" data-current="{{id}}" bindtap="switchNav">{{navItem.name}}</view></block>        
    </scroll-view>

怎樣去改變這個(gè)navScrollLeft的值呢?一開(kāi)始想的是去設(shè)置一下nav的導(dǎo)航的left,然后超出則隱藏??影?,根本就實(shí)現(xiàn)不了。無(wú)法判斷左滑出還是又滑出,后來(lái)又想到設(shè)置一個(gè)閾值。累真的難寫(xiě)。好像放棄啊,還是堅(jiān)持下吧,于是想到分開(kāi)來(lái)取寫(xiě)他們的js

switchNav(e){
   var cur = e.currentTarget.dataset.current; 
        var singleNavWidth = this.data.windowWindth/4; //獲取屏幕寬度存放放四個(gè)nav,
        this.setData({
            navScrollLeft: (cur - 1) * singleNavWidth, //點(diǎn)擊去減少每一個(gè)nav的值
            currentTab: cur,
        })  
 switchTab(e){
        var cur = event.detail.current;
        var singleNavWidth =55; //設(shè)置每一個(gè)nav的寬度
        this.setData({
            currentTab: cur,
            navScrollLeft: (cur - 1) * singleNavWidth //同樣動(dòng)態(tài)的去改變這個(gè)值
        });
    },

第一次打理這種頂部導(dǎo)航效果的小程序,而卻還帶一點(diǎn)特效的。以后的你如果碰到了就可以回來(lái)借鑒借鑒,避免跟我一樣,在這里浪費(fèi)大量的時(shí)間和精力了。我們可是要完成有效時(shí)間創(chuàng)建更大價(jià)值的程序猿呀...

功能二: 起始位置的選擇

為了做這個(gè)效果,反反復(fù)復(fù)的看了n遍文檔,真的是比較坑爹。微信小程序api對(duì)于地圖這方面講的確實(shí)不怎么詳細(xì),可能是我這種對(duì)地圖處理天生迷茫的人。這里將詳細(xì)的把我遇到的問(wèn)題一一列舉出來(lái),希望也能夠幫助到今后的你去處理地圖這種東西少踩點(diǎn)坑吧。


這里使用到了關(guān)鍵詞搜索,逆地址解析,地址解析,切換城市列表,建議以后做這個(gè)可以了解下騰訊地圖api,還是比較方便的

var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');//導(dǎo)入需要使用的包,創(chuàng)建一個(gè)libs文件夾
var qqmapsdk;
qqmapsdk = new QQMapWX({
  key:'DHNBZ-2ZLKK-T7IJJ-AXSQW-WX5L6-A6xxxx'//申請(qǐng)自己的開(kāi)發(fā)者密鑰
});
qqmapsdk.reverseGeocoder({ //逆地址解析api,可以根據(jù)你的經(jīng)緯度去解析位置地址
  location: {
    latitude: latitude,
    longitude: longitude,
},
  success: function (res) {
   conslog.log(res)
    }

第一個(gè)坑:如何去獲取經(jīng)緯度呢,移動(dòng)markes?,天吶這要寫(xiě)多少,對(duì)于大牛們來(lái)說(shuō)可能分分分鐘,對(duì)于剛?cè)腴T(mén)的小生來(lái)說(shuō)難度還是挺大大。沉思良久,突然發(fā)現(xiàn) this.mapCtx.getCenterLocation,移動(dòng)地圖事件獲取地圖中心的經(jīng)緯度。那么我們可以去固定一個(gè) controls在地圖中心,去移動(dòng)地圖來(lái)解析他的坐標(biāo)位置,將數(shù)據(jù)綁定在下面顯示出來(lái),于是就實(shí)現(xiàn)了。emmm代碼如下

 bindregionchange: function(e){  //移動(dòng)地圖事件
    var that = this
    this.mapCtx.getCenterLocation({ //getCenterLocation可以獲取地圖中點(diǎn)的經(jīng)緯度
      success: function (res) {
        app.globalData.strLatitude=res.latitude  //存放到全局去,供后面計(jì)算價(jià)格使用
        app.globalData.strLongitude= res.longitude
      qqmapsdk.reverseGeocoder({
        location: {
          latitude:  res.latitude, //通過(guò)移動(dòng)地圖可以得到相應(yīng)中心點(diǎn)的經(jīng)緯度
          longitude: res.longitude,
      },
      success: function (res) {
        that.setData({
          address: res.result.address, //得到的經(jīng)緯度逆地址解析得到我們的位置信息
          bluraddress: res.result.formatted_addresses.recommend
        })
      },
      });

第二個(gè)坑: 目的地調(diào)用api一樣可以實(shí)現(xiàn)搜索提示功能,但我需要?dú)v史記錄也存在,并且點(diǎn)擊某一項(xiàng)我需要跳轉(zhuǎn)到首頁(yè)顯示出來(lái),沒(méi)有歷史的頁(yè)面體驗(yàn)感極差。是否?這里我是這樣實(shí)現(xiàn)的

qqmapsdk.getSuggestion({ //調(diào)用api實(shí)現(xiàn)關(guān)鍵詞搜索提示
      keyword: value, //傳遞input的值,這里要傳value不是'value',剛開(kāi)始犯困。提示一下
      region: '南昌', 
      success: function(res){
        let data = res.data
      that.setData({
        address: data, 
        value
      })
 <view wx:if="{{!value==''}}" class="destination" wx:for="{{address}}" data-destination="{{item.title}}" data-end="{{item.address}}" bindtap="toIndex" wx:key="{{item.id}}">
 
<view wx:if="{{value==''}}" class="destination" wx:for="{{ entity}}" data-destination="{{item.title}}" data-end="{{item.address}}" bindtap="toIndex" wx:key="{{item.id}}">

通過(guò)wx:if去判斷輸入框。下面for不同的數(shù)組,填了第一小坑坑。接下來(lái)就會(huì)去思考,當(dāng)我們點(diǎn)擊搜索的怎么把它加入到我們的歷史中呢?點(diǎn)擊獲取那個(gè)值的id然后push到歷史數(shù)組中去,是不是很nice,實(shí)現(xiàn)了滴滴起始位置的選擇,當(dāng)然我們這這是冰山一角,強(qiáng)大的背后還需要去探索。

功能三: 滴滴費(fèi)用計(jì)算

古人云:細(xì)節(jié)決定成敗,一個(gè)良好的微信小程序往往就是一些細(xì)節(jié)打動(dòng)人心,居然是模仿,雖做不到百分百,至少還是很希望一模一樣。

分析分析,首頁(yè)點(diǎn)擊呼叫快車頁(yè)面不跳轉(zhuǎn),但要顯示不同的內(nèi)容。是不是也可以跟上面一樣用wx:if來(lái)處理呢?沒(méi)錯(cuò)用一個(gè)repeat去承載要顯示的內(nèi)容,這樣就可以不在刷星這個(gè)小技巧get到了嗎。

<repeat wx:if="{{callCart}}">
<repeat wx:else>

計(jì)算價(jià)錢(qián)一樣用到了騰訊地圖api獲取兩點(diǎn)之間的距離,剛才把起始點(diǎn)都存放在globalData里,這樣的好處是,可以隨時(shí)得到里面的數(shù)據(jù)

 let {endLatitude,endLongitude} = app.globalData  //使用ES6的語(yǔ)法去結(jié)構(gòu)數(shù)據(jù)   
 
 qqmapsdk.calculateDistance({
            mode: 'driving',
            to:[ {
              latitude: endLatitude,
              longitude:endLongitude
          }],
          success: (res)=> {
            var num1 = 8+1.9*(res.result.elements[0].distance/1000)
            var play1 = num1.toFixed(1) //取一位小數(shù)點(diǎn)
            app.globalData.play= play1 //同樣存放在全局里,后面訂單結(jié)束支付要用上
            this.setData({
                play1:play1,
            })
          },

關(guān)于“類似滴滴打車小程序系統(tǒng)開(kāi)發(fā)的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI