更新记录

1.0.6(2024-04-23)

修复滑动视频未能暂停上个视频问题

1.0.5(2024-03-01)

插件名修改

1.0.4(2024-02-23)

查看更多

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.7.8 × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × ×

y-video-player 支持H5、微信小程序的短视频、短剧形式播放

使用示例

<view class="container" :style="{height: containerHieght}">
    <swiper class="swiper" :vertical="true" :style="{height: containerHieght}" @change="changeSwiper">
        <swiper-item v-for="item,index in videoSrcArr" :key="index">
            <view class="swiper-item">
                <y-video-player :item="item" :currnetIndex="currnetSwiper" :displayArr="displayArr"
                    :containerHieght="containerHieght">
                </y-video-player>
            </view>
        </swiper-item>
    </swiper>
</view>
<script lang="ts" setup>
    import {ref,watch} from 'vue';
    import yVideoPlayer from '@/uni_modules/y-video-player/components/y-video-player/y-video-player.vue';
    interface ImgVideoType {
        file: string            // 文件地址
        file_type: 1 | 2        // 文件类型
        cureent_time?: number   // 视频播放进度
        [key: string]: any
    }
    // video标签的高度,根据需求调整
    const containerHieght = ref<string>('100vh');
    // swiper当前所在位置
    const currnetSwiper = ref<number>(0);
    // 当前需要显示的数据
    const displayArr = ref<ImgVideoType[]>([]);

    const videoSrcArr = ref<ImgVideoType[]>([
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 12,
        },
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 0,
        },
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 33,
        },
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 0,
        },
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 6,
        },
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 18,
        },
        {
            file: 'https://xxxxxx',
            file_type: 2,
            cureent_time: 14,
        },
    ])
    videoSrcArr.value = videoSrcArr.value.map((item,index)=>{
        return {
            ...item,
            index
        }
    })
    /**swpier切换事件*/
    const changeSwiper = (e: any): void => {
        currnetSwiper.value = e.detail.current;
    }

    /**
     * 决定提前渲染多少个视频
     * @param {number} index 数组下标
     * @param {array} array 需要切割的数组
    */
    function sliceArrayByIndex<T>(index: number, array: T[]): T[]{
      // 如果数组长度小于5位,直接返回整个数组
        if (array.length < 5) {
          return array;
        }
        // 计算新数组的起始位置,确保不会小于0,同时尽量保证能够取到5个元素
        let start = index - 2;
        if (start < 0) {
          start = 0;
        } else if (index + 2 >= array.length) {
          start = array.length - 5; // 调整起始位置以确保数组长度为5
        }
        // 计算新数组的结束位置,确保不会超出数组长度
        let end = start + 5;
        return array.slice(start, end);
    }
    watch(currnetSwiper, (newVal)=>{
        displayArr.value = sliceArrayByIndex<ImgVideoType>(newVal,videoSrcArr.value);
    },{immediate: true})
</script>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问