vue實現預覽功能(包括doc,pdf,圖片,視頻)

<template>
<el-button @click="previewPdf(scope.row)" type="text" size="small" v-if="">
    <div class="images" v-viewer="{ navbar: false}">
        <img v-for="(src, index) in images" style="width: 100%" :src="src" :key="src" hidden>
        預覽
    </div>
</el-button>

<el-dialog
        :visible="showDoc == true || showPdf == true  || showVideo == true"
        :show-close="true"
        :width="'80%'"
        class="dialog-div-pre-style"
        :before-close="closePreviewClick"
        center>
    <div v-if="showDoc == true" class="dialog-body-content-base-style">
        <iframe frameborder="0"
                :src="'https://view.officeapps.live.com/op/view.aspx?src=' + this.fileUrl"
                width='100%'>
        </iframe>
    </div>
    <div v-else-if="showPdf == true" class="dialog-body-content-base-style" style="justify-content: center; align-items: center">
        <embed :src="pdfUrl" style="width: 100%; height: 100%"/>
    </div>
    <div v-else-if="showVideo == true"
         class="dialog-body-content-base-style"
         style="justify-content: center; align-items: center">
        <video-player class="video-player vjs-custom-skin"
                      ref="positiveVideoPlayer"
                      :playsinline="true"
                      :options="positivePlayerOptions"
        ></video-player>
    </div>
</el-dialog>
</template>
<script>
export default{
  data(){
    return {
showDoc: false,
showPdf: false,
showVideo: false,
fileUrl: "",
images: [],
currentPage: 0, // pdf文件頁碼
pageCount: 0, // pdf文件總頁數
pdfUrl: "",
scale: 1.0,
/**
 *播放器配置
 */
positivePlayerOptions: {
    playbackRates: [0.5, 1.0, 1.5, 2.0], //播放速度
    autoplay: false, //若是true,瀏覽器準備好時開始回放。
    muted: false, // 默認狀況下將會消除任何音頻。
    loop: false, // 致使視頻一結束就從新開始。
    preload: 'auto', // 建議瀏覽器在<video>加載元素後是否應該開始下載視頻數據。auto瀏覽器選擇最佳行爲,當即開始加載視頻(若是瀏覽器支持)
    language: 'zh-CN',
    aspectRatio: '16:9', // 將播放器置於流暢模式,並在計算播放器的動態大小時使用該值。值應該表明一個比例 - 用冒號分隔的兩個數字(例如"16:9"或"4:3")
    fluid: true, // 當true時,Video.js player將擁有流體大小。換句話說,它將按比例縮放以適應其容器。
    sources: [{
        type: "",
        src: "" //視頻url地址
    }],
    poster: "", //你的封面地址
    // width: document.documentElement.clientWidth,
    notSupportedMessage: '此視頻暫沒法播放,請稍後再試', //容許覆蓋Video.js沒法播放媒體源時顯示的默認信息。
    controlBar: {
        timeDivider: true,
        durationDisplay: true,
        remainingTimeDisplay: false,
        fullscreenToggle: true  //全屏按鈕
    },
    common: "positivePlayer",
},

    }
  }
},
methods:{
 
/**
 * pdf預覽
*/
previewPdf(row) {
let type = this.iconByType(row);
this.fileUrl = row.url
if (type.indexOf("doc") != -1 || type.indexOf("docx") != -1 || type.indexOf("xsl") != -1 || type.indexOf("xslx") != -1) {
this.showDoc = true
} else if (type.indexOf("pdf") != -1) {
this.pdfUrl = "http://47.105.218.26:8888/group1/M00/00/00/rB-LJlzT042AbKdCAAiu_35Yccs182.pdf"
this.showPdf = true
} else if (type.indexOf("jpg") != -1 || type.indexOf("png") != -1 || type.indexOf("jpeg") != -1) {
this.images = this.getUrlListByName(row.url)
const viewer = this.$el.querySelector('.images').$viewer
viewer.show()
} else if (type.indexOf("avi") != -1 || type.indexOf("mp4") != -1 || type.indexOf("webm") != -1 || type.indexOf("m4v") != -1 || type.indexOf("rmvb") != -1 || type.indexOf("mpg") != -1 || type.indexOf("3gp") != -1 || type.indexOf("swf") != -1 || type.indexOf("mkv") != -1) {
this.positivePlayerOptions.sources[0].src = "//nos.netease.com/vod163/demo.mp4"
this.positivePlayerOptions.sources[0].type = "video/mp4"
this.showVideo = true
} else {
this.$message("當前文件暫不支持預覽")
}
// this.showPdf = true
},
/**
* 經過文件後綴返回文件的圖標
*/
iconByType(row) {
return row.fileName.substring(row.fileName.lastIndexOf(".") + 1, row.fileName.length)
},
closePreviewClick() {
if (this.showDoc == true) {
this.showDoc = false
} else if (this.showPdf == true) {
this.showPdf = false
} else if (this.showVideo == true) {
this.showVideo = false
}
},
}
</script>
相關文章
相關標籤/搜索