videojs打点

var VideoPath = ""
//进入详情页加载数据
function loadDetail(callback) {
    let practiceId = getQueryVariable('Id')
    let woundId = getQueryVariable('woundedId')
    //调用接口开始复盘
    StartDebrief(practiceId, woundId, d => {
        GetDebriefAllInfo(practiceId, woundId, (d, url) => {
            //参数数据
            /*  let Parameters = JSON.parse(d.Parameters)*/

            //日志数据
            let Logs = JSON.parse(d.Logs)
            let reLogsData = rebuildLogsData(this.vue1.$data.debriefDetails.logData.logActivities, this.vue1.$data.debriefDetails.logData.showLogData, Logs)
            this.vue1.$data.debriefDetails.logData.logActivities = reLogsData.saveData
            this.vue1.$data.debriefDetails.logData.showLogData = reLogsData.showData
            console.log(this.vue1.$data.debriefDetails.logData.logActivities)
            //评论
            let Remarks = JSON.parse(JSON.stringify(JSON.parse(d.Remarks)))
            //复制一套评论数据
            this.vue1.$data.debriefDetails.allRecommendList = JSON.parse(JSON.stringify(JSON.parse(d.Remarks)))
            //展示数据
            recommendDataShow(Remarks)

            //video播放路径
            VideoPath = url + "RuningVideo" + d.VideoPath
            this.vue1.$data.debriefDetails.videoData.videoPlayPath = VideoPath
            //获取滚动元素
            getRecomsElement()
            callback()
        })
    })
}

//波形初始化
function initLine() {
    var that = this
    loadEcgConfig_Base(d => {
        loadEcgDataSetting_Base(d1 => {
            loadAlertSetting_Base(d2 => {
                loadConfigShow();
                loadConfig();
                GetParameters(d => {
                    that.vue1.$data.ParameterList = d;
                    drawingECGBox();
                    this.vue1.$data.ECGs.Enable = true
                });
            })
        })
    })
}


//处理评论数据
function recommendDataShow(data) {
    for (let recommend of data) {
        //快捷评论
        if (recommend.RemarkType == 0) {
            if (recommend.Content == 'good') {
                let obj = {
                    url: '../images/Debrief/goodIcon.png',
                    title: '您在' + formatSeconds(recommend.Time) + '分给了一个优秀标记',
                    type: 'good',
                    time: recommend.Time
                }
                this.vue1.$data.debriefDetails.recommendList.unshift(obj)
            }
            if (recommend.Content == 'error') {
                let obj = {
                    url: '../images/Debrief/errorIcon.png',
                    title: '您在' + formatSeconds(recommend.Time) + '分给了一个错误标记',
                    type: 'error',
                    time: recommend.Time
                }
                this.vue1.$data.debriefDetails.recommendList.unshift(obj)
            }
            if (recommend.Content == 'warn') {
                let obj = {
                    url: '../images/Debrief/warnIcon.png',
                    title: '您在' + formatSeconds(recommend.Time) + '分给了一个警告标记',
                    type: 'warn',
                    time: recommend.Time
                }
                this.vue1.$data.debriefDetails.recommendList.unshift(obj)
            }

        } else {
            //实时评论
            this.vue1.$data.debriefDetails.showRecommendInputList.push(recommend)
        }
    }
}

//评论滚动元素的获取
function getRecomsElement() {
    //获取滚动盒子dom
    this.vue1.$data.debriefDetails.scrollData.wrapperDomQ = this.vue1.$refs.wrapperRef
    //获取滚动盒子高度
    this.vue1.$data.debriefDetails.scrollData.wrapperHeightQ = this.vue1.$refs.wrapperRef.offsetHeight
    //获取包裹滚动元素的盒子dom
    this.vue1.$data.debriefDetails.scrollData.scrollContentDomQ = this.vue1.$refs.scrollContentRef

    //获取滚动盒子dom
    this.vue1.$data.debriefDetails.scrollData.wrapperDomN = this.vue1.$refs.wrapperRefNow
    //获取滚动盒子高度
    this.vue1.$data.debriefDetails.scrollData.wrapperHeightN = this.vue1.$refs.wrapperRefNow.offsetHeight
    //获取包裹滚动元素的盒子dom
    this.vue1.$data.debriefDetails.scrollData.scrollContentDomN = this.vue1.$refs.scrollContextRefNow
}

const _this = this
//加载视频相关内容
function loadVideo() {
    //视频播放
    //实例化视频对象,配置选项
    var player = videojs('example_video', {
        controls: true,//是否开启视频中的控制按钮
        //配置倍速
        playbackRates: [0.5, 1, 1.5, 2, 2.5],
        //自动播放
        autoplay: false,
        poster: "https://img1.baidu.com/it/u=3009731526,373851691&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500",
    });

    //把player对象保存在系统变量中
    _this.vue1.$data.debriefDetails.videoData.videoPlayer = player
    console.log(_this.vue1.$data.debriefDetails.videoData.videoPlayer)
    var ele = $("#example_video").find("video");
    var id = ele[0].id;
    videojs(id).src(this.vue1.$data.debriefDetails.videoData.videoPlayPath);
    //监听video时间
    //视频的实时时间
    //player.currentTime中存放的是当前视频的播放时间,单位是秒
    player.on("timeupdate", () => {
        //保存视频播放的实时时间
        _this.vue1.debriefDetails.videoData.currentTimeVideo = player.currentTime()

    })
    //暂停视频触发事件
    player.on("pause", event => {
        //console.log(player.currentTime())
    })

    //拖动、点击视频进度条触发事件
    player.on("seeked", event => {
        let skipTime = (_this.vue1.debriefDetails.videoData.currentTimeVideo).toFixed(0)
        GetDebriefInfoByTime(practiceId, woundId, skipTime, d => {

        })
    })

    //当前评论数据具体的点的对象
    for (let reco of this.vue1.$data.debriefDetails.allRecommendList) {
        let markerPointObj = {
            time: '',
            text: '评语',
            RemarkType: null,
            Content: "",
        }
        //通过循环找出所有打过标记的点
        markerPointObj.time = reco.Time
        markerPointObj.RemarkType = reco.RemarkType
        markerPointObj.Content = reco.Content
        _this.vue1.$data.debriefDetails.videoData.setSignData.push(markerPointObj)
    }
    //实时发送评语时的标记样式
    let markerStyleObj = {
        'width': '0.81rem',
        'height': '0.81rem',
        'border-radius': '50%',
        'positon': 'absolute',
        'top': '50%;',
        'transform': 'translate(0,45%)',
        'background-color': 'rgba(18,53,85)'
    }
    player.markers({
        //设置标记样式
        markerStyle: markerStyleObj,
        //只要播放到标记的时间间隔就会触发 index是标记的索引
        onMarkerReached: function (marker, index) { },
        //单击标记触发
        onMarkerClick: function (marker, index) { },
        //循环评论数据,把标记打在视频上
        markers: _this.vue1.$data.debriefDetails.videoData.setSignData
    });

    videoWrapper = $(player.el())
    //回放或刷新时设置标记颜色
    //加延时的原因是获取不到marker.key值
    var timer1 = setInterval(() => {
        let cssObj = {
            'positon': 'absolute',
            'top': '-45%;',
            'transform': 'translate(0,45%)',
            'background-color': '',
        }
        _this.vue1.$data.debriefDetails.videoData.setSignData.forEach(marker => {
            if (marker.key != undefined) {
                clearInterval(timer1);
                if (marker.RemarkType == 0) {
                    if (marker.Content == "good") {
                        var markerDiv = videoWrapper.find(".vjs-marker[data-marker-key='" + marker.key + "']")
                        cssObj["background-color"] = "#3CE079"
                        $(markerDiv).css(cssObj)
                    }
                    if (marker.Content == "error") {
                        var markerDiv = videoWrapper.find(".vjs-marker[data-marker-key='" + marker.key + "']")
                        cssObj["background-color"] = "#FF5757"
                        $(markerDiv).css(cssObj)
                    }
                    if (marker.Content == "warn") {
                        var markerDiv = videoWrapper.find(".vjs-marker[data-marker-key='" + marker.key + "']")
                        cssObj["background-color"] = "#FFC152"
                        $(markerDiv).css(cssObj)
                    }
                } else {
                    var markerDiv = videoWrapper.find(".vjs-marker[data-marker-key='" + marker.key + "']")
                    cssObj["background-color"] = "#42F7FF"
                    $(markerDiv).css(cssObj)
                }
            }
        })
    }, 500)

    //从视频中的当前时间转到下一标记,如果没有下一个标记,那么什么都不做
    $("#btn-next").click(function () {
        player.markers.next();
    })

    //从视频中的当前时间转到上一标记,如果没有上一标记,那么什么都不做
    $("#btn-prev").click(function () {
        player.markers.prev();
    })

    //评论
    let practiceId = getQueryVariable('Id')
    let woundId = getQueryVariable('woundedId')
    //实时评语逻辑--------------------------------------
    //返回当前打的标记数组
    var getMarkers = player.markers.getMarkers();
    $("#btn-add").click(function () {
        let obj = {
            time: _this.vue1.$data.debriefDetails.videoData.currentTimeVideo,
            text: ''
        }
        //判断input框是否有内容
        if (_this.vue1.$data.debriefDetails.recommendInputValue != '') {
            _this.vue1.$data.debriefDetails.showRecommendInputList.push({
                Content: _this.vue1.$data.debriefDetails.recommendInputValue
            })
            obj.text = _this.vue1.$data.debriefDetails.videoData.currentTimeVideo

            //调用接口
            AddRemark(practiceId, woundId, _this.vue1.$data.debriefDetails.recommendInputValue, d => { })
            _this.vue1.$nextTick(() => {
                recoScroll('now')
            })
            _this.vue1.$data.debriefDetails.recommendInputValue = ''
            player.markers.add([obj]);
        } else {
            messageTip('error', '不可发送空的评语!')
        }

    })


    //快捷评语逻辑--------------------------------------
    let quickObj = {
        url: '',
        title: '',
        type: '',
        time: '',
        id: uuid()
    }
    //获取设置了滚动的盒子的高度

    //快捷评语-----优秀
    $("#btn-good").click(function () {
        quickObj.url = '../images/Debrief/goodIcon.png'
        quickObj.title = '您在' + formatSeconds(Number(_this.vue1.debriefDetails.videoData.currentTimeVideo).toFixed(0)) + '给了一个优秀标记'
        quickObj.type = 'good'
        quickObj.time = _this.vue1.debriefDetails.videoData.currentTimeVideo
        player.markers.add([quickObj]);

        _this.vue1.$data.debriefDetails.recommendList.push(quickObj)
        AddSimpleRemark(practiceId, woundId, quickObj.type, d => { })
        _this.vue1.$nextTick(() => {
            recoScroll('quick')
        })
        quickObj = {}
    })
    //快捷评语-----错误
    $("#btn-error").click(function () {
        quickObj.url = '../images/Debrief/errorIcon.png'
        quickObj.title = '您在' + formatSeconds(Number(_this.vue1.debriefDetails.videoData.currentTimeVideo).toFixed(0)) + '给了一个错误标记'
        quickObj.type = 'error'
        quickObj.time = _this.vue1.debriefDetails.videoData.currentTimeVideo
        player.markers.add([quickObj]);
        _this.vue1.$data.debriefDetails.recommendList.push(quickObj)
        AddSimpleRemark(practiceId, woundId, quickObj.type, d => { })
        _this.vue1.$nextTick(() => {
            recoScroll('quick')
        })
        quickObj = {}
    })
    //快捷评语-----警告
    $("#btn-warn").click(function () {
        quickObj.url = '../images/Debrief/warnIcon.png'
        quickObj.title = '您在' + formatSeconds(Number(_this.vue1.debriefDetails.videoData.currentTimeVideo).toFixed(0)) + '给了一个警告标记'
        quickObj.type = 'warn'
        quickObj.time = _this.vue1.debriefDetails.videoData.currentTimeVideo
        player.markers.add([quickObj]);
        _this.vue1.$data.debriefDetails.recommendList.push(quickObj)
        AddSimpleRemark(practiceId, woundId, quickObj.type, d => { })
        _this.vue1.$nextTick(() => {
            recoScroll('quick')
        })
        quickObj = {}
    })
}

//评论滚动方法
function recoScroll(type) {
    if (type == 'quick') {
        //获取当前包裹滚动元素的盒子高度
        let scrollContentHeight = this.vue1.$data.debriefDetails.scrollData.scrollContentDomQ.offsetHeight
        //计算滚动区域和滚动容器高度差
        let diff = scrollContentHeight - this.vue1.$data.debriefDetails.scrollData.wrapperHeightQ
        //获取滚动区域高度
        let top = this.vue1.$data.debriefDetails.scrollData.wrapperDomQ.scrollTop
        if (diff - top > -109 || diff - top == -109) {
            this.vue1.$data.debriefDetails.scrollData.wrapperDomQ.scrollTo({
                top: diff + 18,
                left: 0,
                behavior: "smooth",
            });
        }
    } else {
        //获取当前包裹滚动元素的盒子高度
        let scrollContentHeight = this.vue1.$data.debriefDetails.scrollData.scrollContentDomN.offsetHeight
        //计算滚动区域和滚动容器高度差
        let diff = scrollContentHeight - this.vue1.$data.debriefDetails.scrollData.wrapperHeightN
        //获取滚动区域高度
        let top = this.vue1.$data.debriefDetails.scrollData.wrapperDomN.scrollTop
        console.log(scrollContentHeight)
        if (diff - top > -109 || diff - top == -109) {
            this.vue1.$data.debriefDetails.scrollData.wrapperDomN.scrollTo({
                top: diff + 15,
                left: 0,
                behavior: "smooth",
            });
        }
    }
}

//获取快捷评语按钮的动态id 
function getQuickButtonId(item, index) {
    if (index == 0) {
        return "btn-good"
    } else if (index == 1) {
        return "btn-error"
    } else {
        return "btn-warn"
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值