亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序 實戰小程序實例

2020-03-21 16:31:56
字體:
來源:轉載
供稿:網友

微信小程序,實戰,實戰實例

微信小程序基本組件和API已擼完,總歸要回到正題的,花了大半天時間做了個精簡版的百思不得姐,包括段子,圖片,音頻,視頻,四個模塊。這篇就帶著大家簡述下這個小的APP,源碼會放到GitHub上歡迎start。

項目中我能學到什么?

  1. tabbar使用方式
  2. 網絡調用真實接口
  3. loading使用
  4. scroll-view實現下拉刷新上拉加載
  5. image組件對圖片的處理,
  6. 音樂和視頻組件的使用
  7. 跳轉傳值使用
  8. 等等等。。。。

app.json全局配置文件

{ "pages":[  "pages/word/word",  "pages/image/image",  "pages/voice/voice",  "pages/video/video",  "pages/detail/detail" ], "tabBar": {  "color": "#a9b7b7",  "selectedColor": "#eb4f38",  "borderStyle": "white",  "backgroundColor": "#ffffff",  "list": [   {    "pagePath": "pages/word/word",    "text": "段子",    "iconPath": "image/wordN.png",    "selectedIconPath": "image/wordS.png"   },   {    "pagePath": "pages/image/image",    "text": "圖片",    "iconPath": "image/imageN.png",    "selectedIconPath": "image/imageS.png"   },   {    "pagePath": "pages/voice/voice",    "text": "聲音",    "iconPath": "image/voiceN.png",    "selectedIconPath": "image/voiceS.png"   },   {    "pagePath": "pages/video/video",    "text": "視頻",    "iconPath": "image/videoN.png",    "selectedIconPath": "image/videoS.png"   }  ] }, "window":{  "backgroundTextStyle":"light",  "navigationBarBackgroundColor": "#eb4f38",  "navigationBarTextStyle":"white" }}

微信小程序,實戰,實戰實例

這里我們只要配置下程序全局屬性,每個頁面需要在pags屬性中引入,有時候tabbar不顯示有可能是因為這個,tabbar底部導航Item分為四個就是list里面的,這里主要配置選中未選中顏色背景色及每個底部選項頁面頁面引入和圖片引入。window 屬性主要配置窗體整體的顏色文字顏色和背景色,這里的window屬性會被每個頁面的window屬性給覆蓋。

app.wxss

/*整體view樣式*/.containsView{ padding: 15rpx 15rpx 15rpx 15rpx; margin-top: 15rpx; margin-bottom: 15rpx; background-color: white;}/*頭部整體樣式*/.topContainsView{ display: flex; flex-direction: row; align-items: center; margin-bottom: 18rpx;}/** * 頭像樣式*/.profileImage{ width: 60rpx; height: 60rpx; border-radius: 30rpx;}/*頭部顯示名字和時間整體樣式*/.topRightView{ margin-left: 15rpx; display: flex; flex-direction: column;}/*用戶名稱樣式*/.topRightName{ font-size: 18rpx;}/*時間樣式*/.topRightTime{ font-size: 14rpx; color: #b8b2b2; margin-top: 10rpx;}/*因為中間部分不一樣不放在整體樣式中*//*底部view整體樣式*/.bottomView{ display: flex; flex-direction: row; justify-content: space-between; align-items: center;}/*每個Item樣式*/.bottomItemView{ display: flex; flex-direction: row; align-items: center; justify-content: center; margin-top: 18rpx; padding-left: 10rpx; padding-right: 10rpx;}/*Item樣式中的圖標樣式 頂 踩 分享 評論*/.bottomItemImage{ width: 45rpx; height: 45rpx;}/*Item中的文字樣式 頂 踩 分享 評論*/.bottomItemText{ font-size: 15rpx; color: #b8b2b2; margin-left: 10rpx; margin-top: 8rpx;}/*分割線樣式*/.divLine{ background: #f3f3f3; width: 100%; height: 15rpx;}

微信小程序,實戰,實戰實例

app.wxss我將四個模塊分為三個部分 頭部,內容區域, 底部因為每個頁面頭部,底部樣式都一樣而中間部分不一樣所以我把1,3抽到全局中,注釋比較清晰

段子模塊

word.wxml

<loading hidden="{{loadingHidden}}">正在加載...</loading><scroll-view scroll-y="true" bindscrolltoupper="bindscrolltoupper" bindscrolltolower="bindscrolltolower" style="height: 100%"> <block wx:for-items="{{list}}">  <!-- 分割線 -->  <view class="divLine"></view>  <!-- 整體item樣式 -->  <view class="containsView">   <view class="topContainsView">    <image class="profileImage" src="{{item.profile_image}}" />    <view class="topRightView">     <text class="topRightName">{{item.name}}</text>     <text class="topRightTime">{{item.passtime}}</text>    </view>   </view>   <!-- 中間內容 -->   <text class="centerContent">{{item.text}}</text>   <!-- 底部view樣式 -->   <view class="bottomView">    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/ding.png" />     <text class="bottomItemText">{{item.ding}}</text>    </view>    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/cai.png" />     <text class="bottomItemText">{{item.cai}}</text>    </view>    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/share.png" />     <text class="bottomItemText">{{item.repost}}</text>    </view>    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/comment.png" />     <text class="bottomItemText">{{item.comment}}</text>    </view>   </view>  </view> </block></scroll-view>

外層我們用scroll-view包裹以實現加載更多和上拉刷新 bindscrolltoupper=”bindscrolltoupper” 這個屬性當滑動到頂部會調用這個方法bindscrolltolower=”bindscrolltolower”這個則滑到底部會調用,起始這里還可以將頭部和底部布局抽出來通過引入方式使用,就不用四個頁面都寫了,自己可以弄下

word.js

Page({ data: {  list: [],  maxtime: '',  loadingHidden: false }, onLoad: function (options) {  // 頁面初始化 options為頁面跳轉所帶來的參數  //加載最新  this.requestData('newlist'); }, /**  * 上拉刷新  */ bindscrolltoupper: function () {  //加載最新  // this.requestData('newlist'); }, /**  * 加載更多  */ bindscrolltolower: function () {  console.log('到底部')  //加載更多  this.requestData('list'); }, /**  * 請求數據  */ requestData: function (a) {  var that = this;  console.log(that.data.maxtime)  wx.request({   url: 'http://api.budejie.com/api/api_open.php',   data: {    a: a,    c: 'data',    maxtime: that.data.maxtime,    type: '29',   },   method: 'GET',   success: function (res) {    console.log(res)    console.log('上一頁', that.data.list)    that.setData({     // 拼接數組     list: that.data.list.concat(res.data.list),     loadingHidden: true,     maxtime: res.data.info.maxtime    })   }  }) }, onReady: function () {  // 頁面渲染完成 }, onShow: function () {  // 頁面顯示 }, onHide: function () {  // 頁面隱藏 }, onUnload: function () {  // 頁面關閉 }})

微信小程序,實戰,實戰實例

這里通過requestData方法加載數據,這個方法接受個參數,就是通過這個參數加載最新還是更多,通過maxtime這個參數去加載下一頁,上一頁的maxtime作為加載下一頁的條件, 加載下一頁數據我們通過concat方法將數組進行拼接,并改變加載狀態loading。word.wxml和word.json中一個設置內容字體大小,一個設置導航條字,就不貼了。

圖片模塊

微信小程序,實戰,實戰實例

image.wxml

<loading hidden="{{loadingHidden}}">正在加載...</loading><scroll-view scroll-y="true" bindscrolltolower="bindscrolltolower" style="height: 100%"> <block wx:for-items="{{list}}">  <!-- 分割線 -->  <view class="divLine"></view>  <!-- 整體item樣式 -->  <view class="containsView">   <view class="topContainsView">    <image class="profileImage" src="{{item.profile_image}}" />    <view class="topRightView">     <text class="topRightName">{{item.name}}</text>     <text class="topRightTime">{{item.passtime}}</text>    </view>   </view>   <text style="font-size: 30rpx">{{item.text}}</text>   <!-- 當時gif圖 -->   <view wx:if="{{item.is_gif != 0}}" style="position: relative;">    <image class="centerContent" src="{{item.cdn_img}}" mode="aspectFill" />   </view>   <!-- 普通大圖 可點擊查看全部圖片 -->   <view data-url="{{item.cdn_img}}" data-height="{{item.height}}" data-width="{{item.width}}"      bindtap="lookBigPicture" wx:elif="{{item.is_gif == 0}}" style="position: relative;">    <!-- 圖片資源 -->    <image class="centerContent" src="{{item.cdn_img}}" mode="aspectFill" />    <!-- 圖片上浮動的點擊查看詳情圖片view -->    <view class="flexView">     <image src="../../image/seeBigPicture.png" style="width: 60rpx; height: 60rpx;" />     <text class="flexText">點擊查看全圖</text>    </view>   </view>   <!-- 底部view樣式 -->   <view class="bottomView">    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/ding.png" />     <text class="bottomItemText">{{item.ding}}</text>    </view>    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/cai.png" />     <text class="bottomItemText">{{item.cai}}</text>    </view>    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/share.png" />     <text class="bottomItemText">{{item.repost}}</text>    </view>    <view class="bottomItemView">     <image class="bottomItemImage" src="../../image/comment.png" />     <text class="bottomItemText">{{item.comment}}</text>    </view>   </view>  </view> </block></scroll-view>

微信小程序,實戰,實戰實例

微信小程序,實戰,實戰實例

這里主要看中間部分我們通過是否是gif來區分處理圖片,不是gif可以點擊查看大圖,這里有個view懸浮效果,結合界面和image.wxss看

image.wxss

/*中間文字樣式*/.centerContent{ margin-top: 20rpx; width: 100%; height: 600rpx;}/*中間浮動文字樣式*/.flexView{display: flex;justify-content: center;align-items: center;width: 100%;height: 80rpx;position: absolute;z-index: 2;top: 540rpx;background: #000000;opacity: 0.6}/*浮動文字*/.flexText{ color: white; font-size: 35rpx;}

image.js

var detail = '../detail/detail'Page({ data: {  list: [],  maxtime: '',  loadingHidden: false }, onLoad: function (options) {  // 頁面初始化 options為頁面跳轉所帶來的參數  this.requestData('newlist'); }, /**  * 滾動到底部時加載下一頁  */ bindscrolltolower: function () {  console.log('到底部')  this.requestData('list'); }, /**  * 加載數據  */ requestData: function (a) {  var that = this;  wx.request({   url: 'http://api.budejie.com/api/api_open.php',   data: {    a: a,    c: 'data',    // 上一頁的maxtime作為加載下一頁的條件,    maxtime: this.data.maxtime,    type: '10',   },   method: 'GET',   success: function (res) {    console.log(res)    console.log('上一頁', that.datalist)    that.setData({     // 拼接數組     list: that.data.list.concat(res.data.list),     loadingHidden: true,     maxtime: res.data.info.maxtime    })   }  }) }, /**  * 查看大圖  */ lookBigPicture: function (e) {  console.log(e);  console.log(e.currentTarget.id)  //圖片url 對應wxml中data-url="{{item.url}}"  var url = e.currentTarget.dataset.url;  //獲取圖片高度 對應wxml中data-height="{{item.height}}"  var height = e.currentTarget.dataset.height;  //獲取圖片高度 對應wxml中data-width="{{item.width}}"  var width = e.currentTarget.dataset.width;  // 傳參方式向GET請求  wx.navigateTo({   url: detail + '?' + 'url=' + url + "&height=" + height + "&width=" + width,   success: function (res) {    console.log(res)   },   fail: function (err) {    console.log(err)   },  }) }, onReady: function () {  // 頁面渲染完成 }, onShow: function () {  // 頁面顯示 }, onHide: function () {  // 頁面隱藏 }, onUnload: function () {  // 頁面關閉 }})

這里主要看lookBigPicture方法 view data-url=”{{item.cdn_img}}” data-height=”{{item.height}}” data-width=”{{item.width}}”會在邏輯代碼中裝換成.語法使用 var url = e.currentTarget.dataset.url; 傳值調轉則向GET發送請求一樣按照格式來就行了

音頻和視頻模塊大致雷同看代碼去吧!??!

地址: https://github.com/shuncaigao/BS 歡迎start

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕在线视频| 九九精品在线观看| 欧美在线视频在线播放完整版免费观看| 久久人人爽人人爽人人片av高清| 亚洲人成网站在线播| 亚洲理论片在线观看| www国产亚洲精品久久网站| 成人亚洲激情网| 国产欧美精品日韩精品| 日韩中文字幕网站| 日韩av有码在线| 国产精品v片在线观看不卡| 超薄丝袜一区二区| 精品国产一区二区三区四区在线观看| 日韩av第一页| 国产日韩欧美91| 在线精品91av| 黑人极品videos精品欧美裸| 欧美性xxxxxxxxx| 亚洲日韩中文字幕在线播放| 91精品啪在线观看麻豆免费| 久久久久久久久久久成人| 日韩av在线导航| 日韩美女av在线免费观看| 欧美性一区二区三区| 欧美性精品220| 久久精品国产欧美亚洲人人爽| 久久精品国产欧美激情| 日韩精品视频在线观看免费| 欧美日韩爱爱视频| 97精品国产97久久久久久免费| 精品久久在线播放| 日韩精品免费在线视频观看| 亚洲综合在线中文字幕| 91麻豆国产语对白在线观看| 欧美极品少妇全裸体| 欧美极品少妇xxxxⅹ裸体艺术| 国产成人精品视频在线观看| 欧美大片免费观看| 91精品久久久久久久久久久| 国产视频精品一区二区三区| 国产一区红桃视频| 欧美放荡办公室videos4k| 欧美肥婆姓交大片| 69久久夜色精品国产7777| 欧美极品少妇xxxxⅹ裸体艺术| 国产精自产拍久久久久久蜜| 久久成人精品一区二区三区| 伊人久久大香线蕉av一区二区| 亚洲精品国精品久久99热| 亚洲色图欧美制服丝袜另类第一页| 26uuu国产精品视频| 中文字幕亚洲欧美在线| 亚洲欧洲国产精品| 久久精品国产一区二区三区| 欧美激情亚洲另类| 欧美一区二粉嫩精品国产一线天| 欧美视频在线免费看| 在线视频亚洲欧美| 国产成人极品视频| 国产精品电影网站| 亚洲男女自偷自拍图片另类| 亚洲偷欧美偷国内偷| 日本成人在线视频网址| 51ⅴ精品国产91久久久久久| 青青久久av北条麻妃黑人| 精品亚洲夜色av98在线观看| 久久成人18免费网站| 欧美一级淫片aaaaaaa视频| 亚洲色图50p| 亚洲视频国产视频| 日本在线观看天堂男亚洲| 成人淫片在线看| 日韩视频第一页| 欧美成人精品h版在线观看| 欧美成人精品三级在线观看| 萌白酱国产一区二区| 欧美激情视频三区| 欧美精品在线观看| 欧美日韩国产va另类| 97超级碰在线看视频免费在线看| 欧美在线性爱视频| 亚洲成人在线视频播放| 欧美寡妇偷汉性猛交| 久久五月天综合| 亚洲图中文字幕| 国产视频久久久久| 亚洲免费av网址| 国产精品极品在线| 日韩av理论片| 日韩亚洲第一页| 国产成人+综合亚洲+天堂| 欧美国产乱视频| 国产视频久久网| 欧美成人性色生活仑片| 国产午夜精品久久久| 最近2019年中文视频免费在线观看| 日韩精品在线私人| 欧美激情视频一区| 国产精品视频区1| 51精品国产黑色丝袜高跟鞋| 国产日韩亚洲欧美| 91精品美女在线| 国内精品久久久久久中文字幕| 国产一区二区美女视频| 国产欧美日韩高清| 成人黄色网免费| 91精品国产免费久久久久久| 亚洲一区二区日本| 91免费人成网站在线观看18| 国产精品专区第二| 欧美激情三级免费| 中文字幕久精品免费视频| 日韩中文字幕精品视频| 一区二区中文字幕| 欧日韩不卡在线视频| 国产精品亚洲视频在线观看| 国产亚洲精品美女| 欧美另类69精品久久久久9999| 久久精品色欧美aⅴ一区二区| 亚洲自拍偷拍色片视频| 日韩精品在线免费观看| 亚洲高清av在线| 国产精品人成电影| www.精品av.com| 日本精品中文字幕| 日韩精品高清在线观看| 久久99精品久久久久久噜噜| 亚洲少妇激情视频| 欧美成人四级hd版| 米奇精品一区二区三区在线观看| 国产91网红主播在线观看| 日韩中文字幕网| 国模吧一区二区三区| 奇米影视亚洲狠狠色| 午夜精品免费视频| 高清一区二区三区日本久| 国产欧美一区二区三区久久| 97欧美精品一区二区三区| 亚洲a级在线观看| 亚洲久久久久久久久久| 红桃av永久久久| 久久精品视频亚洲| 欧美另类xxx| 日韩视频免费在线观看| 国产91色在线|| 国产精品久久久久久久一区探花| 欧美一级大片视频| 国产在线精品自拍| 欧美日韩性视频在线| 亚洲精品视频网上网址在线观看| 欧美肥婆姓交大片| 国产精品99久久久久久久久| 热久久视久久精品18亚洲精品| 日韩免费电影在线观看| 欧美黑人视频一区| 欧美日韩一区二区精品| 久热爱精品视频线路一| 亚洲国产精品字幕| 欧美中在线观看| 国产精品自产拍在线观看中文| 国产精品久久久| 亚洲国产精品va在线看黑人动漫| 欧美精品久久久久久久久久|