实验4:媒体API之口述校史小程序

2024年夏季《移动软件开发》实验报告

本实验属于哪门课程?中国海洋大学24夏《移动软件开发》
实验名称?实验4:媒体API之口述校史小程序
Github仓库地址?实验4:媒体API之口述校史小程序

一、实验目标

1、掌握视频API的操作方法;

2、掌握如何发送随机颜色的弹幕。

二、实验步骤

1、项目准备

  • 资源准备

准备一个名为 play 的 .png 图片文件,放在 项目文件夹 下新建的 images 文件夹下
在这里插入图片描述

  • 项目创建

创建微信小程序,填入个人的 AppID,使用 JS基础模板

注:关于微信小程序的注册与第一次使用:

微信公众平台 完成用户注册,微信小程序注册、备案相关流程

②安装 微信开发者工具,利用平台信息后获取的小程序 AppID 实现连接
在这里插入图片描述

2、页面配置

  • 根据实验要求完成项目目录的初始配置

在这里插入图片描述

3、视图设计相关介绍已注释在代码中

  • index.wxml
<!-- 页面主要分为三个区域,分别播放视频、编辑&发送弹幕、展示视频列表 -->

<!-- 区域1:视频播放器 -->
<!-- id: 为 video 绑定唯一ID "myViedo"; 
	controls: 启用视频的控制面板; 
	src: 视频URL,通过数据绑定的方式动态设置视频地址; 
	enable-danmu danmu-btn 控制弹幕开启&关闭  -->
<video id="myVideo" controls src="{{ src }}" enable-danmu danmu-btn></video>

<!-- 区域2:弹幕控制 -->
<view class="danmuArea">
<!-- placeholder: 占位符文字,输入框内容为空时显示
	bindinput: 绑定触发 getDanmu 函数获取输入框信息待发送-->
  <input type="text" placeholder="请留下点什么吧~" bindinput="getDanmu"></input>
<!-- bind:tap 绑定触发 sendDanmu 函数发送弹幕信息 -->
  <button bind:tap="sendDanmu">发送弹幕</button>
</view>

<!-- 区域3:视频列表 -->
<view class="videoList">
<!-- wx:for 遍历 list 数组,为每个元素生成一个"videoBar"的视图
	wx:key 为每个视频条目生成唯一的 key,以便更新列表
	data-url 将每个视频的 URL 绑定到当前"videoBar"上,以便在点击时传递给 playVideo 播放函数
	bind:tap 绑定事件,点击某个视频条目时触发 playVideo 播放函数-->
  <view class="videoBar" wx:for="{{ list }}" wx:key="video{{ index }}" data-url="{{ item.videoUrl }}" bind:tap="playVideo">
    <image src="/images/play.png"></image>
    <text>{{ item.title }}</text>
  </view>
</view>
  • index.wxss
video{
  width: 100%;
}

.danmuArea{
  /* 水平排列 */
  display: flex;
  flex-direction: row;
}

input{
  /* 边框宽度&样式&颜色 */
  border: 1rpx solid #987938; 
  /* 扩张多余空间宽度 */
  flex-grow: 1; 
  height: 100rpx;
}

button{
  color: white;
  background-color: #987938;
}

.videoList{
  width: 100%;
  min-height: 400rpx;
}

.videoBar{
  width: 95%;
  display: flex;
  flex-direction: row;
  border-bottom: 1rpx solid #987938;
  margin: 10rpx;
}

image{
  width: 70rpx;
  height: 70rpx;
  margin: 20rpx;
}

text{
  font-size: 45rpx;
  color: #987938;
  margin: 20rpx;
  flex-grow: 1;
}

4、逻辑实现

  • index.js (仅展示改动部分)
  data: {
    danmuTxt: '',
    list: [{
      id: '1001',
      title: '杨国宜先生口述校史实录',
      videoUrl: 
 'http://arch.ahnu.edu.cn/__local/6/CB/D1/C2DF3FC847F4CE2ABB67034C595_025F0082_ABD7AE2.mp4?e=.mp4'
      },
      {
      id: '1002',
      title: '唐成伦先生口述校史实录',
      videoUrl: 
     'http://arch.ahnu.edu.cn/__local/E/31/EB/2F368A265E6C842BB6A63EE5F97_425ABEDD_7167F22.mp4?e=.mp4'
      },
      {
      id: '1003',
      title: '倪光明先生口述校史实录',
      videoUrl: 
     'http://arch.ahnu.edu.cn/__local/9/DC/3B/35687573BA2145023FDAEBAFE67_AAD8D222_925F3FF.mp4?e=.mp4'
      },
      {
      id: '1004',
      title: '吴仪兴先生口述校史实录',
      videoUrl: 
     'http://arch.ahnu.edu.cn/__local/5/DA/BD/7A27865731CF2B096E90B522005_A29CB142_6525BCF.mp4?e=.mp4'
      }
    ]
  },

//getDanmu: 将 input 输入框信息同步到 danmuTxt 
  getDanmu: function (e) {
    this.setData({
      danmuTxt: e.detail.value
    })
  },
      
//sendDanmu: 调用视频上下文 videoCtx 的 sendDanmu 方法,将 弹幕文本 和 随机颜色 (调用 getRandomColor 函数) 发送到视频播放器中显示
  sendDanmu: function (e) {
    let text = this.data.danmuTxt;
    this.videoCtx.sendDanmu({
      text: text,
      color: this.getRandomColor()
    })
  },

//getRandomColor: 随机生成一随机颜色
   getRandomColor: function() {
    let rgb = []
    for(let i = 0; i < 3; ++i){
      //生成一个 0 到 255 之间的随机数,并转换为十六进制字符串
      let color = Math.floor(Math.random() * 256).toString(16)	
      //确保每个颜色值为两位数(在个位数时补零)
      color = color.length == 1 ? '0' + color : color	
      //推入 rgb 数组
      rgb.push(color)
    }
    //将 RGB 数组中的颜色值组合为字符串,并在前面加上 # 号,生成最终的十六进制颜色代码
    return '#' + rgb.join('')
  },

//playVideo: 切换并播放所选的视频
  playVideo: function (e) {
    //停止当前播放的视频
    this.videoCtx.stop()	
    this.setData({
      //更新视频源 src,将视频切换为用户点击的视频条目
      src: e.currentTarget.dataset.url
    })
    console.log(e.currentTarget.dataset.url);
    //播放新的视频
    this.videoCtx.play()
    //延迟 500 毫秒后再次调用播放方法,确保视频顺利播放
    setTimeout(() => {
      this.videoCtx.play();
    }, 500); // 延迟500毫秒
  },

//生命周期函数--监听页面加载,加载时自动调用,初始化视频上下文 videoCtx
  onLoad: function (options) {
    //创建一个视频上下文 videoCtx,并关联到 ID 为 myVideo 的视频组件
    this.videoCtx = wx.createVideoContext('myVideo')
  },

三、程序运行结果

【初始加载页面】

展示视图设计

在这里插入图片描述

【视频播放】

点击任一视频列表内视频,视窗展示选中视频

在这里插入图片描述

点击暂停视频

在这里插入图片描述

点击不同视频实现视频的切换

在这里插入图片描述

【发送弹幕】

输入框中输入任意内容,点击发送弹幕,可以看到相应内容附任意颜色展示在视频上方

在这里插入图片描述

四、问题总结与体会

描述实验过程中所遇到的问题,以及是如何解决的。有哪些收获和体会,对于课程的安排有哪些建议。

【问题总结】

1、编写 index.wxml 进行视图设计时,使用 image 单标签未生效

<image />	(x)

解决:通过尝试发现,微信小程序中不支持 image 单标签结束,换用

<image>  </image> 

【体会】

通过实现视频播放和弹幕等功能,进一步了解多数据展示、数据切换展示、前端数据获取&存储&发布 功能的开发流程,也逐步提高了前端代码编写和解读的能力。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值