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

相关文章
|
JavaScript 小程序 API
UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路·优雅草卓伊凡
UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路·优雅草卓伊凡
846 12
UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路·优雅草卓伊凡
|
前端开发 API UED
封装 uniapp 请求库的最佳实践
背景 在前端开发中,HTTP 请求是与服务器进行数据交互的核心手段。无论是获取数据还是提交数据,前端应用几乎都离不开 HTTP 请求。在 uniapp 中,uni.request 是官方提供的用于发起 HTTP 请求的基础 API。然而,直接使用 uni.request 存在一些问题和不足,比如: 1. 代码冗余:每次发起请求时都需要编写类似的配置代码,导致代码重复。 2. 缺乏统一管理:没有统一的地方管理请求参数、头信息、错误处理等,使得代码不易维护
609 7
|
JSON 小程序 JavaScript
原生微信小程序笔记完整总结
原生微信小程序笔记完整总结
673 1
微信小程序数据绑定与事件处理:打造动态交互体验
在上一篇中,我们学习了搭建微信小程序开发环境并创建“Hello World”页面。本文深入探讨数据绑定和事件处理机制,通过具体案例帮助你打造更具交互性的小程序。数据绑定使用双花括号`{{}}`语法,实现页面与逻辑层数据的动态关联;事件处理则通过`bind`或`catch`前缀响应用户操作。最后,通过一个简单的计数器案例,巩固所学知识。掌握这些核心技能,将助你开发更复杂的小程序。
|
缓存 小程序 API
微信小程序网络请求与API调用:实现数据交互
本文深入探讨了微信小程序的网络请求与API调用,涵盖`wx.request`的基本用法、常见场景(如获取数据、提交表单、上传和下载文件)及注意事项(如域名配置、HTTPS协议、超时设置和并发限制)。通过一个简单案例,演示了如何实现小程序与服务器的数据交互。掌握这些技能将帮助你构建功能更丰富的应用。
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
980 1
微信小程序:轻松实现时间轴组件
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
443 0
在线课堂+工具组件小程序uniapp移动端源码
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
3142 1
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
1282 0
微信小程序:自定义关注公众号组件样式
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
400 7
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)

热门文章

最新文章