UniApp 小程序封装原生组件(使用与交互详细流程)

简介: UniApp 小程序封装原生组件(使用与交互详细流程)

一、简介

  • 在使用 UniApp 进行多平台小程序开发的时候,发现 UniApp 官方组件在其中部分平台无法生效,或新的属性还没有进行支持,这个时候可以自行封装一个原生组件,并使用到 UniApp 中。


  • 参考文档:

二、案例:封装一个快手播放器组件 ks-video

  • 按下面原生写好组件,也按上面导入之后,直接在对应页面使用 <ks-video></ks-video> 即可,跟正常 vue 的组件一样,记得区分平台进行条件编译
  • index.css 没啥好写的。
  • index.ksml
<view class="ks-video-view">
  <video
    class="ks-video-content"
    id="{{ id }}"
    src="{{ src }}"
    controls="{{ controls }}"
    autoplay="{{ autoplay }}"
    loop="{{ loop }}"
    muted="{{ muted }}"
    initial-time="{{ initialTime }}"
    duration="{{ duration }}"
    object-fit="{{ objectFit }}"
    show-progress="{{ showProgress }}"
    show-fullscreen-btn="{{ showFullscreenBtn }}"
    show-play-btn="{{ showPlayBtn }}"
    enable-progress-gesture="{{ enableProgressGesture }}"
    show-mute-btn="{{ showMuteBtn }}"
    bindplay="handleStart"
    bindpause="handlePause"
    bindended="handleEnded"
    bindtimeupdate="handleTimeupdate"
    bindfullscreenchange="handleFullscreenchange"
    binderror="handleError"
  >
  </video>
</view>
  • index.json
{
    "usingComponents": {},
    // 是组件,记得填 true
    "component": true
}
  • index.js
    对外参数在 vue 中可以按正常参数使用,例如::src="url"
    对外抛出的事件在 vue 中可以按正常参数使用,例如:@start="handleStart"
// 自定义组件参考:https://mp.kuaishou.com/docs/develop/frame/custom_comp/component_constructor.html
// video 参考:https://mp.kuaishou.com/docs/develop/components/media/video.html
// 组件封装
Component({
  // 对外参数(prop)
  properties: {
    // 唯一标识符
    id: {
      type: String,
      value: ''
    },
    // 播放地址
    src: {
      type: String,
      value: 'http://vjs.zencdn.net/v/oceans.mp4'
    },
    // 显示默认播放控件(播放/暂停按钮、播放进度、时间)
    controls: {
      type: Boolean,
      value: true
    },
    // 自动播放
    autoplay: {
      type: Boolean,
      value: false
    },
    // 循环播放
    autoplay: {
      type: Boolean,
      value: false
    },
    // 静音播放
    muted: {
      type: Boolean,
      value: false
    },
    // 指定视频时长
    duration: {
      type: Number,
      value: 0
    },
    // 指定视频初始播放位置
    initialTime: {
      type: Number,
      value: 0
    },
    // 'contain' | 'fill' | 'cover'
    objectFit: {
      type: String,
      value: 'contain'
    },
    // 若不设置,宽度大于 240 时才会显示
    showProgress: {
      type: Boolean,
      value: true
    },
    // 是否显示全屏按钮
    // 在同层渲染模式下仅支持控制竖屏状态(非全屏)下的「全屏按钮」的显示,横屏状态(全屏)不显示「退出全屏按钮」,只能通过标题旁边的箭头退出全屏
    showFullscreenBtn: {
      type: Boolean,
      value: true
    },
    // 是否显示视频底部控制栏的播放按钮
    showPlayBtn: {
      type: Boolean,
      value: true
    },
    // 是否开启控制进度的手势
    enableProgressGesture: {
      type: Boolean,
      value: true
    },
    // 是否显示静音按钮
    showMuteBtn: {
      type: Boolean,
      value: false
    }
  },
  // 组件方法
  methods: {
    // 当开始/继续播放时触发 play 事件
    handleStart (e) {
      this.triggerEvent('start', e)
    },
    // 当暂停播放时触发 pause 事件
    handlePause (e) {
      this.triggerEvent('pause', e)
    },
    // 当播放到末尾时触发 ended 事件
    handleEnded (e) {
      this.triggerEvent('ended', e)
    },
    // 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次
    handleTimeupdate (e) {
      this.triggerEvent('timeupdate', e)
    },
    // 视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction 有效值为 vertical 或 horizontal
    handleFullscreenchange (e) {
      this.triggerEvent('fullscreenchange', e)
    },
    // 视频播放出错时触发
    handleError (e) {
      this.triggerEvent('error', e)
    }
  }
})

相关文章
|
2天前
|
移动开发 小程序 前端开发
超详细攻略!uniapp陪玩系统,打包陪玩小程序、H5需要注意什么?
陪玩系统的打包过程涵盖APP、小程序和H5平台。APP打包需使用uni-app开发工具,配置项目信息并选择云打包;小程序打包需在微信公众平台注册账号并提交审核;H5打包则直接通过uni-app生成文件并上传至服务器。各平台需注意权限配置、代码规范及充分测试,确保应用稳定性和兼容性。
|
2月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
43 0
在线课堂+工具组件小程序uniapp移动端源码
|
2月前
|
小程序 前端开发 算法
|
3月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
409 3
|
3月前
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
3月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
1290 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
3月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
63 0
微信小程序更新提醒uniapp
|
3月前
|
机器学习/深度学习 人工智能 小程序
【一步步开发AI运动小程序】三、运动识别处理流程
随着人工智能技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等AI运动APP备受关注。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。文章介绍了视频帧、帧率FPS、抽帧和人体识别等基本概念,并详细说明了处理流程,包括抽帧、人体识别检测、骨骼图绘制和运动分析等步骤。下篇将介绍如何在小程序中实现抽帧。
|
5月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
123 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
5月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
130 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序