2018/3/21 0:00:00
來(lái)源:不詳
作者:未知
首頁(yè)的最后一部分為檢索頁(yè),也就是讓用戶(hù)通過(guò)關(guān)鍵字搜索歌曲或?qū)]嫛?/font>
說(shuō)到搜索頁(yè),比不可少的就是關(guān)鍵字的輸入框。
參照這個(gè)樣式,布局文件應(yīng)該為:
-
<view class="search-bar">
-
<view class="search-input-warp">
-
<form bindsubmit="searchSubmit">
-
<label class="search-input-icon"></label>
-
<input type="text" class="search-input" bindfocus="bindFocus" name="search" value="{{searchKey}}" bindinput="bindKeyInput" placeholder="搜索歌曲、歌單、專(zhuān)輯" placeholder-class="search-input-placeholder"/>
-
<view class="search-cancel" bindtap="searchOk">確定</view>
-
</form>
-
</view>
-
</view>
復(fù)制代碼
格式文件為:
-
.search-bar {
-
background:#f7f7f7;
-
padding:20rpx;
-
}
-
.search-input-warp {
-
position:relative;
-
padding:16rpx 24rpx 16rpx 70rpx;
-
background:#fff;
-
}
-
.search-input-icon {
-
content:" ";
-
position:absolute;
-
top:18rpx;
-
left:20rpx;
-
display:inline-block;
-
vertical-align:middle;
-
width:40rpx;
-
height:40rpx;
-
background-image:url("../../resources/images/search.png");
-
background-repeat:no-repeat;
-
background-size:40rpx;
-
}
-
.search-input {
-
font-size:28rpx;
-
line-height:40rpx;
-
}
-
.search-input-placeholder {
-
color:#ddd;
-
font-size:28rpx;
-
line-height:40rpx;
-
}
-
.search-cancel {
-
position:absolute;
-
right:0;
-
top:0;
-
display:inline-block;
-
font-size:32rpx;
-
height:90rpx;
-
width:140rpx;
-
text-align:center;
-
line-height: 90rpx;
-
z-index:50;
-
background:#f7f7f7;
-
}
復(fù)制代碼
因?yàn)橐峤魂P(guān)鍵字,所以使用表單組件,內(nèi)部由表示搜索的放大鏡圖標(biāo),代表輸入完成的“確定”按鈕以及輸入框組成。
除了輸入框以外,此頁(yè)還需要顯示的內(nèi)容應(yīng)該是搜索的結(jié)果列表,搜索的歷史記錄以及熱門(mén)關(guān)鍵字。這些內(nèi)容應(yīng)該顯示在輸入框下方,并按一定邏輯切換。他們之間的邏輯關(guān)系為:
-
用戶(hù)進(jìn)入檢索頁(yè),顯示的內(nèi)容應(yīng)該是輸入框與熱門(mén)關(guān)鍵字。
-
開(kāi)始輸入后(即輸入框獲得焦點(diǎn)),應(yīng)該顯示歷史記錄。
-
點(diǎn)擊確定,顯示結(jié)果列表。
-
清空輸入框內(nèi)容后,返回關(guān)鍵字顯示。
可以看出,對(duì)輸入框的操作決定了當(dāng)前頁(yè)面顯示的內(nèi)容,所以我們需要監(jiān)聽(tīng)輸入框的獲取焦點(diǎn)事件(bindfocus),確定點(diǎn)擊事件(bindtap)以及輸入事件(bindinput),還需要記錄輸入的關(guān)鍵字searchKey。
輸入框完成后我們先寫(xiě)熱門(mén)關(guān)鍵字,這些關(guān)鍵字也是來(lái)源于網(wǎng)絡(luò),所以還需要請(qǐng)求網(wǎng)絡(luò)。在services/music里添加方法:
-
function getHotSearchKey(callback){
-
var data = {
-
g_tk: 5381,
-
uin: 0,
-
format: 'json',
-
inCharset: 'utf-8',
-
outCharset: 'utf-8',
-
notice: 0,
-
platform: 'h5',
-
needNewCode: 1,
-
_: Date.now()
-
};
-
wx.request({
-
url: 'http://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg',
-
data: data,
-
header: {
-
'Content-Type': 'application/json'
-
},
-
success: function (res) {
-
if (res.statusCode == 200) {
-
callback(res.data)
-
} else {
-
-
}
-
}
-
});
-
}
-
...
-
module.exports = {
-
...
-
getHotSearchKey:getHotSearchKey
-
}
復(fù)制代碼
返回JSON格式結(jié)果為
-
{
-
"code": 0,
-
"data": {
-
"hotkey": [
-
{
-
"k": "三生三世十里桃花 ",
-
"n": 90558
-
},
-
{
-
"k": "DJ ",
-
"n": 67590
-
},
-
{
-
"k": "薛之謙 ",
-
"n": 60425
-
},
-
{
-
"k": "涼涼 ",
-
"n": 37056
-
},
-
{
-
"k": "那片星空那片海 ",
-
"n": 29170
-
},
-
{
-
"k": "理想 ",
-
"n": 28695
-
},
-
...
-
],
-
"special_key": "歌手",
-
"special_url": "http://y.qq.com/m/act/singer/index.html?ADTAG=search"
-
},
-
"subcode": 0
-
}
復(fù)制代碼
這里返回的hotkey就是我們需要的關(guān)鍵字啦,除此之外,我們還看到下面有“special_key”這一部分,這相當(dāng)于廣告部分,為服務(wù)器推薦的搜索關(guān)鍵字。所以我們以標(biāo)簽的形式顯示關(guān)鍵字,對(duì)于廣告那部分關(guān)鍵字,我們以紅色字體,并且放在最前方,最后達(dá)成的樣式應(yīng)該為圖10-5所示:
![微信小程序音樂(lè)播放器,音樂(lè)播放器檢索頁(yè)制作(上)]()
43232.png (5.21 KB, 下載次數(shù): 4)
下載附件
保存到相冊(cè)
2017-2-15 11:19 上傳
實(shí)現(xiàn)這一布局的代碼為:
-
<view class="quick-search" wx:if="{{showSearchPanel == 1}}">
-
<view class="quick-search-title">
-
<text>熱門(mén)搜索</text>
-
</view>
-
<view class="quick-search-bd">
-
<text class="quick-search-item-red" data-url="{{special.url}}" data-key="{{special.key}}" bindtap="hotKeysTap" wx:if="{{showSpecial}}">{{special.key}}</text>
-
<text class="quick-search-item" wx:for="{{hotkeys}}" wx:key="unique" data-n="{{item.n}}" bindtap="hotKeysTap" data-key="{{item.k}}">{{item.k}}</text>
-
</view>
-
</view>
復(fù)制代碼
這里面showSearchPanel的值為我們控制這一頁(yè)面切換的依據(jù),當(dāng)其為1的時(shí)候,顯示熱門(mén)關(guān)鍵字。
綁定的數(shù)據(jù)有兩個(gè),special和hotkey。對(duì)于special部分,為了防止服務(wù)器缺失“special_key”這一部分從而導(dǎo)致沒(méi)有數(shù)據(jù)顯示,我們定義一個(gè)數(shù)據(jù)showSpecial來(lái)決定是否顯示這一部分。
將這三個(gè)數(shù)據(jù)以及輸入框用到的searchKey添加到data里吧。
修改index.js文件:
-
//引用網(wǎng)絡(luò)請(qǐng)求文件
-
var MusicService = require('../../services/music');
-
-
//獲取應(yīng)用實(shí)例
-
var app = getApp()
-
Page({
-
data: {
-
indicatorDots: true,
-
autoplay: true,
-
interval: 5000,
-
duration: 1000,
-
radioList: [],
-
slider: [],
-
mainView: 1,
-
topList:[],
-
hotkeys: [],
-
showSpecial: false,
-
special: { key: '', url: '' },
-
searchKey: '',
-
},
-
onLoad: function () {
-
var that = this;
-
MusicService.getRecommendMusic(that.initPageData);
-
MusicService.getTopMusic(that.initTopList);
-
MusicService.getHotSearchKeys(that.initSearchHotKeys);
-
},
-
-
...
-
initSearchHotKeys: function (data) {
-
var self = this;
-
if (data.code == 0) {
-
var special = { key: data.data.special_key, url: data.data.special_url };
-
var hotkeys = [];
-
if (data.data.hotkey && data.data.hotkey.length) { //當(dāng)返回?cái)?shù)據(jù)不為空且長(zhǎng)度不為0
-
for (var i = 0; (i < data.data.hotkey.length && i < 6); i++) { //如果長(zhǎng)度大于6只保留前6個(gè)
-
var item = data.data.hotkey[i];
-
hotkeys.push(item);
-
}
-
}
-
if (special != undefined) { //當(dāng)返回項(xiàng)有special部分時(shí),showSpecial為true
-
self.setData({
-
showSpecial: true
-
})
-
} else { //沒(méi)有special部分,showSpecial為false
-
self.setData({
-
showSpecial:false
-
})
-
}
-
self.setData({
-
special: special,
-
hotkeys: hotkeys
-
})
-
}
-
},
-
...
-
})
復(fù)制代碼
數(shù)據(jù)加載完成后,我們?yōu)槊總€(gè)熱門(mén)關(guān)鍵字view添加點(diǎn)擊事件。
-
hotKeysTap: function (e) {
-
//TODO
-
},
復(fù)制代碼
在這個(gè)點(diǎn)擊事件里,我們需要做的事情有:
-
將點(diǎn)擊的關(guān)鍵詞加入歷史記錄。
-
將頁(yè)面切換到搜索結(jié)果列表。 在完成搜索結(jié)果列表頁(yè)后我們?cè)賮?lái)完善這一部分吧。
最后附上這一部分的格式文件。
-
.quick-search {
-
padding:20rpx;
-
box-sizing:border-box;
-
}
-
.quick-search-title {
-
font-size:28rpx;
-
}
-
.quick-search-bd {
-
position:relative;
-
margin-top:20rpx;
-
}
-
.quick-search-item {
-
font-size:28rpx;
-
float:left;
-
margin:0 20rpx 20rpx 0;
-
line-height:40rpx;
-
padding:10rpx 20rpx;
-
border-radius:30rpx;
-
color:#000;
-
border:2rpx solid rgba(0,0,0,.6);
-
}
-
.quick-search-item-red {
-
font-size:28rpx;
-
float:left;
-
margin:0 20rpx 20rpx 0;
-
line-height:40rpx;
-
padding:10rpx 20rpx;
-
border-radius:30rpx;
-
color:#fc4524;
-
border:2rpx solid #fc4524;
-
}
復(fù)制代碼
上一節(jié):微信小程序小白項(xiàng)目開(kāi)發(fā)案例之音樂(lè)播放器—排行頁(yè)
【本站聲明】
1、本站文章中所選用的圖片及文字來(lái)源于網(wǎng)絡(luò)以及用戶(hù)投稿,由于未聯(lián)系到知識(shí)產(chǎn)權(quán)人或未發(fā)現(xiàn)有關(guān)知識(shí)產(chǎn)權(quán)的登記,如有知識(shí)產(chǎn)權(quán)人并不愿意我們使用,如果有侵權(quán)請(qǐng)立即聯(lián)系。
2、本網(wǎng)站不對(duì)文章中所涉及的內(nèi)容真實(shí)性、準(zhǔn)確性、可靠性負(fù)責(zé),僅系客觀性描述,如您需要了解該類(lèi)商品/服務(wù)詳細(xì)的資訊,請(qǐng)您直接與該類(lèi)商品/服務(wù)的提供者聯(lián)系。
KESION 科汛軟件
KESION 科汛軟件是國(guó)內(nèi)領(lǐng)先的在線教育軟件及私域社交電商軟件服務(wù)提供商,長(zhǎng)期專(zhuān)注于為企業(yè)提供在線教育軟件及社交電商SaaS平臺(tái)解決方案。
公司核心產(chǎn)品云開(kāi)店SaaS社交電商服務(wù)平臺(tái)、在線教育SaaS服務(wù)平臺(tái)、教育企業(yè)數(shù)字化SaaS云平臺(tái)、企微營(yíng)銷(xiāo)助手、私有化獨(dú)立部署品牌網(wǎng)校和在線教育咨詢(xún)等。KESION 不斷通過(guò)技術(shù)創(chuàng)新,提供產(chǎn)品和服務(wù),助力企業(yè)向數(shù)字化轉(zhuǎn)型,通過(guò)科技驅(qū)動(dòng)商業(yè)革新,讓商業(yè)變得更智慧!