搜尋
首頁微信小程式小程式開發一個微信小程式版知乎實例分享

一個微信小程式版知乎實例分享

Jan 25, 2018 pm 01:51 PM
分享實例小程式

本文主要和大家分享從零開始一個微信小程式版知乎,希望能幫助大家開發一個微信版知乎,從中也有更多思路。

展示效果(介面樣式設計與互動來自iOS 4.8.0版本知乎App):

一個微信小程式版知乎實例分享

動態效果請移到GitHub查看。

一、開始前的準備

申請帳號:根據小程式註冊文檔,填寫資訊和提交相應的資料,就可以擁有自己的小程式帳號。

開發工具:微信開發者工具

資料來源:

Easy Mock: 一個資料模擬神器,可以依照自己需要的格式自己寫回數據,而且所有的數據都是隨機產生的。

Mock.js: Easy Mock引入了Mock.js,但文件中僅提供了部分語法,要想自己的mock資料寫的更精簡,可以在Mock.js中查看更多具體語法。

二、初始化一個小程式

新建一個空資料夾

開啟微信開發者工具,依照「你的第一個小程式」文件中的步驟即可創建一個自己的小程式。

目錄結構

weChatApp
|___client
|	|___assets // 存储图片
|	|___pages  	// 页面
|	|	|___index // 首页
|   |	|___index.wxml  // 页面结构文件
|	|	|___index.wxss  // 样式表文件
|	|	|___index.js    // js文件
|	|___utils // 全局公共函数
|	|___app.js   // 系统的方法处理文件
|	|___app.json // 系统全局配置文件
|	|___app.wxss // 全局的样式表
|	|___config.json // 域名等配置文件
|___project.config.json
|___README
小程序配置文件app.json内容
{
// 页面路由
   "pages": [
       "pages/index/index",              // 首页
       "pages/findMore/findMore",        // 想法页(开始起名为发现页面,后来没改/(ㄒoㄒ)/~~)
       "pages/userCenter/userCenter",    // 更多(同上,原来起名为个人中心o(╯□╰)o)
       "pages/market/market",            // 市场
       "pages/searchResult/searchResult",// 搜索结果页
       "pages/message/message",          // 消息列表页
       "pages/titleDetail/titleDetail",  // 点击标题进入的问题详情页
       "pages/contentDetail/contentDetail"// 点击内容进入的回答详情页
   ],
   // 窗口
   "window": {
       "backgroundColor": "#FFF",       // 窗口的背景色  
       "backgroundTextStyle": "dark",   // 下拉背景字体、loading 图的样式,仅支持 dark/light
       "navigationBarBackgroundColor": "#FFF",// 顶部tab背景颜色
       "navigationBarTitleText": "知小乎", //顶部显示标题
       "navigationBarTextStyle": "black", // 导航栏标题颜色,仅支持 black/white
       "enablePullDownRefresh": true      // 是否开启下拉刷新
   },
   // tab导航条
   "tabBar": {
       "backgroundColor": "#fff",  // 背景颜色
"color": "#999",            // 默认文字颜色
       "selectedColor": "#1E8AE8", // 选中时文字颜色
       "borderStyle": "white",     // tabbar上边框的颜色, 仅支持 black/white
       
       /** 
       * tab列表,最少2个,最多5个
   * selectedIconPath: 选中时图片
   * iconPath: 默认图片
   * pagePath: 对应页面路由
   * text: 对应文案
   **/
       "list": [{
           "selectedIconPath": "assets/home-light.png",
           "iconPath": "assets/home.png",
           "pagePath": "pages/index/index",
           "text": "首页"
       }, {
           "selectedIconPath": "assets/find-light.png",
           "iconPath": "assets/find.png",
           "pagePath": "pages/findMore/findMore",
           "text": "想法"
       },
       {
         "selectedIconPath": "assets/market-light.png",
         "iconPath": "assets/market.png",
         "pagePath": "pages/market/market",
         "text": "市场"
       },
       {
         "selectedIconPath": "assets/msg-light.png",
         "iconPath": "assets/msg.png",
         "pagePath": "pages/message/message",
         "text": "消息"
       }, {
           "selectedIconPath": "assets/more-light.png",
           "iconPath": "assets/more.png",
           "pagePath": "pages/userCenter/userCenter",
           "text": "更多"
       }]
   }
}

配置介面網域名稱: 因使用的是Easy Mock類比介面數據,因此可以在小程式管理後台-開發設定-伺服器網域中將request合法網域配置為https ://www.easy-mock.com。

三、開發中的遇到的問題及解決方案

1、小程式渲染HTML片段

看了網頁版知乎,介面回傳的回答資料是一段HTML的程式碼片段,所以答案中可以在任何位置都插入圖片。
對,沒錯,就是下面醬紫的(╯°□°)╯︵┻━┻

經過反覆嘗試,發現原生寫法不支援渲染一段HTML程式碼片段,因此放棄了返回HTML的程式碼片段的做法,所以我的回答清單中也沒有圖片(ಥ_ಥ)。準備在下次優化專案時嘗試一下。在最外層bindtap綁定的方法中取得所點擊的tab的index值,再根據index的值分別顯示對應的tab-content

<view class="tab-wrapper" bindtap="setActive">
        <view class="tab-item {{isActive == 0 ? &#39;tab-item-active&#39; : &#39;&#39;}}" data-index="0">关注</view>
        <view class="tab-item {{isActive == 1 ? &#39;tab-item-active&#39; : &#39;&#39;}}" data-index="1">推荐</view>
        <view class="tab-item {{isActive == 2 ? &#39;tab-item-active&#39; : &#39;&#39;}}" data-index="2">热榜</view>
        <view class="tab-item-line" animation="{{animationData}}"></view>
</view>
<view class="tab-content {{isActive == 0 ? &#39;show&#39; : &#39;hide&#39;}}">
 // ...
</view>
<view class="tab-content {{isActive == 1 ? &#39;show&#39; : &#39;hide&#39;}}">
 // ...
</view>
<view class="tab-content {{isActive == 2 ? &#39;show&#39; : &#39;hide&#39;}}">
 // ...
</view>

3、上​​拉載入和下拉刷新

實現想法

上拉加載:emmmmmm......我指的上拉加載是觸底後的加載更多,怕跟大家理解的不一樣o(╯□╰)o。

原生方法:onReachBottom,取得到新資料後concat到原有的資料清單後。列表concat到取得到的新資料後。 )!

##使用wx.setStorage,觸發搜尋時,檢查搜尋歷史清單中是否含有該字段,如果有則忽略,如果沒有則將該字段壓入數組中。

使用wx.getStorage,在顯示搜尋蒙層時,取得到搜尋歷史列表,循環顯示,當搜尋歷史列表長度大於1時,顯示清空搜尋紀錄的按鈕。搜尋紀錄:

單一刪除:每個搜尋紀錄都會綁定刪除事件,取得到改關鍵字的index,從頻道的搜尋紀錄清單中刪除對應index的關鍵字,並透過wx.setStorage重新儲存。組件中,原知乎App中的xxxx人正在討論是嵌在輪播模組內的垂直方向的文字輪播,但是小程式中的swiper輪播組件不支援互相嵌套,因此沒能實現該部分,只好換一種樣式去寫/(ㄒoㄒ)/~~。

6、滾動吸頂

頁面中的標題列在捲動到頂部時,吸頂展示。

實作效果

實作方案

整個頁面使用包裹,並且綁定bindscroll事件,監聽滾動距離。

設定為垂直方向時,需設定的高度。

複製一個相同的標題欄,新增吸頂樣式的類別fixed。

使用wx:if判斷目前頁面滾動距離是否達到要求,如果達到所需距離,則渲染這個吸頂的標題列。

<view class="find-hot-header fixed" wx:if="{{scrollTop >= 430}}">
   <view class="find-hot-title">最近热门</view>
</view>
<view class="find-hot-header">
    <view class="find-hot-title">最近热门</view>
</view>

7、展開與收起全文

展示效果

#文字部分預設新增class,超出兩行文字顯示省略號。

.text-overflow{
  height: 85rpx;
  display: -webkit-box;
  word-break: break-all;
  text-overflow: ellipsis;
  overflow: hidden;
  -webkit-box-orient: vertical;
  -webkit-line-clamp:2;
}

点击展开全文和收起全文时对showIndex[index]的值取反,对应添加或移除该class。

<view class="find-hot-content {{!showIndex[index] ? &#39;text-overflow&#39; : &#39;&#39;}}">
    {{item.content}}
</view>
<view wx:if="{{!showIndex[index]}}" class="find-show-all" data-index="{{index}}" bindtap="toggleShow">展开全文</view>
<view wx:if="{{showIndex[index]}}" class="find-show-all" data-index="{{index}}" bindtap="toggleShow">收起全文</view>

8、更改switch样式

switch类名如下,一定要加上父类,不然全局的都会被改掉_(:з」∠)_。

父类 .wx-switch-input{
  display: inline-block;
  position: absolute;
  top: 20rpx;
  right: 20rpx;
  width: 84rpx;
  height: 44rpx;
}
父类 .wx-switch-input::before{
  width: 80rpx;
  height: 40rpx;
}
父类 .wx-switch-input::after{
  width: 40rpx;
  height: 40rpx;
}

四、总结

通过这次小程序的开发,学到了很多东西,虽然遇到了很多问题,但解决问题的过程让我收获的更多,动手实践才是学习的最好方式。

相关推荐:

微信小程序组件化的解决思路和方法

微信小程序版2048小游戏

微信小程序之购物车的实现代码

以上是一個微信小程式版知乎實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器