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)
    }
  }
})

相关文章
|
前端开发 API UED
封装 uniapp 请求库的最佳实践
背景 在前端开发中,HTTP 请求是与服务器进行数据交互的核心手段。无论是获取数据还是提交数据,前端应用几乎都离不开 HTTP 请求。在 uniapp 中,uni.request 是官方提供的用于发起 HTTP 请求的基础 API。然而,直接使用 uni.request 存在一些问题和不足,比如: 1. 代码冗余:每次发起请求时都需要编写类似的配置代码,导致代码重复。 2. 缺乏统一管理:没有统一的地方管理请求参数、头信息、错误处理等,使得代码不易维护
621 7
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
23571 14
|
JSON 小程序 JavaScript
原生微信小程序笔记完整总结
原生微信小程序笔记完整总结
681 1
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
448 0
在线课堂+工具组件小程序uniapp移动端源码
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
865 0
|
小程序 前端开发 算法
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
5019 3
|
机器学习/深度学习 人工智能 小程序
【一步步开发AI运动小程序】三、运动识别处理流程
随着人工智能技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等AI运动APP备受关注。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。文章介绍了视频帧、帧率FPS、抽帧和人体识别等基本概念,并详细说明了处理流程,包括抽帧、人体识别检测、骨骼图绘制和运动分析等步骤。下篇将介绍如何在小程序中实现抽帧。