Vue+应用系统定制开发实现在表格中点击图片应用系统定制开发预览大图和预览视频
应用系统定制开发最近遇到一个需求: 应用系统定制开发在表格中实现预览图片应用系统定制开发和查看视频
预览图片功能:
如下,是材料一栏的代码
<el-table-column prop="filesLoc" label="材料"> <template slot-scope="scope"> <el-button v-if="scope.row.filesLoc.substring(scope.row.filesLoc.length - 3) == 'mp4' "//判断后缀是否是视频 @click="openVideo(scope.row)" size="small" >查看视频</el-button > <span v-else> <el-image class="my-img" style="width: 100px; height: 100px" ref="myImg" :src="scope.row.filesLoc" :preview-src-list="srcList" @click="handlePriveImg(scope.row)" > </el-image> </span> </template> </el-table-column>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
在data
中定义:
data(){ return{ srcList: [], playerOptions: { playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度 autoplay: false, // 如果true,浏览器准备好时开始回放。 controls: 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: "video/mp4", // 这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 src: "", // url地址 }, ], // poster: "../../../../static/full_res.jpg", // 你的封面地址 width: document.documentElement.clientWidth, // 播放器宽度 notSupportedMessage: "此视频暂无法播放,请稍后再试", // 允许覆盖Video.js无法播放媒体源时显示的默认信息。 controlBar: { timeDivider: true, durationDisplay: true, remainingTimeDisplay: false, fullscreenToggle: true, // 全屏按钮 }, }, }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
methods
中:
// 点击查看大图 handlePriveImg(row) { this.srcList.push(row.filesLoc);//将后端的这一行的数据push进数组中 this.$refs.myImg.clickHandler(); },
- 1
- 2
- 3
- 4
- 5
style
中:
.my-img:hover{//使鼠标悬浮在图片上时出现手的形状 cursor:pointer;}
- 1
- 2
- 3
预览图片的功能就完成了.
接下来是查看视频:
安装 vue-video-player
npm install vue-video-player --save
- 1
在main.js
中:
import VideoPlayer from 'vue-video-player'Vue.use(VideoPlayer)require('vue-video-player/src/custom-theme.css')
- 1
- 2
- 3
在写的vue页面中引入:
import { videoPlayer } from "vue-video-player";import "video.js/dist/video-js.css";
- 1
- 2
当时在main.js
中引入后,发现这个插件没效果,然后又在相应的页面中又引用了一次,就有样式了,感觉可能main.js
中的引用的不对.
我采用了elementUI的dialog样式,实现了遮罩的效果.
<el-dialog :visible.sync="videoDialog" width="70%" center class="videoPlayer" > <div> <video-player style="width: 100%; height: 500px" class="video-player vjs-custom-skin" ref="videoPlayer" :playsline="false" :options="playerOptions" @play="onPlayerPlay($event)" @pause="onPlayerPause($event)" @ended="onPlayerEnded($event)" @waiting="onPlayerWaiting($event)" @playing="onPlayerPlaying($event)" @loadeddata="onPlayerLoadeddata($event)" @timeupdate="onPlayerTimeupdate($event)" @canplay="onPlayerCanplay($event)" @canplaythrough="onPlayerCanplaythrough($event)" @statechanged="playerStateChanged($event)" @ready="playerReadied" ></video-player> </div> </el-dialog>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
在style中:
.video-js .vjs-icon-placeholder { width: 80%; height: 80%; display: block;}.videoPlayer /deep/ .el-dialog,.el-pager li { background: none !important; margin-top: 6vh !important;}.my-img:hover{ cursor:pointer;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
methods
中:下面是它的一些方法,但是在这里不需要这些方法.
承接第一段代码中表格的材料代码,openVideo是点击查看视频的方法,
在这里将我的视频链接赋给了this.playerOptions.sources[0].src
,这样才能实现点击出现视频.
视频的链接是http://服务器地址/视频名称.mp4
openVideo(row) { this.videoDialog = true; this.row = row; this.playerOptions.sources[0].src = row.filesLoc; }, // 播放回调 onPlayerPlay(player) {}, // 暂停回调 onPlayerPause(player) { }, // 视频播完回调 onPlayerEnded($event) {}, // DOM元素上的readyState更改导致播放停止 onPlayerWaiting($event) {}, // 已开始播放回调 onPlayerPlaying($event) {}, // 当播放器在当前播放位置下载数据时触发 onPlayerLoadeddata($event) {}, // 当前播放位置发生变化时触发。 onPlayerTimeupdate($event) {}, //媒体的readyState为HAVE_FUTURE_DATA或更高 onPlayerCanplay(player) { }, //媒体的readyState为HAVE_ENOUGH_DATA或更高。这意味着可以在不缓冲的情况下播放整个媒体文件。 onPlayerCanplaythrough(player) { }, //播放状态改变回调 playerStateChanged(playerCurrentState) {}, //将侦听器绑定到组件的就绪状态。与事件监听器的不同之处在于,如果ready事件已经发生,它将立即触发该函数。。 playerReadied(player) {},
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
下面是点击视频的效果: