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

相关文章
|
1月前
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
59 1
微信小程序:轻松实现时间轴组件
|
1月前
|
数据挖掘
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
57 10
|
1月前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
404 1
|
1月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
60 0
微信小程序:自定义关注公众号组件样式
|
1月前
|
搜索推荐 JavaScript 数据可视化
uniapp/vue个性化单选、复选组件
uniapp/vue个性化单选、复选组件
88 5
|
1月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
55 1
|
1月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
189 1
|
1月前
|
数据可视化 大数据 API
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
82 2
|
1月前
|
存储 API 数据库
uniapp APP自动更新组件
uniapp APP自动更新组件
64 1
|
22天前
|
移动开发 编解码 数据可视化
低代码可视化-uniapp SliderRange区间组件-代码生成器
SliderRange区间组件是一种用户界面元素,允许用户通过拖动滑块选择数值范围。组件支持微信小程序、H5和App,具有高度可定制性、响应式设计和多种事件处理功能。适用于价格筛选、音量调节等场景。代码实现包括滑动区域、滑块、事件处理等部分,支持可视化配置步长、颜色等属性。使用时需注意选择合适步长、提供清晰标签和考虑无障碍设计。
36 0