// pages/video/video.js
Page({
/**
* 页面的初始数据
*/
data: {
videoGroupList:[ {
"id": 1,
"name": "推荐",
},
{
"id": 2,
"name": "私人雷达",
},
{
"id": 3,
"name": "猜你心动",
},
{
"id": 4,
"name": "电音风暴",
},
{
"id": 5,
"name": "独立之声",
}],
navId: 1, // 导航的标识
beforeVideoList: [],
videoList: [], // 视频列表数据
videoId: '', // 视频id标识
videoUpdateTime: [], // 记录video播放的时长
isTriggered: false, // 标识下拉刷新是否被触发
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
loadVideoData() {
wx.showLoading({ title: '加载中' });
this.setData({ loading: true });
try {
const data = require('../../data/video');
this.setData({
beforeVideoList: data.videoList,
loading: false
});
} catch (error) {
console.error('详细错误:', error);
wx.showToast({
title: '加载失败',
icon: 'none'
});
this.setData({ loading: false });
} finally {
wx.hideLoading();
}
},
changeNav(event) {
let navId = event.currentTarget.id; // 获取点击项的id(字符串类型)
navId = navId >>> 0; // 转换为数字类型
// 筛选匹配的视频数据
const filteredList = this.data.beforeVideoList.filter(item => item.id == navId);
// 更新数据
this.setData({
navId: navId,
videoList: filteredList
});
},
// ...原有data保持不变...
async loadVideoData() {
wx.showLoading({ title: '加载中' });
try {
// 步骤1:获取推荐视频列表
const searchRes = await this.biliRequest(
'https://api.bilibili.com/x/web-interface/popular',
'GET'
);
// 步骤2:批量处理视频地址
const processedList = await Promise.all(
searchRes.data.list.map(async item => {
const cid = await this.getVideoCid(item.bvid);
const playUrl = await this.getPlayUrl(item.bvid, cid);
return {
id: item.id,
title: item.title,
videoUrl: playUrl
};
})
);
this.setData({
beforeVideoList: processedList,
videoList: processedList
});
} catch (err) {
wx.showToast({ title: '加载失败', icon: 'none' });
} finally {
wx.hideLoading();
}
},
// 获取视频CID
getVideoCid(bvid) {
return this.biliRequest(
'https://api.bilibili.com/x/web-interface/view',
'GET',
{ bvid }
).then(res => res.data.cid);
},
// 获取播放地址
getPlayUrl(bvid, cid) {
return this.biliRequest(
'https://api.bilibili.com/x/player/playurl',
'GET',
{
bvid,
cid,
qn: 80,
fnval: 16
}
).then(res => res.data.durl[0].url);
},
// 通用B站请求方法
biliRequest(url, method, data) {
return new Promise((resolve, reject) => {
wx.request({
url,
method,
data,
header: {
'Referer': 'https://www.bilibili.com',
'User-Agent': 'Mozilla/5.0 BiliDroid/6.0.0'
},
success: (res) => {
if (res.statusCode === 200 && res.data.code === 0) {
resolve(res.data);
} else {
reject(new Error(res.data.message));
}
},
fail: reject
});
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
if(this.data.videoList.length === 0) {
this.loadVideoData();
}
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})是这样吗?为什么感觉不太能用
最新发布