微信小程序音樂播放器,音樂播放器檢索頁制作(下)
檢索頁 (下)
到目前為止,我們已經完成了檢索頁所有的布局和格式文件,也完成了所有的數據請求函數,現在我們需要將這些串聯起來,實現這三部分間的切換。
總結一下我們需要完成的邏輯有:
- 點擊熱門關鍵字,頁面內容變成搜索結果頁(需要請求網絡,用我們寫好的getSearchMusic方法),輸入框內顯示點擊的關鍵字,同時這個關鍵字加入歷史搜索結果。
- 在頁面內容為熱門關鍵字的時候,點擊輸入框使其獲得焦點時,頁面內容變成歷史記錄。
- 點擊歷史記錄文字,內容變成搜索結果(請求網絡),輸入框顯示這個記錄。
- 點擊歷史記錄每條末尾的“X”,刪除這一條記錄,當所有記錄全部刪除或點擊了“清除歷史記錄”選項,內容變?yōu)闊衢T關鍵字。
- 輸入框內的內容被全部刪除后,也返回熱門關鍵字。
- 點擊確認按鈕,內容變?yōu)樗阉鹘Y果頁,同時加入歷史記錄。
-
點擊搜索結果的item,頁面轉到專輯頁或音樂播放頁。
實現這些邏輯的相關事件我們已經在頁面里注冊好了,在具體實現這些事件之前,我們先寫一個函數——將字符串加入到歷史記錄。
這個函數很簡單,我們在寫歷史記錄頁面時,已經用到了historySearchs這個數組,所以添加時我們只有獲取這個數組,然后將要添加的詞push到數組里,然后用setData更新頁面就可以了。
- addHistorySearchs: function (key) {
- var historySearchs = this.data.historySearchs;
- historySearchs.push(key);
- this.setData({
- historySearchs: historySearchs
- })
- },
但是這樣做的問題是當用戶多次搜索相同內容時,數組內就會多次加入同樣的詞,導致我們的歷史記錄列表里出現重復內容,這顯然是不合理的,所以我們在每次push前,需要判斷數組內是否已經含有這個詞。
- findHistorySearchs: function (key) {
- var historySearchs = this.data.historySearchs;
- for (var i = 0; i < historySearchs.length; i++) {
- if (historySearchs[i] == key) { return false; }
- }
- return true;
- },
創(chuàng)建新的函數,這個函數會遍歷historySearchs數組,如果存在相同項則返回false,沒有相同的返回true。
然后我們更改我們的addHistorySearchs方法:
- addHistorySearchs: function (key) {
- var historySearchs = this.data.historySearchs;
- if (this.findHistorySearchs(key)) {
- historySearchs.push(key);
- this.setData({
- historySearchs: historySearchs
- })
- }
- },
有個這個方法后,我們開始逐條完成我們的事件代碼。
將所有更新頁面有關變量添加到data里:
- data: {
- slider: [],
- indicatorDots: true,
- autoplay: true,
- interval: 5000,
- duration: 1000,
- radioList: [],
- currentView: 1,
- topList: [],
- hotkeys: [],
- showSpecial: false,
- special: { key: '', url: '' },
- searchKey: '',
- searchSongs: [],
- zhida: {},
- showSearchPanel: 1,
- historySearchs: [],
- },
熱門關鍵詞的點擊事件:
- hotKeysTap: function (e) {
- var dataSet = e.currentTarget.dataset;
- var key = dataSet.key; //獲取點擊的關鍵詞
- var self = this;
- if (key != '') { //判斷是否為空
- self.addHistorySearchs(key); //調用我們寫好的方法,加入歷史記錄
- self.setData({
- searchKey: key, //為輸入框內添加文字
- showSearchPanel: 3, //顯示內容切換為搜索結果
- });
- MusicService.getSearchMusic(key, function (data) { //請求網絡數據
- if (data.code == 0) {
- var songData = data.data;
- self.setData({ //將獲得的數據添加到相應數組里
- searchSongs: songData.song.list,
- zhida: songData.zhida
- });
- }
- });
- }
- },
輸入框獲取焦點事件:
- bindFocus: function (e) {
- var self = this;
- if (this.data.showSearchPanel == 1) { //判斷內容是否為熱門關鍵詞
- self.setData({
- showSearchPanel: 2 //切換到歷史記錄
- })
- }
- },
歷史記錄文字的點擊事件:
- historysearchTap: function (e) {
- var dataSet = e.currentTarget.dataset;
- var key = dataSet.key; //獲取點擊的歷史記錄文字
- var self = this;
- self.setData({
- searchKey: key, //輸入框添加文字
- showSearchPanel: 3 //顯示搜索結果
- });
- MusicService.getSearchMusic(key, function (data) { //請求網絡,獲取搜索結果
- if (data.code == 0) {
- var songData = data.data;
- self.setData({
- searchSongs: songData.song.list,
- zhida: songData.zhida
- });
- }
- });
- },
歷史記錄結尾的“X”與“清除歷史記錄”的點擊事件:
- delHistoryItem: function (e) {
- var historySearchs = this.data.historySearchs;
- var dataSet = e.currentTarget.dataset; //獲取點擊的條目
- if (dataSet.index != 'undefined') {
- var _index = parseInt(dataSet.index); //獲取點擊條目為數組的第幾項
- historySearchs.splice(_index, 1); //從數組里刪除對應的條目
- this.setData({ //更新頁面
- historySearchs: historySearchs
- });
- if(historySearchs.length==0){ //如果歷史記錄里沒有數據了
- this.setData({
- showSearchPanel: 1 //切換到熱門關鍵字
- })
- }
- }
- },
- clearHistorySearchs: function () {
- this.setData({
- historySearchs: [], //清空歷史記錄數組
- showSearchPanel: 1 //切換到熱門關鍵字
- })
- },
輸入框輸入事件:
- bindKeyInput: function (e) {
- var self = this;
- self.setData({ //更新searchKey的值
- searchKey: e.detail.value
- });
- if (e.detail.value == "") { //如果值為空且當前未顯示熱門關鍵字
- if (this.data.showSearchPanel != 1) {
- self.setData({
- showSearchPanel: 1 //切換為熱門關鍵字
- })
- }
- }
- },
確認按鈕的點擊事件:
- searchOk: function (e) {
- var self = this;
- var searchKey = this.data.searchKey; //獲取searchKey的值
- if (searchKey != "") {
- self.setData({
- showSearchPanel: 3 //顯示搜索結果
- });
- self.addHistorySearchs(searchKey); //添加到歷史記錄
- MusicService.getSearchMusic(searchKey, function (data) {
- if (data.code == 0) {
- var songData = data.data;
- self.setData({
- searchSongs: songData.song.list,
- zhida: songData.zhida
- });
- }
- });
- }
- },
搜索結果item的點擊事件,分為專輯與歌曲兩種:
- zhidaTap: function (e) { //專輯的跳轉事件
- var dataSet = e.currentTarget.dataset;
- var mid = dataSet.id;
- app.setGlobalData({ 'zhidaAlbummid': mid }); //將專輯id保存為全局變量
- wx.navigateTo({ //頁面跳轉
- url: '../cdinfo/cdinfo'
- })
- },
- musuicPlay: function (e) { //歌曲的跳轉事件
- var dataSet = e.currentTarget.dataset;
- //TODO
- }
- },
歌曲的跳轉事件相對復雜(不只是要跳轉,而且要加入播放列表),我們留到播放頁再更改這部分吧。
至此,首頁內容全部完成(準確的說還缺少推薦頁與搜索結果頁向音樂播放頁跳轉的事件)。
上一節(jié):微信小程序小白項目開發(fā)案例之音樂播放器—檢索頁(中)
下一節(jié):微信小程序小白項目開發(fā)案例之音樂播放器——列表頁
第二部分:如何開通一個小商店