百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

教你从头开始写课堂签到的微信小程序(二)实现签到及视频播放

zhezhongyun 2025-03-30 23:15 54 浏览

一、签到子页面布局

子页面主要是一个签到按钮,然后下方是签到记录列表。

1、签到按钮

布局代码:

样式代码:

/* 签到按钮样式 */

.sign-button{

margin-top: 30rpx;

margin-bottom: 30rpx;

display: flex;

width: 240rpx;

height: 240rpx;

line-height: 240rpx;

color: red;

background-color: greenyellow;

border-radius: 50%;

justify-content: center;

font-size: 36px;

}

效果:

简单的签到按钮图

2、签到列表设计

布局代码:

签到记录


{{item.date}}

第{{item.numberNo}}次课

已签到


{{item.date}}

第{{item.numberNo}}次课

未签到

样式代码:

/* 签到记录列表item样式 */

.sign-record-item{

height: 40px;

line-height: 40px;

border: 1px solid #eee;

white-space: nowrap;

display: flex;

flex-direction: row;

font-size: 15px;

color: green;

align-items: center;

justify-content: center;

}

/* 签到记录列表item日期样式 */

.sign-record-item-date{

padding-left: 50rpx;

}

/* 签到记录列表item次数样式 */

.sign-record-item-count{

padding-left: 100rpx;

}

/* 签到记录列表item是否签到icon样式 */

.sign-record-item-icon{

margin-top: 20px;

padding-left: 100rpx;

}

/* 签到记录列表item签到结果样式 */

.sign-record-item-result{

padding-left: 15rpx;

}

效果:

课堂签到界面图

二、课程视频播放页面

课程视频是一个page,于是新建一个page,布局思路是屏幕上方是播放组件video,接下来是课程系列名称,然后是集数列表,点击时可以播放对应的url。

1、页面布局

看源码发现video组件有如下属性:

属性名

类型

默认值

说明

最低版本

src

String


要播放视频的资源地址,支持云文件ID(2.2.3起)


initial-time

Number


指定视频初始播放位置

1.6.0

duration

Number


指定视频时长

1.1.0

controls

Boolean

true

是否显示默认播放控件(播放/暂停按钮、播放进度、时间)


danmu-list

Object Array


弹幕列表


danmu-btn

Boolean

false

是否显示弹幕按钮,只在初始化时有效,不能动态变更


enable-danmu

Boolean

false

是否展示弹幕,只在初始化时有效,不能动态变更


autoplay

Boolean

false

是否自动播放


loop

Boolean

false

是否循环播放

1.4.0

muted

Boolean

false

是否静音播放

1.4.0

page-gesture

Boolean

false

在非全屏模式下,是否开启亮度与音量调节手势

1.6.0

direction

Number


设置全屏时视频的方向,不指定则根据宽高比自动判断。有效值为 0(正常竖向), 90(屏幕逆时针90度), -90(屏幕顺时针90度)

1.7.0

show-progress

Boolean

true

若不设置,宽度大于240时才会显示

1.9.0

show-fullscreen-btn

Boolean

true

是否显示全屏按钮

1.9.0

show-play-btn

Boolean

true

是否显示视频底部控制栏的播放按钮

1.9.0

show-center-play-btn

Boolean

true

是否显示视频中间的播放按钮

1.9.0

enable-progress-gesture

Boolean

true

是否开启控制进度的手势

1.9.0

objectFit

String

contain

当视频大小与 video 容器大小不一致时,视频的表现形式。contain:包含,fill:填充,cover:覆盖


poster

String


视频封面的图片网络资源地址或云文件ID(2.2.3起支持)如果 controls 属性值为 false 则设置 poster 无效


bindplay

EventHandle


当开始/继续播放时触发play事件


bindpause

EventHandle


当暂停播放时触发 pause 事件


bindended

EventHandle


当播放到末尾时触发 ended 事件


bindtimeupdate

EventHandle


播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次


bindfullscreenchange

EventHandle


视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction取为 vertical 或 horizontal

1.4.0

bindwaiting

EventHandle


视频出现缓冲时触发

1.7.0

binderror

EventHandle


视频播放出错时触发

1.7.0

于是得到布局代码:

{{course_series}}

第{{item.episode}}集

{{item.name}}

{{item.duration}}

样式代码:

/* pages/vedioPlayer.wxss */

.section video{

width: 100%;

}

.course-series{

height: 100rpx;

padding-left: 20rpx;

border-left-width: 5rpx;

border-left-color: greenyellow;

border-left-style: solid;

line-height: 100rpx;

color: green;

}

.course-video-item{

height: 60rpx;

padding-left: 20rpx;

border-left-width: 5rpx;

border-left-color: blue;

border-left-style: solid;

line-height: 60rpx;

color: rgb(7, 145, 199);

}

.video-item-name{

padding-left: 20rpx;

}

.video-item-duration{

padding-left: 2rpx;

text-align: right;

}

效果:

课程播放界面图

2、后台代码

(1)在main页面请求服务器获得视频信息

(2)格式化数据

(3)首页轮播图加载视频缩略图url

(4)点击对应轮播图把对应url所属的视频信息传给视频播放页面

(5)视频播放页面解析传过来的数据加载课程名称和集数信息

(6)点击集数列表的item时把当前集的url传给video组件即可播放

首页代码:

var Bmob = require("../../utils/Bmob-1.6.3.min.js");

data: {

// 轮播图对应视频信息

videoData: [],

// 轮播图对应图片地址

videoImgUrls:[]

}

,

//轮播图点击事件

swiperItemClick:function(e){

var vedioSeries = new Array();

var index = 0;

// 判断是同一个系列课程

for(var i=0;i<this.data.videoData.length;i++){

if (this.data.videoData[i].series == this.data.videoImgUrls[e.currentTarget.id].series){

videoSeries[index++] = this.data.videoData[i];

}

}

// 把vedioSeries传给视频播放页面

wx.navigateTo({

url: '../videoPlayer/videoPlayer?videoSeries=' + JSON.stringify(videoSeries),

});

}

,

//获得轮播的视频信息

getVideoInfo:function(){

wx.showToast({

title: '正在加载...',

icon:'loading',

duration:10000

})

let query = Bmob.Query('course_vedio');

query.find().then(res => {

var imgUrls = new Array();

for (var i = 0; i < res.length; i++) {

if (res[i].thumbnail != null && imgUrls.indexOf(res[i].series) == -1)

imgUrls[i] = res[i];

}

wx.hideToast();

that.setData({ videoData: res, videoImgUrls: imgUrls });

});

}

注意,现在引入Bmob服务器的sdk,要在app.js中初始化:

Bmob.initialize("xxx", "xxx");

详情请查看bmob官方网站https://www.bmob.cn/。

vedioPlayer.js代码:

// pages/vedioPlayer.js

var Bmob = require("../../utils/Bmob-1.6.3.min.js");

var that;


Page({

/**

* 页面的初始数据

*/

data: {

videoItemSrc:null,

course_series:null,

videoSeries:[]

},

/**

* 生命周期函数--监听页面加载

*/

onLoad: function (options) {

var series = JSON.parse(options.videoSeries);

this.setData({ videoItemSrc: series[0].video.url,course_series: series[0].series,videoSeries : series});

},

videoChooseClick:function(e){

this.setData({ videoItemSrc: this.data.videoSeries[e.target.id].video.url});

}

})

下篇将介绍签到的逻辑及代码实现。

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...