前言

在炎热的夏天里最美滋滋的事情是什么呢,我觉得当然是宅在家里,吹着空调,吃着零食看电视剧电影里的帅气小哥哥、漂亮小姐姐了!在闲暇时光我会经常用爱奇艺小程序看视频,加上现在已经学习了一段时间小程序了,“啪”,动手模仿一个爱奇艺视频小程序的念头就产生了。虽然现在还是个小白,但是希望在这趟“爱奇艺小程序之旅”上为各位乘客朋友好好开车(划掉,好好介绍我的问题与经验hhh

前期准备

  • 微信开发者工具
  • 小程序开发文档
  • easy-mock:是一个前端接口模拟神器!此处放的是我的数据接口
  • 项目图片资源:如果想要get一下源码和图片,可以借鉴一下这篇文章哦 两步快速获取微信小程序源码

滴滴 开始发车啦

项目功能

  • 首页界面
  • 任意点击视频缩略图即可跳转到相关页面
  • 热点tab的下拉,上滑加载的基础功能
  • 搜索匹配电影名

这是总的效果

详细介绍

1.首页的轮播图

这里使用的是小程序的滑块视图容器swiper组件,用来做轮播图那叫一个简单方便

使用过爱奇艺小程序的朋友会发现首页简单介绍视频信息的轮播图是布局在页面中间并且每一张图片都不相连的,滑动时很是简洁大方。一开始我是简单的使用,将swiper设置了宽高并使之居中,就产生了下面的结果:只有中间的内容在滑动,并不是想要的效果

那看来即使swiper组件看起来简单也要好好研究一番哪,看了文档之后我发现swiper组件其实是swiper-item在滑动,并且它仅可放置在swiper组件中,宽高自动设置为100%。既然这样,那就去设置swiper-item的宽度好了

swiper{width:100%;
}
swiper-item{width:80%;
}

结果就成了这个样子:

emmm好像不太行,似乎每一个swiper-item总是那么分不开啊,那就去设置里面的内容的样式吧

.info-box{width: 100%;margin: 0 60rpx;
}

总算这样才做到了想要的效果。撒花~

2.宣传图跟着轮播图改变

在这里是使用了swiperbindchange方法。只要滑动了就会触发,并且有一个current代表当时滑动到第几个。这样想来,swiper好像一个数组,里面包含着很多的swiper-item

所以我们可以在js部分通过获取到这个current值,在对应的图片资源数组中遍历并取出地址,换成宣传图的地址即可

//index.jsmoviepicChange(e) {const imgsUrlList = this.data.imgsUrlList; //图片资源let bigImg = this.data.bigImg;let video_id = this.data.video_id;for (let i = 0; i < imgsUrlList.length; i++) {if (i == e.detail.current) { //如果current值与图片数组索引值匹配到了,则bigImg = imgsUrlList[i].thumbnail; //换掉宣传图片地址video_id = imgsUrlList[i].video_id;}}this.setData({bigImg: bigImg,video_id})}

3.任意点击视频缩略图即可跳转到相关页面

效果是这样子滴

在这个功能里头,数据处理是我碰到的一大难题了,因为没有后端,我就想试图模拟一下点击一个图片就发送视频id,并由后端返回响应数据的操作,大致思路就是就是通过了一个“中间站”去处理。emmm 可能有一点笨笨的= =。

  1. 首先准备好来自Easy-Mock的数据接口
  2. 然后在视频缩略图上绑定一下事件,用data-传递想要用于查询的参数

    <swiper-item data-vid="{{item.video_id}}" data-title="{{item.title}}" bindtap="openDetail"></swiper-item>
    
  3. 视频详情页面获取到传过来的id之后就可以发起请求,因为wx.request是个异步操作,需要一点时间,此处我对wx.request进行了封装,返回一个promise的办法就可以把异步操作变成了同步的啦ヾ(◍°∇°◍)ノ゙

    //video-detail.js
    requestVideo: function(num = 0) {
    util.request({ //封装的util.request方法url: `https://www.easy-mock.com/mock/5b0c37bed0e51c310ce24ab0/iqiyi/media#!method=get`,  //请求地址data: { // 请求参数id: this.data.video_id,tag: 'dramas',langs: 'en'}}).then(res => { //res是返回的数据//对数据进行处理,之后便可通过数据绑定在页面显示响应内容})
    }
    

创建一个util工具文件夹,用于提供工具方法。这里就是我模拟后端传回响应数据的地方,先在util.js内获取所有的数据,再根据视频详情页面发送过来的参数对已经获得的数据进行处理,通过返回promise.then的操作在视频详情页面获得由util.js处理之后的数据。

//util.js
let util = {
request(opt) {let options = Object.assign({},opt); //花括号是目标对象,后面的opt是源对象。进行对象合并:将源对象里面的属性添加到目标对象中去,若两者的属性名有冲突,后面的将会覆盖前面的let { url, data} = options; //结构成这两个变量return new Promise((resolve, reject) => { //向请求发起页面返回一个promisewx.request({ //发送请求url,data,success(res) { //请求到数据之后对数据进行处理let returnRes = [];if (data.hasOwnProperty('tag')) { let arr = res.data[data.tag];if (data.hasOwnProperty('id')) { //如果请求参数中有tag,id则进行以下匹配console.log(arr)for (let i in arr) {if (arr[i].video_id === data.id) { returnRes = arr[i]; //得到跟点击的缩略图相对应的视频资源}}resolve(returnRes)return;}returnRes = arr;}resolve(returnRes)},fail(err) {reject(err)}})})
}
}

4.关键字搜索

  1. 首先是在搜索页面获取到关键字,之后作为请求参数使用上述封装好util.request进行请求与数据处理
  2. 在util.js内获取到所有数据之后,在众多数据中通过RegExpObject.test(string)实现关键字的遍历匹配

    
    //util.js
    if (data.hasOwnProperty('key')) { //如果请求参数是key
    const media = res.data;
    for (let i in media) { //遍历匹配电影名for (let j in media[i]) {var re = new RegExp(data.key);if (re.test(media[i][j].title)) {returnRes.push(media[i][j]); //得到匹配好的电影}}
    }
    resolve(returnRes)
    return;
    }
    resolve(returnRes)
  3. 搜索页面使用util.request得到数据之后,搜索结果列表一项一项就可以显示出来。重点是(敲黑板),一般来说点击哪一项,在搜索结果页面那一项就会排在最上面,那我就想要不然再建一个由点击的的那一项作为第一项的查询结果数组,将它存在本地然后在下一个页面取出并显示!

    //search.js
    clickResult: function(e) {
    let index = e.currentTarget.dataset.num; //点击了第几项
    let searchVal = this.data.searchVal; //关键词
    let StorageResult = []; // 用于存在本地的数组let temp = [];
    const result = this.data.result;for (let i = 0; i < result.length; i++) {if (i == index) {temp = result.splice(i, 1); //取出点击的那一项}
    }
    StorageResult = temp;
    for (let i in result) {StorageResult = [...StorageResult, result[i]] //将点击的那一项作为数组首位,其他搜索结果再依次放入
    }
    wx.setStorage({ //在本地缓存搜索结果key: 'searchResult',data: StorageResult,success: function(res) {wx.navigateTo({url: `search-result/search-result?key=${searchVal}` //跳转到下一个页面})}
    })
    }
  4. 另外,搜索结果会顺带把集数罗列出来,那就需要实现点哪集就在视频详情页定位到哪集的功能
  • 先在wxml里通过data-把id、集数、标题传到下一个页面,在onload里头获取集数

    //video-detail.js
    onLoad: function(option) {
    this.setData({video_id: option.id,mediaList: null,
    })
    wx.setNavigationBarTitle({ //设置导航条名称title: option.title
    })
    if (option.hasOwnProperty('num')) { //调用请求资源方法传入集数this.requestVideo(option.num);
    } else {this.requestVideo();
    }
    }
    
  • 请求所有视频资源之后并遍历,把当前播放地址设为选中的那集

    requestVideo: function(num = 0) { //没有选择集数,则集数默认是0
    util.request({...(略)}).then(res => {this.setData({mediaList: res,isLoading: false,playerUrl: res.drama_num[num].video_url //修改播放地址})this.pickNum(num); //改变集数选择状态})
    }
    
  • 用于改变集数选择状态

    pickNum: function(num) {
    for (let i of mediaList.drama_num) {i.selected = parseInt(i.drama_id) === parseInt(num) + 1 //如果选择的集数与视频资源的id一样就改变该集的选中状态if (i.selected) {playerUrl = i.video_url}
    }
    this.setData({mediaList,playerUrl})
    }
    

结束语

学习的时间比较短,做的项目还有超多不完善的,也很多没有学习到的!但是要我认为要勇于分享 ,才能更好进步(๑´ㅂ`๑),希望能帮助一些人,也希望有人能多多指点我。

如果说万事开头难,现在我迈出了第一步,写了第一个小程序,第一篇分享文章,就希望自己对技术能一直充满热情,多学习多钻研(握拳!

最后厚脸皮的说喜欢这篇文章的可以点个赞吗!疯狂比心!还有这里是 我的源码地址

爱奇艺小程序陪你嗨一夏 1相关推荐

  1. 爱奇艺小程序陪你嗨一夏

     前言 在炎热的夏天里最美滋滋的事情是什么呢,我觉得当然是宅在家里,吹着空调,吃着零食看电视剧电影里的帅气小哥哥.漂亮小姐姐了!在闲暇时光我会经常用爱奇艺小程序看视频,加上现在已经学习了一段时间小 ...

  2. 【LiteApp系列】何为爱奇艺小程序?

    前言 今年5月份,爱奇艺开源了LiteApp,俗称小程序.LiteApp是一种是一种高性能的移动跨平台框架,它集合了Native App和Web App的优势.Github地址如下: https:// ...

  3. 【LiteApp系列】爱奇艺小程序架构浅析

    前言 上一篇文章已经讲述了何为小程序,地址如下: https://blog.csdn.net/double2hao/article/details/80956711 此篇主要讲一下其架构设计. 对We ...

  4. 如何使用Fiddler抓包某奇艺小程序视频下载

    [跟着新手学FD第03套]003如何使用Fiddler抓包爱奇艺小程序视频下载 Hello 大家好 我是你们的老朋友,小白 我是本套课程的讲师 小程序名字:某奇艺视频 本节课的内容:实战抓取视频之抓取 ...

  5. 爱奇艺一程序员用 10 万元“买”了个北京户口

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 近日,爱奇艺一程序员彭某因落户北京2个月后提出离职,被公司起诉.据北京法院审判信息网公开的彭某等劳动争议二审民事判决书显示,北京 ...

  6. 爱奇艺的实时数据架构到底有多牛?

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 文章来源于爱奇艺技术产品团队 0 导语 生活在信息爆炸时代的我们越来越清晰的认识到海量 ...

  7. PerfDog 测试腾讯视频、优酷、爱奇艺视频类小程序性能

    自从经朋友介绍PerfDog这款移动端测试神器后就一直在使用它测试大型游戏的流程度,前两天使用腾讯视频追剧分享到微信时发现发现的链接直接进入腾讯视频的小程序中,试了多个视频软件皆是如此,于是想要试试用 ...

  8. 视频文件如何转换格式?爱奇艺qsv怎么转换mp4

    这几天有小伙伴向我抱怨:「爱奇艺下载的qsv视频在手机上无法播放啊,该怎么办?」,因为qsv视频是爱奇艺客户端下载的一种视频加密格式,只能使用爱奇艺客户端播放.如果想在手机上播放的话,就需要另外的方法 ...

  9. 《声入人心》收官盛典终极来袭,爱奇艺弹幕应援发射嗨满屏

    <声入人心>收官之作, 即将惊艳来袭! "梅溪湖36子"神仙集结, 回顾比赛历程超强催泪. 成员终极一战, 舞台大秀.声光盛宴再度升级, 更有迪玛希.黄明昊等各行业代表 ...

最新文章

  1. Fedora 30将获得Bash 5.0,淘汰Yum推迟到Fedora 31
  2. java第二章选择题_Java第二章习题讲解(2)
  3. 网易应用创新开发者大赛成功在杭举办,十强队伍现场比拼
  4. 各大搜索引擎地址收录登记入口
  5. C语言文件读写操作中缓冲区问题和setbuf函数详解
  6. 神秘邻居把我的信息卖给了诈骗团伙
  7. codeblocks下载安装及问题解决
  8. PS、Ai、Pr等如何修改安装位置的问题
  9. Visual Studio中C++关于Unicode字符集和多字节字符集
  10. 关于医学影像中的轴位面(横断面)、冠状面、矢状面的解释
  11. kiv8测量方法_measure_测量 | measure_Scikit image_参考手册_非常教程
  12. 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则
  13. 当下各种关系数据库管理系统
  14. 浅谈通用的字典表结构设计
  15. C++ 实验十四结构程序设计
  16. 施一公演讲太精彩!让科研迷茫的人少走很多弯路
  17. 酷q服务器信息获取,酷Q获取加群QQ等级的解决方案
  18. Django项目——报错处理
  19. 渡一教育公开课web前端开发JavaScript精英课学习笔记(一)前言
  20. hbuilderx 小程序分包_很酷的HBuilderX和uni-app,开发一次既能生成小程序又能生成App...

热门文章

  1. 【web前端初级课程】第三章 CSS的特殊样式
  2. 【数论】 秦九韶公式
  3. 让算法互掐的炸飞机游戏平台
  4. 华为鸿蒙系统不能用于手机,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  5. html5 如何让li居中,如何让多个li标签居中
  6. IT年轻人回乡创业请谨慎
  7. WPS及Excel中Alt键的妙用 快捷键
  8. linux基础命令(五)
  9. 雷神FFMpeg源码学习笔记
  10. 计算机网络 -------------------概述(1)