uni-app 是一个使用 Vue.js 开发所有前端应用的框架,是一种终极的跨平台解决方案,这里的平台,主要指的是App平台(android、ios)、小程序平台、H5平台。开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。

01

开发一个小视频应用

初始化项目

打开HBuilderX IDE,新建一个名称为mini-video的初始化uni-app项目,这里勾选uni-app即可创建,项目创建完成后,打开pages/index/index.vue,将<template>中的模板内容content部分清空,将uni-app初始项目中与应用无关的东西进行清空、修改即可。

创建底部导航栏组件

首先要弄清楚我们的uni-app已经提供了tabBar的配置,即提供了底部导航栏的,那为什么还需要自定义底部导航栏呢 ?因为uni-app提供的默认底部导航栏tabBar的背景颜色只支持十六进制,所以无法设置为透明。同时我们又需要将底部导航栏中的页面设置为tabBar页面,所以我们还是要进行tarBar的配置,而一配置tabBar,那么就会自动出现uni-app提供的默认导航栏,所以我们必须在应用启动onLaunch的时候将默认tabBar进行隐藏。

那么没有了默认导航栏,我们怎么进行tabBar页面的切换呢?我们可以通过<navigator>组件设置不同的跳转方式,实现应用内各种页面之间的跳转。记住APP和微信小程序是不支持<a>标签跳转的。

底部导航栏有五个页面: 首页(index.vue)、关注(follow.vue)、加号(添加好友friend.vue)、消息(news.vue)、我(personal.vue)。所以需要在pages中模仿index新建出剩余的四个页面,页面新建完成后,需要配置到pages.json中的tarBar中,只需要配置list即可,如:

{"tabBar": { // 在pages.json中添加上tabBar配置,如下"list": [{"pagePath":"pages/index/index"},{"pagePath":"pages/follow/follow"},{"pagePath":"pages/friend/friend"},{"pagePath":"pages/news/news"},{"pagePath":"pages/personal/personal"}]}
}
// App.vue中onLaunch的时候隐藏掉uni-app自带的tabBar<script>export default {setTimeout(() => {uni.hideTabBar(); // 隐藏tabBar}, 1000);}
</script>

在ios和安卓App平台上运行时,会出现tabBar隐藏失败的情况,解决办法就是隐藏的时候需要添加一个1000ms左右的延迟

// 项目根目录下新建一个components目录,并在其中新建一个tab-bar.vue即自定义底部导航栏组件
<template><view class="tab"><navigator open-type="switchTab" url="/pages/index/index" class="tab-box">首页</navigator><navigator open-type="switchTab" url="/pages/follow/follow" class="tab-box">关注</navigator><view class="tab-box">+ <!--暂时用加号代替,后面会替换成字体图标--></view><navigator open-type="switchTab" url="/pages/news/news" class="tab-box">消息</navigator><navigator open-type="switchTab" url="/pages/personal/personal" class="tab-box">我</navigator></view>
</template><style>
.tab{height:50px;width:100%;position:fixed;bottom: 0;left: 0;z-index: 20;
}
.tab-box{float: left;width: 20%;color: #FFFFFF;text-align: center;height: 50px;line-height: 50px;font-size:20px
}
.icon-box{width: 60%;height: 30px;background: #FFFFFF;color: #000000;margin: 10px 20%;line-height:30px;border-radius: 5px;font-size: 15px;
}
</style>

添加图标字体

添加图标字体非常简单,就是登录iconfont网站,然后创建一个图标项目,然后搜索自己需要的图标,比如加号、搜索、返回,将它们加入到项目中,然后点击下载即可,下载完成后解压,找到iconfont.css这个文件,这个就是我们要用到的图标字体的css样式,直接引入到项目中即可,为了方便使用,我们将图标字体css文件作为一个全局样式引入到App.vue组件中。使用的时候,我们只需要在需要添加图标字体的标签上,添加上"iconfont 具体的图标样式名"即可,如:

// App.vue<style>/*每个页面公共css */@import url("./static/iconfont.css");
</style>
// components/tab-bar.vue<view class="tab-box"><view class="iconfont icon-jiahao icon-box" ><!--添加一个加号图标字体样式,注意是两个样式名哦--></view>
</view>

创建首页头部导航栏

首页头部导航栏,最左侧是一个搜索图标,中间是推荐和同城,右侧无内容。同样,我们的uni-app是有一个默认头部导航栏的,所以我们首先要隐藏掉默认的头部导航栏,要隐藏默认头部导航栏,我们需要在pages.json文件中设置其navigationStyle属性值为custom即自定义,如:

{"globalStyle": {"navigationStyle":"custom" // 设置头部导航栏为自定义模式,头部导航栏会自动消失}
}
// /components/index-header.vue<template><view class="index-header"><!--固定定位到首页顶部--><view class="iconfont icon-icon-- icon"></view> <!--绝对定位到左侧--><view class="middle"> <!--搜索图标绝对定位后,middle将会上移动到顶部,在搜索图标下面,里面内容居中显示即可--><view class="text">推荐</view>|<view class="text">同城</view><!--变成行内元素--></view></view>
</template><style scoped>
.index-header {height: 35px;line-height: 35px;width: 100%;position: fixed;top: 25px;left: 0;margin: 0 auto;background: #000000;z-index: 20;
}
.icon {position: absolute;left: 0;top: 0;color: white;width: 20%;text-align: center;
}
.middle {text-align: center;color: white;
}
.text {display: inline;margin: 0 10px;
}
</style>

创建视频播放组件

视频播放组件即一个全屏的页面,然后里面嵌入一个<video>组件即可实现。这里需要特别说一下如何让页面全屏显示,我们设置页面全屏通常会让需要全屏的元素设置上width: 100%; height: 100%;可是当我们给视频播放组件根元素标签设置上width为100%,height为100%后,它并没有全屏显示,因为当样式属性值为百分数的时候,其是相对于父元素的,即是父元素宽高的100%,而此时视频播放组件的父元素是html、body,它们并没有设置宽高,所以我们需要在App.vue中设置一下全局样式,将html和body的宽高设置为100%,此后其中的子元素设置百分数的时候才会其作用。

// App.vuehtml,body {width: 100%;height: 100%;margin: 0;padding: 0;
}
// /components/video-player.vue<template><view class="video-player"><video class="video" :src= "video.src" :controls="false":loop="true"></video></view>
</template>
<script>export default {props: ["video"]}
</script>
<style>.video-player {width: 100%;height: 100%;}.video {width: 100%;height: 100%;z-index: 19;}
</style>

创建视频列表组件

视频列表组件,我们使用的是<swiper>组件,里面<swiper-item>部分则为上面的视频播放组件。

// /components/video-list.vue<template><view class="video-list"><view class="swiper-box"><swiper class="swiper" :vertical="true"><swiper-item v-for="(item,index) in videos" :key="index"><view class="swiper-item"><video-player                         :video="item"                        :index="index"></video-player></view></swiper-item></swiper></view></view>
</template><script>import VideoPlayer from "./video-player.vue";export default {components: {"video-player": VideoPlayer},props:['list'],data() {return {videos:[],}},watch:{            list(){                this.videos=this.list;            }        }}
</script><style scoped>.video-list {width: 100%;height: 100%;}.swiper-box{    height:100%;    width: 100%;}.swiper{    height:100%;    width: 100%;}.swiper-item {width: 100%;height: 100%;background: red;}
</style>

向视频列表组件传入列表数据

// pages/index/index.vue<template><view class="content"><index-header></index-header> <!--首页头部导航栏组件--><video-list :list="list"></video-list> <!--视频列表组件--><tab-bar></tab-bar> <!--首页底部导航栏组件--></view>
</template>
<script>import TabBar from "../../components/tab-bar.vue";import IndexHeader from "../../components/index-header.vue";import VideoList from "../../components/video-list.vue";export default {components: {"tab-bar": TabBar,"index-header": IndexHeader,"video-list": VideoList},data() {return {list: []}},onLoad() {this.getVideos();},methods: {getVideos() {const res = [{id: 0,src: "http://alimov2.a.yximgs.com/bs2/gdtPostRoll/postRoll-MTA3MDY0NDY3Mzk.mp4",autho: "张三",title: "仙娜美",loveNumber: 10000,commentNumber: 2000,shareNumber: 30000},{id: 1,src: "http://upmov.a.yximgs.com/upic/2019/02/13/22/BMjAxOTAyMTMyMjUxMTlfNDc4ODM2MzlfMTA3Mjc5ODU2MjhfMV8z_b_B1fbc185eaca8cc06efa2d4f713e13e8c.mp4",autho: "李四",title: "【搞笑】最强猜歌王",loveNumber: 40000,commentNumber: 5000,shareNumber: 60000},{id: 2,src: "http://bdmov.a.yximgs.com/bs2/gdtPostRoll/postRoll-MTA3MDk5Mjc5OTg.mp4",autho: "王五",title: "特制流泪芥末酱",loveNumber: 70000,commentNumber: 8000,shareNumber: 90000}];this.list = res;}}}
</script><style>.content {width: 100%;height: 100%;}
</style>

视频列表组件和视频播放组件都已经完成后,就可以在首页onLoad的时候获取视频数据,然后传递给视频列表组件,视频列表组件在遍历传递过来的视频列表将视频地址传入对应的视频播放组件中即可,这里采用mock数据的方式提供视频列表。

原文作者:Rolan

css 实现app图标样式_uni-app开发一个小视频应用(一)相关推荐

  1. h5应用 vue 钉钉_uniapp开发一个小视频应用(一)

    " uni-app 是一个使用 Vue.js 开发所有前端应用的框架,是一种终极的跨平台解决方案,这里的平台,主要指的是App平台(android.ios).小程序平台.H5平台.开发者编写 ...

  2. 用css 添加手状样式,鼠标移上去变小手,变小手

    用css 添加手状样式,鼠标移上去变小手,变小手 cursor:pointer; 用JS使鼠标变小手onmouseover(鼠标越过的时候) onmouseover="this.style. ...

  3. 鼠标指向变小手css,用css 添加手状样式,鼠标移上去变小手,变小手

    简介这篇文章主要介绍了用css 添加手状样式,鼠标移上去变小手,变小手以及相关的经验技巧,文章约1426字,浏览量431,点赞数1,值得参考! 用css 添加手状样式,鼠标移上去变小手,变小手 cur ...

  4. 如何从零开始开发一个小程序

    如何从零开始开发一个小程序 开始 申请账号 开发设置 开发工具 新建小程序 阅读文档 模版语法 项目架构 开始编写 基础语法 wx:for循环 wx:if判断 页面导航 自定义组件引用 样式修改 单行 ...

  5. [洪流学堂]Hololens开发入门篇3:使用基本功能开发一个小应用

    本文首发于"洪流学堂"公众号. 洪流学堂,让你快人几步 本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月4日 本文内容提要 ...

  6. 文案生成 python_用 Python 开发一个【视频营销号】生成器

    原标题:用 Python 开发一个[视频营销号]生成器 之前小帅b在网上看到一个营销号文案生成器,把我给乐的: 其实这个用 Python 实现非常简单,根据用户输入的内容,简单替换一下关键字就可以了, ...

  7. 如何自己开发一个小程序?

    ​ 如何自己开发一个小程序?如果是新手至少要1-3个月,所以不可能在这里一句几句就能把如何自己开发一个小程序说清楚.关于如何自己开发一个小程序的相关事项,如果开发的话,先下载微信开发工具,然后建立一个 ...

  8. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  9. 【如何开发小程序?】如何快速开发一个小程序

    ​ 在过去,对于新手来说,如何开发一个小程序只需要半个月到一个月的时间来制作一个简单的小程序.在中间,您需要了解小程序代码的逻辑语言.您需要查看微信官方平台开发文档中的大量示例和示例.那么现在如何开发 ...

最新文章

  1. Nature子刊:用16S及18S rRNA全长进行微生物多样性研究
  2. python爬取图片-Python爬取网页中的图片(搜狗图片)详解
  3. twitter 监控登陆活动
  4. Mybatis的resultMap
  5. ogre绘制3d图形_R语言统计与绘图:绘制饼图
  6. 单片机如何使用振动传感器801s_振动传感器如何跟踪测量机器的健康状况
  7. 简单介绍强引用,软引用,弱引用,虚引用
  8. SAP UI5应用debug级别的日志打印如何设置
  9. ElasticSearch实战-入门
  10. 我应该使用32位还是64位JVM?
  11. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
  12. 矩阵多种乘法的辨析与python实现
  13. 加快黑群晖套件中心的套件下载速度
  14. 怎么把两个mp3音频合成一个?
  15. java简单播放器涉及与实现
  16. 人生没有白走的路,走过的都算数
  17. python数据统计分析
  18. 分布式链路追踪在字节跳动的实践
  19. 手机验证码接收注册新账户
  20. python 安装TFLearn模块

热门文章

  1. 使用jQuery图表插件Sparklines来开发一个实用的网站PV(page view)实时监控应用
  2. MS CRM 2011中,对于多实体数据文件的导入
  3. Silverlight 2 Customized Control 开发
  4. CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention
  5. 年入百万的 24 本理财秘籍,免费领取(速领)
  6. 【图文教程】Ubuntu software解决下载速度过慢
  7. openCV笔记(持续更新)
  8. kustomize+argo
  9. 【收藏】wiztree大文件查找软件
  10. Scala 类中声明方法