【知识分享】Vue实现视频的不同分屏切换并播放流

代码部分:

<template>

  <div>

    <el-row>

      <el-col :span="4" style="height: 100%">

        <h4>视频列表</h4>

        <el-divider style="width: 75%; margin: 10px 0; overflow-y: auto" />

        <el-tree

          style="max-height: 660px; overflow: auto"

          :data="data"

          default-expand-all

          node-key="id"

          :props="defaultProps"

          :check-on-click-node="true"

          :check-strictly="true"

          @check="treeCheck"

          ref="treeForm"

        ></el-tree>

      </el-col>

      <el-col :span="20">

        <el-row v-if="true" style="margin-bottom: 16px">

          <el-button @click="changeScreen(1)">大屏</el-button>

          <el-button @click="changeScreen(4)">四分屏</el-button>

          <el-button @click="changeScreen(9)">九分屏</el-button>

        </el-row>

        <div v-if="screenNumber == 1">

          <el-row>

            <el-col style="height: 660px">

              <VideoComponent :code="cameraCode" />

              <!-- <el-image style="width: 100%; height: 100%" :src="image1src" alt="图片丢失了" /> -->

            </el-col>

          </el-row>

        </div>

        <div v-if="screenNumber == 4">

          <el-row :gutter="20">

            <el-col :span="12" style="height: 340px">

              <VideoComponent :code="cameraFour1Code" />

            </el-col>

            <el-col :span="12" style="height: 340px">

              <VideoComponent :code="cameraFour2Code" />

            </el-col>

            <el-col :span="12" style="height: 340px">

              <VideoComponent :code="cameraFour3Code" />

            </el-col>

            <el-col :span="12" style="height: 340px">

              <VideoComponent :code="cameraFour4Code" />

            </el-col>

          </el-row>

        </div>

        <div v-if="screenNumber == 9">

          <el-row :gutter="20">

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine1Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine2Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine3Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine4Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine5Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine6Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine7Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine8Code" />

            </el-col>

            <el-col :span="8" style="height: 227px">

              <VideoComponent :code="cameraNine9Code" />

            </el-col>

          </el-row>

        </div>

      </el-col>

    </el-row>

  </div>

</template>

<script lang="ts" setup>

import { nextTick, ref, onMounted } from 'vue'

import VideoComponent from '@/core/views/dynamic/video/VideoComponent.vue'

import { request } from '@/core/utils/customRequest'

const screenNumber = ref(1)

const data = ref([])

const defaultProps = ref({

  children: 'children',

  label: 'label'

})

const treeForm = ref<InstanceType<typeof ElTree>>()

const cameraCode = ref()

const cameraFour1Code = ref()

const cameraFour2Code = ref()

const cameraFour3Code = ref()

const cameraFour4Code = ref()

const cameraNine1Code = ref()

const cameraNine2Code = ref()

const cameraNine3Code = ref()

const cameraNine4Code = ref()

const cameraNine5Code = ref()

const cameraNine6Code = ref()

const cameraNine7Code = ref()

const cameraNine8Code = ref()

const cameraNine9Code = ref()

const treeCheck = (node: any, list: any) => {

  if (screenNumber.value == 1) {

    cameraCode.value = node.obj2Props[3].value

  }

  if (screenNumber.value == 4) {

    if (cameraFour1Code.value == null || cameraFour1Code.value == '') {

      cameraFour1Code.value = node.obj2Props[3].value

    } else {

      if (cameraFour2Code.value == null || cameraFour2Code.value == '') {

        cameraFour2Code.value = node.obj2Props[3].value

      } else {

        if (cameraFour3Code.value == null || cameraFour3Code.value == '') {

          cameraFour3Code.value = node.obj2Props[3].value

        } else {

          if (cameraFour4Code.value == null || cameraFour4Code.value == '') {

            cameraFour4Code.value = node.obj2Props[3].value

          } else {

            cameraFour4Code.value = node.obj2Props[3].value

          }

        }

      }

    }

  }

  if (screenNumber.value == 9) {

    if (cameraNine1Code.value == null || cameraNine1Code.value == '') {

      cameraNine1Code.value = node.obj2Props[3].value

    } else {

      if (cameraNine2Code.value == null || cameraNine2Code.value == '') {

        cameraNine2Code.value = node.obj2Props[3].value

      } else {

        if (cameraNine3Code.value == null || cameraNine3Code.value == '') {

          cameraNine3Code.value = node.obj2Props[3].value

        } else {

          if (cameraNine4Code.value == null || cameraNine4Code.value == '') {

            cameraNine4Code.value = node.obj2Props[3].value

          } else {

            if (cameraNine5Code.value == null || cameraNine5Code.value == '') {

              cameraNine5Code.value = node.obj2Props[3].value

            } else {

              if (cameraNine6Code.value == null || cameraNine6Code.value == '') {

                cameraNine6Code.value = node.obj2Props[3].value

              } else {

                if (cameraNine7Code.value == null || cameraNine7Code.value == '') {

                  cameraNine7Code.value = node.obj2Props[3].value

                } else {

                  if (cameraNine8Code.value == null || cameraNine8Code.value == '') {

                    cameraNine8Code.value = node.obj2Props[3].value

                  } else {

                    if (cameraNine9Code.value == null || cameraNine9Code.value == '') {

                      cameraNine9Code.value = node.obj2Props[3].value

                    } else {

                      cameraNine9Code.value = node.obj2Props[3].value

                    }

                  }

                }

              }

            }

          }

        }

      }

    }

  }

  //node 该节点所对应的对象、list 树目前的选中状态对象

  //选中事件在选中后执行,当lis中有两个选中时,使用setCheckedKeys方法,选中一个节点

  if (list.checkedKeys.length == 2) {

    //单选实现

    treeForm.value!.setCheckedKeys([node.id])

    console.log('测试treeForm的值', treeForm.value)

  }

}

onMounted(() => {

  getThreeData()

})

const getThreeData = () => {

  request({

    url: 'fast-mdm/web/MdObjectRelation/queryTree/ByRelationTypeId?relationTypeId=13',

    method: 'get',

    showLoading: true

  })

    .then((response: any) => {

      console.log('测试树状菜单的返回结果', response.data)

      data.value = response.data

    })

    .catch(() => {})

}

const changeScreen = (number: any) => {

  if (number == 1) {

    screenNumber.value = 1

  } else if (number == 4) {

    screenNumber.value = 4

  } else if (number == 9) {

    screenNumber.value = 9

  }

}

</script>

实现效果:

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue可以通过使用HTML5的video标签来实现视频播放,并且可以使用一些JavaScript库来实现记忆播放功能。 记忆播放是指当用户暂停或关闭视频后,下一次打开视频时可以从上次观看的时间点继续播放实现记忆播放功能的主要步骤如下: 1. 获取视频的当前时间点 在用户暂停或关闭视频时,可以通过监听video标签的timeupdate事件来获取视频的当前时间点。 ``` <video ref="video" @timeupdate="onTimeUpdate"></video> ... methods: { onTimeUpdate() { this.currentTime = this.$refs.video.currentTime; } } ``` 2. 将视频的当前时间点保存到本地存储 在获取到视频的当前时间点后,可以使用浏览器的本地存储(如localStorage)将其保存起来。在Vue中,可以使用Vue的mixin来实现全局的localStorage操作。 ``` const localStorageMixin = { methods: { setLocalStorage(key, value) { localStorage.setItem(key, JSON.stringify(value)); }, getLocalStorage(key) { const value = localStorage.getItem(key); return value ? JSON.parse(value) : null; }, removeLocalStorage(key) { localStorage.removeItem(key); } } } Vue.mixin(localStorageMixin); ``` 在视频暂停或关闭时,可以将视频的当前时间点保存到本地存储。 ``` methods: { onTimeUpdate() { this.currentTime = this.$refs.video.currentTime; this.setLocalStorage('video-current-time', this.currentTime); }, onPause() { this.setLocalStorage('video-current-time', this.currentTime); }, onClose() { this.setLocalStorage('video-current-time', this.currentTime); } } ``` 3. 在视频播放时,从本地存储中获取上次观看的时间点 在视频播放时,可以在mounted或created生命周期钩子中从本地存储中获取上次观看的时间点,并将其设置为视频的初始时间点。 ``` mounted() { const currentTime = this.getLocalStorage('video-current-time'); if (currentTime) { this.$refs.video.currentTime = currentTime; } } ``` 通过以上步骤,就可以实现记忆播放功能。当用户暂停或关闭视频时,会将当前时间点保存到本地存储中,下一次打开视频时会从上次观看的时间点继续播放

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加瓦程序设计师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值