DynamicPPT.js 10.4 KB
/*
 *
 * 动态PPT      尺寸1:(高:宽  540/864  =250/400  = 0.625)     尺寸2: 720 540   4;3
 *
 * */

import Emiter from "Emiter";
import Loger from "Loger";
import $ from "jquery";
import xdysdk from "libs/xdysdk";
import ClassDataProxy from "proxy/ClassDataProxy";

let loger = Loger.getLoger('PC-DynamicPPT');

window.ispringPresentationConnector ={};
window.pptPlayer;

class DynamicPPT extends Emiter {
    constructor() {
        super();
        this.currentAnimationStep=1;//默人动画页数是1
        this.animationStepCount=1;//默认动画总页数时1

        this.currenSlideIndex=0;//当前显示的页码 从0开始

        this.pptiframeSrc='';//当前页地址,ip地址换成允许跨域的ip
        this.pptData=null;
        this.changePageTimer=0;
        this.addEvent();
    }
    addEvent(){
        //监听动态ppt加载
        $("#framePPT").on('load', this._onLoadPPT.bind(this));
        $("#framePPT").on('error', this._onLoadPPTError.bind(this));

        //上一步下一步动画
        $(".pptNextStep").hide();
        $(".pptPrevStep").hide();
        $(".pptNextStep").on("click", this.pptNextAnimationHandler.bind(this));
        $(".pptPrevStep").on("click", this.pptPrevAnimationHandler.bind(this));
    }
    //更新ppt,显示和删除都用这个接口 _data为null的时候就是删除
    updataPPT(_data){
        console.log('更新ppt数据',_data);
        if(_data){
            this.pptData=_data;
            //有数据,并且是可见,需要更新操作数据
            if (_data.visible == true) {
                this.showPPT();
                //获取数据中的html地址,然后转换为允许跨域访问的地址
                let iframeSrc =_data.html||"";

                //替换IP地址,解决跨域问题,后续服务器会解决跨域,不需要再替换
               /* iframeSrc=iframeSrc.replace('http://','');
                let index=iframeSrc.indexOf('/');
                let iframeLastSrc=ifreamDocIp+iframeSrc.substr(index);*/

                //如果是本地测试就用本地文件地址,否则就用线上地址
                let url = encodeURI(window.location.href);
                let index=url.indexOf('localhost:');
                if(index<0){
                    index=url.indexOf('127.0.0.1');
                }
                if(index>=0){
                    iframeSrc='./ppt0516/index.html';
                     loger.warn('使用本地的动态ppt测试',iframeSrc);
                }

                if(!iframeSrc){
                    loger.warn('ppt地址转换失败');
                    return;
                }
                if(this.pptiframeSrc==iframeSrc){
                    //文档已经存在
                    this.changePage();
                }else {
                    //文档不存在
                    this._loadIframSrc(iframeSrc);
                }
            }else {
                this.hidePPT();
            }
        }else {
            //没有数据,清除
            this.pptData=null;
            this.hidePPT();
            this.clearPPT();
        }
    }
    //显示ppt
    showPPT(){
        //loger.log("显示ppt");
        $("#framePPT").show();
    }
    //隐藏ppt
    hidePPT(){
       // loger.log("隐藏ppt");
        $("#framePPT").hide();
        $(".pptPrevStep").hide();
        $(".pptNextStep").hide();
        $("#framePPT").attr('src', "");
    }
    //设置大小
    setPPTSize(sizeObj){
        //if(sizeObj) {
        //    loger.log("设置ppt显示大小", sizeObj);
        //}
    }
    //清除ppt数据
    clearPPT(){
        //loger.log("清除ppt数据");
        clearTimeout( this.changePageTimer);
        this.pptData=null;
        this.pptiframeSrc='';
        this.currentAnimationStep=1;
        this.animationStepCount=1;
        this.currenSlideIndex=0;
        window.ispringPresentationConnector ={};
        window.pptPlayer=null;
    }
    // 加载动态ppt地址
    _loadIframSrc(_iframeLastSrc){
        let isFirstLoad=true;//每次更地址都会重置,如果是重加载,加载完成后需要切换页面
        let _this=this;
        window.ispringPresentationConnector.register = function (player){
            window.pptPlayer=player;
            console.log('ispringPresentationConnector');
            window.pptPlayer.view().playbackController().slideChangeEvent().addHandler(function(slideIndex) {
                console.log( "动态ppt当前index: " + (slideIndex ));
                _this.currenSlideIndex=slideIndex;
                _this.animationStepCount=window.pptPlayer.view().playbackController().currentSlide().animationSteps().count();
                //第一次加载完成的时候切换一次
                if(isFirstLoad){
                    isFirstLoad=false;
                    _this.changePage(1000);
                }

            });

            window.pptPlayer.view().playbackController().stepChangeEvent().addHandler(function(stepIndex){
                _this.currentAnimationStep=stepIndex+1||1;

                _this.animationStepCount=window.pptPlayer.view().playbackController().currentSlide().animationSteps().count();
                console.log("动态ppt当前 step: " + stepIndex,' this.currentAnimationStep:'+ _this.currentAnimationStep);
            });

            window.pptPlayer.view().playbackController().clock.tickEvent().addHandler(function(theClock){
                var ts = theClock.timestamp();
                window.console.log("Tick. Slide:", ts.slideIndex(), "; step: ", ts.stepIndex(), "; timeOffset: ", ts.timeOffset());
            });
        }

        //加完监听之后开始加载网页
        this.pptiframeSrc=_iframeLastSrc;
        console.log("pptiframeSrc",this.pptiframeSrc);
        $("#framePPT").attr("src",this.pptiframeSrc);

    }
    changePage(_deley){
        console.log("切换PPT页码---->",this.pptData);
        if(!this.pptData||!window.pptPlayer){
            console.warn("切换PPT页码-->_data数据不存在");
            return;
        }

        if(this.pptData.curPageNo!=(this.currenSlideIndex+1)){
            clearTimeout( this.changePageTimer);
            if(_deley){
                let _this=this;
                this.changePageTimer=setTimeout(function(){
                    console.log(_deley,"延迟切换PPT页码---->",_this.pptData.curPageNo);
                    this.currentAnimationStep=1;//默人动画页数是1
                    this.animationStepCount=1;//默认动画总页数时1
                    window.pptPlayer.view().playbackController().gotoSlide((_this.pptData.curPageNo-1),false);
                    setTimeout(function () {
                        let curAnimationStep=_this.pptData.animationStep;
                        for(let i=0;i<(curAnimationStep-1);i++){
                            window.pptPlayer.view().playbackController().gotoNextStep();
                        }
                    },1000);
                },_deley)
            }else {
                console.log("切换PPT页码---->",this.pptData.curPageNo);
                this.currentAnimationStep=1;//默人动画页数是1
                this.animationStepCount=1;//默认动画总页数时1
                window.pptPlayer.view().playbackController().gotoSlide((this.pptData.curPageNo-1),false);
            }
        }else {
            //页数切换完成,切换动画步骤
            this._changeAnimationStep();
        }
    }

    _changeAnimationStep(){
        console.log("切换动画步数---->",this.currentAnimationStep,'-->',this.pptData.animationStep);
        if(!this.pptData||!window.pptPlayer){
            console.warn("切换PPT动画步骤-->_data数据不存在");
            return;
        }
        if(this.animationStepCount<2){
            console.log("当前页码的动画步数为->"+this.animationStepCount);
            return;
        }

        if(this.pptData.animationStep>this.currentAnimationStep){
            console.log("切换动画步数---->下一步")
            // this.currentAnimationStep = this.pptData.animationStep;
            for(let i=this.currentAnimationStep;i<this.pptData.animationStep;i++){
                try{
                    window.pptPlayer.view().playbackController().gotoNextStep();
                }catch (err){
                    console.warn("切换动画步数---->下一步-失败",err);
                }

            }

        }else if(this.pptData.animationStep<this.currentAnimationStep){
            console.log("切换动画步数---->上一步");
            window.pptPlayer.view().playbackController().gotoPreviousStep();
            for(let i=this.pptData.animationStep;i<this.currentAnimationStep;i++){

                try{
                    window.pptPlayer.view().playbackController().gotoPreviousStep();
                }catch (err){
                    console.warn("切换动画步数---->上一步-失败",err);
                }

            }
        }else {
            console.log("切换动画步数---->完成");
        }
    }

    //ppt加载完成
    _onLoadPPT(evt) {
        console.log("ppt加载完成---->");
    }

    //ppt加载失败
    _onLoadPPTError(evt){
        console.warn("ppt加载失败---->",evt);
    }
    isNextAnimationComplete(){
        if(this.animationStepCount>1&&this.animationStepCount!=this.currentAnimationStep){
            this.currentAnimationStep = this.pptData.animationStep;
            console.warn("还有动画需要操作-.不能翻页");
             return false;
        }
        console.warn("没有动画需要操作-.可以翻页");
        return true;
    }
    isPrevAnimationComplete(){
        if(this.animationStepCount>1&&this.currentAnimationStep>2){
            console.warn("还有动画需要操作-.不能翻页");
            return false;
        }
        console.warn("没有动画需要操作-.可以翻页");
        return true;
    }
    //下一步动画
    pptNextAnimationHandler(){
        if(!this.pptData||!window.pptPlayer){
            console.warn("下一步动画---->数据无效");
            return;
        }
        xdysdk.api("sendDocumentSwitchAnimation",{"step":1});
    }
    //上一步动画
    pptPrevAnimationHandler(){
        if(!this.pptData||!window.pptPlayer){
            console.warn("下一步动画---->数据无效");
            return;
        }
        xdysdk.api("sendDocumentSwitchAnimation",{"step":-1});
    }
}
DynamicPPT.prototype.SET_PPT_CHANGE = DynamicPPT.SET_PPT_CHANGE = "set_ppt_change";
export default DynamicPPT;