HarmonyOS实战—影视类卡片应用(二)

简介: HarmonyOS实战—影视类卡片应用(二)

视频播放页面


主页我们已经完全实现了。下面,需要实现点击这些视频展示图片跳转的视频播放页面。我们先来看看其最终的效果图:


页面(pagevideo.hml)

这里,我们先剖析一下这个界面有哪些东西?


顶部的视频播放组件:<video>

Vip会员橙色按钮:<button>

图像金字塔以及视频的简介:标题<text>、评分<text>、vip<image>、播放量以及简介<text>。

点赞,喜欢,下载,搜藏:4个<image>。

专辑列表:<text>

其他推荐列表:<list>


既然,我们已经分析出来了界面的布局,那么直接上代码即可。示例如下:

<div style="flex-direction : column;">
    <video id='videoId' src='{{ mp4_url }}' muted='false' autoplay='false' poster='{{ url }}' controls="true"
           onprepared='preparedCallback' onstart='startCallback' onpause='pauseCallback' onfinish='finishCallback'
           onerror='errorCallback' onseeking='seekingCallback' onseeked='seekedCallback'
           ontimeupdate='timeupdateCallback' style="object-fit : fill; width : 100%; height : 250px;"
           onlongpress='change_fullscreenchange' onclick="change_start_pause"/>
    <div class="div_list">
        <button class="vip_button">VIP会员低至30元每季度,618狂欢进行中</button>
        <text class="text_title">{{ title }}</text>
        <div class="div_row">
            <text class="div_row_text">7.5分</text>
            <image class="div_row_image" src="../../../common/images/vip.png"/>
            <text class="div_row_text">2333.3万次播放 · 简介 ></text>
        </div>
        <div class="div_row">
            <image class="div_row2_image" src="../../../common/images/dianzan.png"/>
            <div class="div_row2">
                <image class="div_row2_image" src="../../../common/images/like.png"/>
                <image class="div_row2_image" src="../../../common/images/download.png"/>
                <image class="div_row2_image" src="../../../common/images/share.png"/>
            </div>
        </div>
        <text style="font-size : 15px; font-weight : bold;margin-top: 10px;">专辑列表</text>
        <div class="container">
            <list class="list" divider="true">
                <list-item for="{{responseData.vipList}}" class="list_item">
                    <image class="list_image" src="{{$item.img_url}}"/>
                    <text class="list_title">{{$item.title}}</text>
                </list-item>
            </list>
        </div>
    </div>
</div>


用户交互(pagevideo.js)

从上面的界面中,我们除了返现各种搭配的组件之外。还可以明显看到,专辑列表的视频推荐是从网络获取的,视频的播放交互,需要JS操作。


而且,最重要的是我们从前面主页传递过来的参数,如何获取呢?代码如下所示:

import fetch from '@system.fetch';
import router from '@system.router';
export default {
    data: {
        title: 'World',
        url: "",
        mp4_url: "",
        event: '',
        seekingtime: '',
        timeupdatetime: '',
        seekedtime: '',
        isStart: true,
        isfullscreenchange: false,
        duration: '',
        responseData:'正在加载中',
    },
    seekingCallback: function (e) {
        this.seekingtime = e.currenttime;
    },
    timeupdateCallback: function (e) {
        this.timeupdatetime = e.currenttime;
    },
    change_start_pause: function () {
        if (this.isStart) {
            this.$element('vedioId').pause();
            this.isStart = false;
        } else {
            this.$element('vedioId').start();
            this.isStart = true;
        }
    },
    change_fullscreenchange: function () { //全屏
        if (!this.isfullscreenchange) {
            this.$element('videoId').requestFullscreen({
                screenOrientation: 'default'
            });
            this.isfullscreenchange = true;
        } else {
            this.$element('vedioId').exitFullscreen();
            this.isfullscreenchange = false;
        }
    },
    fetch: function () {
        var that = this;
        fetch.fetch({
            url: 'https://liyuanjing-1300376177.cos.ap-shanghai.myqcloud.com/viptopmodel.json',
            success: function (response) {
                console.info("网络请求成功");
                that.responseData = JSON.parse(response.data);
                console.info(that.responseData.vipList[0].title);
            },
            fail: function () {
                console.info("网络请求错误");
            }
        });
    },
    onInit() {
        this.url = decodeURIComponent(this.data1);
        this.mp4_url = decodeURIComponent(this.data2);
        this.title= decodeURIComponent(this.data3);
        this.fetch();
    }
}


可以发现,鸿蒙开发获取参数非常简单,你怎么传递的参数,就是什么名字,这里就不在赘述了。


界面样式(pagevideo.css)

最后,就是我们的视频播放页面的界面样式。示例代码如下所示:

.div_list {
    flex-direction: column;
    margin: 10px;
}
.div_row {
    flex-direction: row;
    margin-top: 5px;
}
.div_row_text {
    font-size: 10px;
    font-family: sans-serif;
    color: darkgrey;
}
.div_row_image {
    width: 20px;
    height: 20px;
    margin-left: 10px;
    margin-right: 10px;
}
.div_row2 {
    flex-direction: row;
    position: absolute;
    right: 0;
}
.div_row2_image {
    width: 30px;
    height: 30px;
    margin-left: 10px;
    margin-right: 20px;
    margin-left: -2px;
    left: 0;
}
.text_title {
    font-size: 20px;
    font-family: sans-serif;
    font-weight: bold;
    margin-top: 10px;
}
.vip_button {
    background-color: darkorange;
    font-size: 20px;
    font-family: sans-serif;
    color: aqua;
    border-radius: 0px;
    box-shadow: 2px 2px 5px 2px #FF7F00;
    padding: 10px;
}
.container {
    display: flex;
    justify-content: center;
    align-items: center;
    left: 0px;
    top: 0px;
    width: 454px;
    height: 454px;
}
.list {
    width: 100%;
    margin-top: 10px;
    divider-color: #32CD99;
}
.list_item {
    width: 100%;
    flex-direction: row;
    margin-top: 5px;
    padding-bottom: 5px;
}
.list_title {
    text-align: center;
    height: 100px;
    font-size: 15px;
    font-weight: bold;
    color: coral;
    margin-left: 10px;
}
.list_image {
    width: 200px;
    height: 100px;
    border-radius: 5px;
}


其他设置

默认应用是不支持网络请求的,也就是说,纯粹使用上面的代码。肯定会报错,那么我们如何赋予应用网络权限呢?


只需要在config.json文件中,添加如下代码即可:


"module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ],
    "metaData": {
      "customizeData": [
        {
          "name": "hwc-theme",
          "value": "androidhwext:style/Theme.Emui.Light.NoTitleBar"
        }
      ]
    },


其中,reqPermissions是用于添加权限的,这里我们添加了ohos.permission.INTERNET网络权限。


还有默认应用创建都是有标题栏的,这里没有标题栏是因为博主设置了metaData样式,这里设置为无标题栏NoTitleBar。


本项目源代码文件下载:点击下载

相关文章
|
7天前
|
存储 JavaScript 开发者
探索鸿蒙新世界:ArkUI框架实战指南,解锁HarmonyOS应用UI设计的无限可能!
【10月更文挑战第19天】ArkUI框架是华为鸿蒙系统中用于开发用户界面的核心工具,支持ArkTS和eTS两种开发语言。本文介绍了ArkUI的基本概念、组件使用、布局管理和状态管理,通过示例代码帮助开发者轻松构建美观、高效的跨设备UI。
30 3
|
1天前
|
IDE 开发工具
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
本文介绍了如何使用 Flutter SDK 3.22.0 搭建鸿蒙开发环境。首先安装 Flutter SDK 3.22.0,并通过 FVM 管理多个版本。接着配置项目,使用 `fvm use custom_3.22.0` 设置自定义 SDK 版本。添加鸿蒙平台支持并进行项目签名,最后通过 `fvm flutter run` 运行项目。详细步骤包括安装、项目配置、签名和运行,确保开发环境顺利搭建。
17 7
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
|
1天前
|
UED
<大厂实战经验> Flutter&鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
在 Flutter 开发中,处理异步请求是常见需求。本文详细介绍了如何在 `initState` 中触发异步请求,并使用 `mounted` 属性确保在适当时机更新 UI。通过示例代码,展示了如何安全地进行异步操作和处理异常,避免在组件卸载后更新 UI 的问题。希望本文能帮助你更好地理解和应用 Flutter 中的异步处理。
57 3
|
1天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
70 1
|
8天前
|
JavaScript 数据管理 编译器
揭秘 ArkTS 与 TypeScript 的神秘差异:鸿蒙系统开发者的必备知识与实战技巧
【10月更文挑战第18天】ArkTS 是华为为鸿蒙系统(HarmonyOS)推出的开发语言,作为 TypeScript 的超集,它针对鸿蒙系统的分布式特性和需求进行了优化和扩展。ArkTS 强化了分布式数据管理、类型系统、编译与运行时性能,并支持声明式 UI 和专为鸿蒙设计的 API,使开发者能够更高效地开发跨设备协同工作的应用。
30 6
|
7天前
|
JavaScript Java C++
ArkTS揭秘:如何在无‘类’的世界里,用组件与对象构建HarmonyOS应用的奇妙桥梁?
【10月更文挑战第19天】在鸿蒙系统的ArkTS开发中,类和对象的概念类似于传统OOP语言,但融入了声明式UI的特性。本文通过对比Java中的类和对象,详细介绍了如何在ArkTS中定义组件和实例化组件,并展示了实际开发中的应用示例。通过示例代码,读者可以清晰地理解ArkTS中类和对象的模拟方式及其灵活性。
18 1
|
7天前
|
JavaScript API 开发者
掌握ArkTS,打造HarmonyOS应用新视界:从“Hello World”到状态管理,揭秘鸿蒙UI开发的高效秘诀
【10月更文挑战第19天】ArkTS(ArkUI TypeScript)是华为鸿蒙系统中用于开发用户界面的声明式编程语言,结合了TypeScript和HarmonyOS的UI框架。本文介绍ArkTS的基本语法,包括组件结构、模板和脚本部分,并通过“Hello World”和计数器示例展示其使用方法。
20 1
|
1天前
|
JSON Dart 数据格式
<大厂实战场景> ~ flutter&鸿蒙next处理后端返回来的数据的转义问题
在 Flutter 应用开发中,处理后端返回的数据是常见任务,尤其涉及转义字符时。本文详细探讨了如何使用 Dart 的 `dart:convert` 库解析包含转义字符的 JSON 数据,并提供了示例代码和常见问题的解决方案,帮助开发者有效处理数据转义问题。
88 0
|
14天前
|
缓存 Dart IDE
鸿蒙Flutter实战:10-常见问题集合
本文介绍了鸿蒙 Flutter 开发的学习路径,包括掌握 Flutter 和鸿蒙基础知识,解决 MatePad 适配、模拟器异常、debug 版本错误等问题,并提供了更换 App 图标和名称的方法及环境变量配置指导。
50 0
|
开发工具 开发者
HarmonyOS初探02——开发第一个HarmonyOS应用
本节演示如何开发第一个HarmonyOS应用。
142 0

热门文章

最新文章