123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <template>
- <video
- class="cl-video"
- id="video"
- :src="src"
- :autoplay="autoplay"
- :loop="loop"
- :muted="muted"
- :initial-time="initialTime"
- :duration="duration"
- :controls="controls"
- :danmu-list="danmuList"
- :danmu-btn="danmuBtn"
- :enable-danmu="enableDanmu"
- :page-gesture="pageGesture"
- :direction="direction"
- :show-progress="showProgress"
- :show-fullscreen-btn="showFullscreenBtn"
- :show-play-btn="showPlayBtn"
- :show-center-play-btn="showCenterPlayBtn"
- :show-loading="showLoading"
- :enable-progress-gesture="enableProgressGesture"
- :object-fit="objectFit"
- :poster="poster"
- :show-mute-btn="showMuteBtn"
- :title="title"
- :play-btn-position="playBtnPosition"
- :enable-play-gesture="enablePlayGesture"
- :auto-pause-if-navigate="autoPauseIfNavigate"
- :auto-pause-if-open-native="autoPauseIfOpenNative"
- :vslide-gesture="vslideGesture"
- :vslide-gesture-in-fullscreen="vslideGestureInFullscreen"
- :ad-unit-id="adUnitId"
- :poster-for-crawler="posterForCrawler"
- @play="onPlay"
- @pause="onPause"
- @ended="onEnded"
- @timeupdate="onTimeUpdate"
- @waiting="onWaiting"
- @error="onError2"
- @progress="onProgress"
- @loadedmetadata="onLoadedMetaData"
- @fullscreenclick="onFullScreenClick"
- @controlstoggle="onControlStoggle"
- ></video>
- </template>
- <script>
- export default {
- name: "cl-video",
- props: {
- src: String,
- autoplay: Boolean,
- loop: Boolean,
- muted: Boolean,
- initialTime: Number,
- duration: Number,
- controls: {
- type: Boolean,
- default: true
- },
- danmuList: [Object, Array],
- danmuBtn: Boolean,
- enableDanmu: Boolean,
- pageGesture: Boolean,
- direction: Number,
- showProgress: {
- type: Boolean,
- default: true
- },
- showPlayBtn: {
- type: Boolean,
- default: true
- },
- showCenterPlayBtn: {
- type: Boolean,
- default: true
- },
- showLoading: {
- type: Boolean,
- default: true
- },
- showFullscreenBtn: {
- type: Boolean,
- default: true
- },
- enableProgressGesture: {
- type: Boolean,
- default: true
- },
- objectFit: {
- type: String,
- default: "contain"
- },
- poster: String,
- showMuteBtn: Boolean,
- title: String,
- playBtnPosition: {
- type: String,
- default: "bottom"
- },
- enablePlayGesture: Boolean,
- autoPauseIfNavigate: {
- type: Boolean,
- default: true
- },
- autoPauseIfOpenNative: {
- type: Boolean,
- default: true
- },
- vslideGesture: Boolean,
- vslideGestureInFullscreen: {
- type: Boolean,
- default: true
- },
- adUnitId: String,
- posterForCrawler: String
- },
- watch: {
- src: {
- immediate: true,
- handler(val) {
- if (val) {
- this.ctx = uni.createVideoContext("video", this);
- }
- }
- }
- },
- methods: {
- play() {
- this.ctx.play();
- },
- pause() {
- this.ctx.pause();
- },
- stop() {
- this.ctx.stop();
- },
- onPlay(e) {
- this.$emit("play", e);
- },
- onPause(e) {
- this.$emit("pause", e);
- },
- onEnded(e) {
- this.$emit("ended", e);
- },
- onTimeUpdate(e) {
- this.$emit("timeupdate", e);
- },
- onWaiting(e) {
- this.$emit("waiting", e);
- },
- onError2(e) {
- this.$emit("error", e);
- },
- onProgress(e) {
- this.$emit("progress", e);
- },
- onLoadedMetaData(e) {
- this.$emit("loadedmetadata", e);
- },
- onFullScreenClick(e) {
- this.$emit("fullscreenclick", e);
- },
- onControlStoggle(e) {
- this.$emit("controlstoggle", e);
- }
- }
- };
- </script>
|