抖音平台小程序

index.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // 自定义组件参考:https://mp.kuaishou.com/docs/develop/frame/custom_comp/component_constructor.html
  2. // video 参考:https://bytedance.larkoffice.com/docx/TsJmdbX6co33uJxi7j9cfYc2nnd
  3. // 可使用 tt.canIUse('video-player') 判断是否支持最新播放器
  4. // 基础库 2.77.0 开始支持本组件,基础库只在抖音、抖极、抖火 23.8 及以上版本支持
  5. Component({
  6. // 外部样式属性定义,其实也就是把内部需要外部支持的 class 名称放这里导出
  7. // 在外部直接使用导出的名称字段关联即可,可以同时导出多个,这里是数组 ['','',...]
  8. externalClasses: ['inner-class'],
  9. // 对内参数
  10. data: {
  11. },
  12. // 对外参数(prop)
  13. properties: {
  14. // 内部样式
  15. innerStyle: {
  16. type: String,
  17. value: ''
  18. },
  19. // 唯一标识符
  20. id: {
  21. type: String,
  22. value: ''
  23. },
  24. // 原片id
  25. albumId: {
  26. type: String,
  27. value: ''
  28. },
  29. // 剧集id
  30. episodeId: {
  31. type: String,
  32. value: ''
  33. },
  34. // 废弃字段。为了兼容老版本,请传 1
  35. version: {
  36. type: String,
  37. value: '1'
  38. },
  39. // 使用cdn类型,1: 抖音云 2: 三方云
  40. cloudType: {
  41. type: Number,
  42. value: 1
  43. },
  44. // 播放地址,cloudType 为 2 时生效,传入第三方播放地址 http://vjs.zencdn.net/v/oceans.mp4
  45. src: {
  46. type: String,
  47. value: ''
  48. },
  49. // 自动播放
  50. autoplay: {
  51. type: Boolean,
  52. value: false
  53. },
  54. // 显示默认播放控件(播放/暂停按钮、播放进度、时间)
  55. controls: {
  56. type: Boolean,
  57. value: true
  58. },
  59. // 循环播放
  60. loop: {
  61. type: Boolean,
  62. value: false
  63. },
  64. // 静音播放
  65. muted: {
  66. type: Boolean,
  67. value: false
  68. },
  69. // 指定视频初始播放位置
  70. initialTime: {
  71. type: Number,
  72. value: 0
  73. },
  74. // 指定视频时长
  75. duration: {
  76. type: Number,
  77. value: 0
  78. },
  79. // 'contain' | 'fill' | 'cover'
  80. objectFit: {
  81. type: String,
  82. value: 'contain'
  83. },
  84. // 若不设置,宽度大于 240 时才会显示
  85. showProgress: {
  86. type: Boolean,
  87. value: true
  88. },
  89. // 是否显示全屏按钮
  90. // 在同层渲染模式下仅支持控制竖屏状态(非全屏)下的「全屏按钮」的显示,横屏状态(全屏)不显示「退出全屏按钮」,只能通过标题旁边的箭头退出全屏
  91. showFullscreenBtn: {
  92. type: Boolean,
  93. value: true
  94. },
  95. // 是否显示视频底部控制栏的播放按钮
  96. showPlayBtn: {
  97. type: Boolean,
  98. value: true
  99. },
  100. // 是否开启控制进度的手势
  101. enableProgressGesture: {
  102. type: Boolean,
  103. value: true
  104. },
  105. // 是否开启播放手势,即双击切换播放/暂停
  106. enablePlayGesture: {
  107. type: Boolean,
  108. value: false
  109. },
  110. // 是否显示静音按钮
  111. showMuteBtn: {
  112. type: Boolean,
  113. value: false
  114. },
  115. // 视频封面
  116. poster: {
  117. type: String,
  118. value: ''
  119. }
  120. },
  121. methods: {
  122. // 加载 ref
  123. refHandler(ref) {
  124. this.triggerEvent('ref', ref)
  125. },
  126. // 当开始/继续播放时触发 play 事件
  127. handlePlay(e) {
  128. this.triggerEvent('play', e)
  129. },
  130. // 当暂停播放时触发 pause 事件
  131. handlePause(e) {
  132. this.triggerEvent('pause', e)
  133. },
  134. // 当播放到末尾时触发 ended 事件
  135. handleEnded(e) {
  136. this.triggerEvent('ended', e)
  137. },
  138. // 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次
  139. handleTimeupdate(e) {
  140. this.triggerEvent('timeupdate', e)
  141. },
  142. // 视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction 有效值为 vertical 或 horizontal
  143. handleFullscreenchange(e) {
  144. this.triggerEvent('fullscreenchange', e)
  145. },
  146. // bindgetsource 表示 video-player 组件内部资源获取完成。如果使用 VideoContext 播放,需在这个时机后播放,否则可能出现播放失败。
  147. // 可用 tt.canIUse('video-player.bindgetsource') 校验是否支持该事件,如果不支持需作降级处理。
  148. handleGetsource (e) {
  149. this.triggerEvent('getsource', e)
  150. },
  151. // 视频播放出错时触发
  152. handleError(e) {
  153. this.triggerEvent('error', e)
  154. }
  155. }
  156. })