echarts图表与播放器video联动

<template>
    <div>

        <div class="mv">
          <!--  视频,如果加了autoplay就是自动播放,controls表示有进度条-->

            <video  id="videoPlayer" :enable-progress-gesture="false"  @canplay="getVidDur()" controls src="http://localhost:8088/getVideo/video"/>
        </div>
        <div>
            <button @click="change()">跳转到19秒</button>
            <button @click="change2()">跳转到5秒</button>
            <button @click="change3()">跳转到32秒</button>
        </div>
        <br><br>
        <div class='map' style="height: 400px;width: 600px;"></div>

        <!--下面这个可以看到返回的内容是啥-->
    <!--    <div style="height:40px;width:100%;display: flex;justify-content: center;align-items: center;text-align: center;">
            <span id="lable" style="font-size: 20px;color: red;"></span>
        </div>-->
     </div>
</template>

<script>
    import axios from 'axios'
    import * as echarts from "echarts";
    import request from "@/services/request";
    import VideoPlayer from 'vue-video-player'
    import 'vue-video-player/src/custom-theme.css'
    import 'video.js/dist/video-js.css'

    var video = () => {
        var videoTime = document.getElementById("videoPlayer");
        console.log("video的方法获取时长"+videoTime.duration); //获取视频时长
        console.log("video的方法获取当前进度"+videoTime.currentTime); //获取视频当前播放时间
    };
    export default {
        name: "fourthVue",
        data() {
            return {
                i: "",
                cu: "",
                mvUrl: "",
                xData: ['2.645', '7.84651', '9.4851', '20.495', '25.41655', '34.8416', '40.5615', '43.8156'].map(function (str) {//横坐标按空格换行
                    return str.replace(' ', '\n');
                }),
                yData1: [88, 92, 63, 77, 94, 80, 72, 86],
                yData2: [80, 90, 60, 70, 90, 70, 62, 76],

            }
        },



        mounted() {

            this.initCharts();
        },

        methods: {
            getVidDur() {
                video();
            },

            change(){
                var videoTime = document.getElementById("videoPlayer");
                videoTime.currentTime="19.36919";
            },
            change2(){
                var videoTime = document.getElementById("videoPlayer");
                videoTime.currentTime='5.1651';
            },
            change3(){
                var videoTime = document.getElementById("videoPlayer");
                videoTime.currentTime=32.54554;
            },

            initCharts() {
                /*这种只可以刚开始就获取视频时长,也就是说不可以中途获取当前时长*/
                setTimeout(()=>{
                    this.i=document.getElementById('videoPlayer').duration
                    console.log("视频时长"+this.i);
                },800);

                // 基于准备好的dom,初始化echarts实例
                let box1 = document.querySelector('.map')
                // 使用init方法,初始化echarts的实例
                let myCharts1 = echarts.init(box1)

                var devnum;

                // 设置配置项
                myCharts1.setOption({
                    animationDuration: 2350,/*控制显示时间*/
                    title:{
                                text:'数据显示',
                                textStyle:{
                                    color:'black'
                                },
                                subtext:'折线图',
                                subtarget:'blank',
                                /*副标题跳转链接*/
                                sublink:'https://www.baidu.com',
                                /*边框粗细*/
                                /*borderWidth:2,*/
                                left:10
                            },
                            xAxis:{
                                type:'category',//类目轴
                                data:this.xData, //类目轴数据
                                boundaryGap:false,  //设置x第一个节点值,从y轴开始,true是默认有间距
                                triggerEvent:true,
                            },
                            yAxis:{
                                type:'value',  //type='value'不需要设置data,会根据series中的数据显示
                                scale:true,  //让y轴的值不从0开始
                                splitNumber:5,  //坐标轴分割的段数,只是预估值,会根据实际值的可读程度而改变
                                minInterval:10,  //坐标轴的最小刻度尺单位,会被splitNumber分割成的刻度而影响
                                maxInterval: 10  //坐标轴的最大刻度尺单位,强制限定
                            },

                            series:[
                                {
                                    name:'数据',
                                    type:'line', //数据显示方式,bar柱状图
                                    data:this.yData1,  //y轴数据和鼠标放上显示内容
                                    stack:'all',  //stack可以是任意值,则第二个图就会在第一个图的每个数据*2的高度上进行绘制,避免重叠
                                    /*   markPoint:{ //标记点,可以标记最大值和最小值以及任意点
                                         data:[
                                             {
                                                 type:'max',
                                                 name:'最大值',
                                             },{
                                                 type:'min',
                                                 name:'最小值'
                                             },
                                             {
                                                 type:'average',
                                                 name:'平均值'
                                             }
                                         ]
                                     },
                                     markLine:{ //标注线,这里是标平均值,
                                         // 也可以把average变成max,这样显示的就是最大值的横线
                                         data:[
                                             {
                                                 type:'average',
                                                 name:'平均值'
                                             }
                                         ]
                                     },
                                   markArea:{ //标志指定区间阴影
                                         data: [
                                             /!*这里是x轴的区间,张三和彭万里宽度加上阴影*!/
                                             [
                                                 {
                                                     name:'x轴区间',
                                                     xAxis:'7.84651',
                                                 },
                                                 {
                                                     xAxis: '20.495',
                                                 }
                                             ],
                                             /!*这里是y轴的区间,60-80分的y轴区间加上阴影*!/
                                             [
                                                 {
                                                     name: '60分到80分',
                                                     yAxis: 60
                                                 },
                                                 {
                                                     yAxis: 80
                                                 }
                                             ],
                                         ]
                                     },*/
                                    smooth:true,//为true是不支持虚线的,实线就用true
                                    lineStyle:{ //波浪线线条样式
                                        color:'purple',
                                        /*虚线*/
                                        type:'dashed'
                                    },
                                   /* areaStyle:{ //绘制线条对应的到x轴的区域面积颜色
                                        color:'orange'
                                    },*/
                                    label:{ //波浪线数值标签
                                        show:true,  //每个柱显示y轴对应值
                                        rotate:60,
                                        /*数字位置*/
                                        position:'outside'
                                    },
                                    barWidth:20,

                                },
                                {
                                    name:'其他',
                                    data:this.yData2,
                                    type:'line',
                                    stack:'all',
                                    label:{
                                        show:true
                                    }
                                }
                            ],
                            tooltip:{
                                show:true,
                                trigger:'axis',//触发类型;轴触发,axis则鼠标hover到一条柱状图显示全部数据,item则鼠标hover到折线点显示相应数据
                                showContent:true,
                                formatter: '{a}: {b}({c})' //自定义提示框显示内容
                            },
                            toolbox:{ //使视图带有导出图片,数据视图,动态类型切换,数据区域缩放,重置
                                show:true,
                                showTitle:true,
                                feature:{ //开启功能
                                    saveAsImage:{}, //可以导出下载
                                    dataView:{},   //切换成数据视图
                                    restore:{},  //重置
                                    dataZoom:{},  //区域缩放
                                    magicType:{ //动态类型切换
                                        type:['bar','line']
                                    }
                                }
                            },
                    // 设置折线上圆点大小
                    symbolSize:10,
                    // 设置拐点为实心圆
                    symbol:'circle',
                    legend:{
                                data:['成绩','其他成绩'],
                            }
                        });/*这里结束myCharts1这个方法*/


                //点击x轴线,获取当前的横坐标
                myCharts1.getZr().on('click', params => {
                    const pointInPixel = [params.offsetX, params.offsetY]
                    if (myCharts1.containPixel('grid', pointInPixel)) {
                        /*这里是获取点击的下标*/
                        let xIndex = myCharts1.convertFromPixel({ seriesIndex: 0 }, pointInPixel)[0]
                        var videoTime = document.getElementById("videoPlayer");
                        videoTime.currentTime=this.xData[xIndex]
                        console.log("当前定位:"+this.xData[xIndex]);
                        console.log(xIndex);
                    }
                }),

                //点击事件
                myCharts1.on('click', function(params) {
                    // console.log(params)  之前把空格替换成换行符了,现在展示还原一下即可params.name.replace('\n', ' ')
                    devnum = "时间:" + params.name.replace('\n', ' ');

                    var videoTime = document.getElementById("videoPlayer");

                    /*下面这种写法是可以的,但是换成 videoTime.currentTime=devnum的写法就不行*/
                    videoTime.currentTime=params.name.replace('\n', ' ');
                    console.log("当前定位:"+videoTime.currentTime);

                    /*这里可以用来测试devnum是否获取成功*/
                    /*document.getElementById("lable").innerText = devnum;*/
                });

            },/*这里结束initCharts这个方法*/


        },

    }
</script>
<style>
    .fourth{
        margin-top: 10%;
    }
    .mv video{
        height: 40%;
        width: 40%;
    }
</style>

猜你喜欢

转载自blog.csdn.net/weixin_45898996/article/details/128254344