| 
						 | 
						<template>  <view class="ui-video-wrap">    <video      :id="`sVideo${uid}`"      class="radius"      :style="[{ height: height + 'rpx' }]"      :src="src"      controls      object-fit="contain"      :enable-progress-gesture="state.enableProgressGesture"      :initial-time="initialTime"      x5-video-player-type="h5"      x-webkit-airplay="allow"      webkit-playsinline="true"      @error="videoErrorCallback"      @timeupdate="timeupdate"      @play="play"      @pause="pause"      @ended="end"      :poster="poster"      :autoplay="autoplay"    >      <!-- #ifdef APP-PLUS -->      <cover-view :style="{ transform: 'translateX(' + moveX + 'px)' }" />      <!-- #endif -->    </video>  </view></template><script setup>  /**   * 视频组件   *   * @property {Number} uid = 0 						- 当前轮播下标,还用来标记视频Id   * @property {Number} moveX = 0 					- app端轮播滑动距离   * @property {String} height = 300 					- 高度(rpx)   * @property {String} width = 750 					- 宽度(rpx)   * @property {Number} initialTime = 0 				- 指定视频播放位置   * @property {String} videoSize						- 视频大小   * @property {String} src 							- 视频播放地址   * @property {String} poster 						- 视频封面   *   *   */
  import { reactive, nextTick, getCurrentInstance } from 'vue';  import sheep from '@/sheep';  const vm = getCurrentInstance();
  // 数据
  const state = reactive({    // #ifdef APP-PLUS
    enableProgressGesture: true, // 手势滑动
    // #endif
    // #ifndef APP-PLUS
    enableProgressGesture: false, // 手势滑动
    // #endif
    showModal: false, // 弹框
  });
  // 接收参数
  const props = defineProps({    moveX: {      type: [Number],      default: 0,    },    // 下标索引
    uid: {      type: [Number, String],      default: 0,    },    // 视频高度
    height: {      type: Number,      default: 300,    },    // 视频宽度
    width: {      type: Number,      default: 750,    },    // 指定视频初始播放位置,单位为秒(s)
    initialTime: {      type: Number,      default: 1,    },    src: {      type: String,      default: '',    },    poster: {      type: String,      default: 'https://img1.baidu.com/it/u=1601695551,235775011&fm=26&fmt=auto',    },    autoplay: {      type: Boolean,      default: false,    }  });
  // 事件
  const emits = defineEmits(['videoTimeupdate']);
  // 播放进度变化时触发,播放进度传给父组件
  const timeupdate = (e) => {    emits('videoTimeupdate', e);  };  const videoErrorCallback = (e) => {    console.log('视频错误信息:', e.target.errMsg);  };  // 当开始/继续播放时触发play事件
  const play = () => {    console.log('视频开始');  };  // 当暂停播放时触发 pause 事件
  const pause = () => {    console.log('视频暂停');  };  // 视频结束触发end 时间
  const end = () => {    console.log('视频结束');  };  // 开始播放
  const startPlay = () => {    nextTick(() => {      const video = uni.createVideoContext(`sVideo${props.index}`, vm);      video.play();    });  };
  //暂停播放
  const pausePlay = () => {    const video = uni.createVideoContext(`sVideo${props.index}`, vm);    video.pause();  };
  // 播放前拦截
  const beforePlay = () => {    uni.getNetworkType({      success: (res) => {        const networkType = res.networkType;        // if (networkType === 'wifi' || networkType === 'ethernet') {
        //   startPlay();
        // } else {
        //   uni.showModal({
        //     title: '提示',
        //     content: `当前为移动网络,播放视频需消耗手机流量,是否继续播放?${networkType}`,
        //     success: (res) => {
        //       if (res.confirm) {
        //         startPlay();
        //       } else {
        //         state.isplay = false;
        //       }
        //     },
        //   });
        //   sheep.$helper.toast('正在消耗流量播放');
        //   startPlay();
        // }
        startPlay();      },    });  };
  // 抛出方法供父组件调用
  defineExpose({    pausePlay,  });</script><style lang="scss" scoped>  .radius {    width: 100%;  }  .ui-video-wrap {    display: flex;    align-items: center;    justify-content: center;
    .poster-wrap {      position: relative;      width: 100%;      height: 100%;
      .poster-image {        width: 100%;        height: 100%;      }
      .play-icon {        position: absolute;        left: 50%;        top: 50%;        width: 80rpx;        height: 80rpx;        transform: translate(-50%, -50%);        background-color: rgba($color: #000000, $alpha: 0.1);        border-radius: 50%;      }    }  }</style>
  |