金秋之后,便是寒冬。2017年就要過(guò)去了,這一年承載了太多的記憶,一個(gè)騰訊視頻demo,幫助我們記錄下來(lái)這些或難過(guò),或美好,或感動(dòng)的瞬間。

一個(gè)仿騰訊視頻的小程序:

開(kāi)發(fā)工具:

  • 微信開(kāi)發(fā)者工具
  • 小程序開(kāi)發(fā)文檔
  • iconfont矢量圖標(biāo)庫(kù):可以找到合適的tabBar圖標(biāo)
  • eas-mock:提供虛擬數(shù)據(jù)接口
  • wilddog:實(shí)現(xiàn)毫秒級(jí)的實(shí)時(shí)數(shù)據(jù)同步功能,無(wú)需自己構(gòu)建后端服務(wù)器

項(xiàng)目功能:

1.已經(jīng)實(shí)現(xiàn)功能:

  • 首頁(yè)界面的還原
  • 加載,刷新,跳轉(zhuǎn)等基礎(chǔ)事件
  • swiper, scroll等滑動(dòng)事件
  • 利用easy-mock實(shí)現(xiàn)從后臺(tái)獲取數(shù)據(jù)等
  • 利用wilddog實(shí)現(xiàn)搜索歷史記錄,微信登錄功能等

2.仍在努力的功能:

  • 精準(zhǔn)搜索匹配
  • 評(píng)論,回復(fù)等功能
  • 觀看歷史功能

頁(yè)面注冊(cè):

"pages/index/index", //主頁(yè)
"pages/videos/videos", //短視頻
"pages/mine/mine", //我的
"pages/search/search", //首頁(yè)和頻道頁(yè)面鏈接的搜索界面
"pages/channel/channel", //頻道
"pages/playing/playing", //播放界面

項(xiàng)目展示:

1.首頁(yè)的展示:

首頁(yè)其實(shí)是比較好看的,美觀大方,很可惜官方已經(jīng)改版了

  • 每一個(gè)swiper的背景和先進(jìn)張圖片是綁定的

index.wxml部分代碼

<image class="top-image" src="{{bannerList[activeBannerIndex].url}}" mode="widthFix"></image>

index.js部分代碼

bannerList  : [
  {
    url : "../../images/hu_1.png"
  },{
    url :  "../../images/huang_1.jpg"
  },{
    url :  "../../images/zhao_1.jpg"
  }
  ],

2.短視頻,頻道界面的展示:

  • 這里的數(shù)據(jù)是從easy-mock獲得的

  • 這是我的接口,沒(méi)有做很多,大家可以用來(lái)練練手,后續(xù)會(huì)增加的

    <swiper-item>
                  <view class="swiper-item weui-tab__content" wx:for="{{wangzhe}}">
                      <view class="contain">
                          <view class="list-title">{{item.label}} ></view>
                          <view class="detail" wx:for="{{item.video}}">
                              <image src="{{item.videoImage}}" mode="widthFix" class="wz"></image>
                              <view class="list-font"><text>{{item.title}}</text></view>
                          </view>
                      </view>
                  </view>
      </swiper-item>
  • 因?yàn)閿?shù)據(jù)都是圖片,所以為了還原真實(shí)性,我用偽元素做了個(gè)三角形播放圖標(biāo)

    .picture ::before
      {
      position: absolute;
      border:11px solid transparent;
      border-left:17px solid #fff;
      content: "";
      top: 100px;
      left: 180px;
      }

3.播放界面的展示:

4.搜索界面的展示:

  • 搜索界面引用了weui樣式

  • @import "./weui.wxss";

    <view class="weui-search-bar">  
          <view class="weui-search-bar__form">  
              <view class="weui-search-bar__box">  
                  <icon class="weui-icon-search_in-box" type="search" size="14"></icon>  
                  <input type="text" class="weui-search-bar__input" placeholder="請(qǐng)輸入片名主演或?qū)а?quot; value="{{inputVal}}" focus="{{inputShowed}}" bindinput="bindKeyInput"/>  
                  <view class="weui-icon-clear"  bindtap="clearInput">  
                      <icon type="clear" size="14"></icon>  
                  </view>  
              </view>  
              <label class="weui-search-bar__label" hidden="{{inputShowed}}" bindtap="showInput">  
                  <icon class="weui-icon-search" type="search" size="14"></icon>  
                  <view class="weui-search-bar__text" bindtap="">搜索</view>  
              </label>  
          </view>  
          <view class="weui-search-bar__cancel-btn" hidden="{{!inputShowed}}" bindtap="addItem">搜索</view>  
      </view>  
      <view>  
          <view  class="search-log" wx:for="{{searchs}}">  
              <text style="font-size:14px;font-family:microsoft yahei">{{item.text}}</text>
              <icon type="clear"  class="inline" bindtap="deleteItem" data-key="{{item.key}}" size="14"></icon>
          </view>      
      </view>
  • 隱藏了搜索記錄和搜索框 data:{

    searchs:[], current:null, hidden:true, // 加載提示框是否顯示

    scrollTop : 0, // 居頂部高度

    inputShowed: false, // 搜索輸入框是否顯示

    inputVal: "", // 搜索的內(nèi)容

    histroyShowed:true //搜索記錄 }

關(guān)于wilddog

利用野狗sdk,我們可以實(shí)現(xiàn)多種實(shí)時(shí)功能,能夠在各個(gè)終端修改后臺(tái)數(shù)據(jù),消息傳遞毫秒可達(dá),能夠?yàn)樾〕绦蜷_(kāi)發(fā)者們上線提供一個(gè)良好的幫助

這是他的官方文檔

  • 首先要導(dǎo)入wilddog-weapp-all.js var wilddog = require('wilddog-weapp-all');

  • 引用創(chuàng)建的接口 var config = { syncURL:'http://appid.wilddogio.com', authDomain:'appid.wilddog.com' } appid為你創(chuàng)建的應(yīng)用id

  • wilddog是以key-value的形式存儲(chǔ)數(shù)據(jù),創(chuàng)建引用會(huì)定位到根節(jié)點(diǎn)。若要定位到子節(jié)點(diǎn),只需在url后追加路徑即可:

  • 利用野狗的child()方法獲取子節(jié)點(diǎn),達(dá)到刪除和增加的功能

    addItem:function(){
          if(this.data.current != null){
            // 將所有的后臺(tái)業(yè)務(wù)交給app.js
            app.addItem(this.data.current)
          }
          this.setData({
            inputVal:""
          })
        },
        deleteItem:function(e){
          var key = e.target.dataset.key;
          this.ref.child(key).remove();
        },
      
        onLoad:function(options){  
          this.ref = app.getTodoRef();
          this.ref.on('child_added',function(snapshot,prkey){
            var key = snapshot.key()
            var text = snapshot.val()
            // JSON結(jié)構(gòu)
            var newItem = {key:key, text:text}
            this.data.searchs.push(newItem);
            this.setData({
              searchs:this.data.searchs
            })
          },this);
          this.ref.on('child_removed',function(snapshot){
            var key = snapshot.key();
            var index = this.data.searchs.findIndex(
              (item,index)=>{
                if(item.key == key){
                  return true;
                }
                return false;
              });
              if(index >= 0){
                this.data.searchs.splice(index,1);
                this.setData({
                  searchs:this.data.searchs
                })
              }
          },this)
        }

一點(diǎn)心得:

1.遇到的問(wèn)題:

  • 寫(xiě)完數(shù)據(jù)后發(fā)現(xiàn)才發(fā)現(xiàn)內(nèi)容全都不見(jiàn)了:

    小程序只支持http:// 服務(wù)請(qǐng)求

  • 用手機(jī)測(cè)驗(yàn)的時(shí)候奇卡無(wú)比:

    在樣式swiper中加入這條代碼就解決了 -webkit-overflow-scrolling : touch;

  • 在手機(jī)測(cè)驗(yàn)時(shí),整個(gè)頁(yè)面會(huì)隨著滑動(dòng):

    在樣式中加入超出則隱藏 overflow:hidden;

  • 如果js部分出現(xiàn)問(wèn)題了,那么就應(yīng)該console一下關(guān)鍵數(shù)據(jù),看看是否能夠打印出來(lái),然后慢慢排除

開(kāi)發(fā)的時(shí)候遇到了一些問(wèn)題,是需要慢慢琢磨的,多看文檔,耐心解決。開(kāi)動(dòng)大腦,好的想法idea是非常重要的,優(yōu)雅的編程,發(fā)散的思維,把你的想象力用代碼來(lái)實(shí)現(xiàn),是一件非常cooooool的事情。

2.幾句閑話:

如果你想要改變世界,那么我們可以做個(gè)朋友。但如果你想要賣(mài)一輩子糖水,那么我們也可以做個(gè)朋友。因?yàn)閷?xiě)代碼,只是為了交個(gè)朋友嘛。有任何問(wèn)題,你可以通過(guò)以下方式找到我: