147 lines
4.3 KiB
JavaScript
147 lines
4.3 KiB
JavaScript
|
"use strict";
|
||
|
const common_vendor = require("../../../common/vendor.js");
|
||
|
const videoData = [
|
||
|
{
|
||
|
src: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hellouniapp/hello-nvue-swiper-vertical-01.mp4"
|
||
|
},
|
||
|
{
|
||
|
src: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hellouniapp/hello-nvue-swiper-vertical-02.mp4"
|
||
|
},
|
||
|
{
|
||
|
src: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hellouniapp/hello-nvue-swiper-vertical-03.mp4"
|
||
|
},
|
||
|
{
|
||
|
src: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hellouniapp/hello-nvue-swiper-vertical-01.mp4"
|
||
|
},
|
||
|
{
|
||
|
src: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hellouniapp/hello-nvue-swiper-vertical-02.mp4"
|
||
|
},
|
||
|
{
|
||
|
src: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hellouniapp/hello-nvue-swiper-vertical-03.mp4"
|
||
|
}
|
||
|
];
|
||
|
const _sfc_main = {
|
||
|
data() {
|
||
|
return {
|
||
|
circular: true,
|
||
|
videoList: [
|
||
|
{
|
||
|
id: "video0",
|
||
|
src: "",
|
||
|
img: ""
|
||
|
},
|
||
|
{
|
||
|
id: "video1",
|
||
|
src: "",
|
||
|
img: ""
|
||
|
},
|
||
|
{
|
||
|
id: "video2",
|
||
|
src: "",
|
||
|
img: ""
|
||
|
}
|
||
|
],
|
||
|
videoDataList: []
|
||
|
};
|
||
|
},
|
||
|
onLoad(e) {
|
||
|
},
|
||
|
onReady() {
|
||
|
this.init();
|
||
|
this.getData();
|
||
|
},
|
||
|
methods: {
|
||
|
init() {
|
||
|
this._videoIndex = 0;
|
||
|
this._videoContextList = [];
|
||
|
for (var i = 0; i < this.videoList.length; i++) {
|
||
|
this._videoContextList.push(common_vendor.index.createVideoContext("video" + i, this));
|
||
|
}
|
||
|
this._videoDataIndex = 0;
|
||
|
},
|
||
|
getData(e) {
|
||
|
this.videoDataList = videoData;
|
||
|
setTimeout(() => {
|
||
|
this.updateVideo(true);
|
||
|
}, 200);
|
||
|
},
|
||
|
onSwiperChange(e) {
|
||
|
let currentIndex = e.detail.current;
|
||
|
if (currentIndex === this._videoIndex) {
|
||
|
return;
|
||
|
}
|
||
|
let isNext = false;
|
||
|
if (currentIndex === 0 && this._videoIndex === this.videoList.length - 1) {
|
||
|
isNext = true;
|
||
|
} else if (currentIndex === this.videoList.length - 1 && this._videoIndex === 0) {
|
||
|
isNext = false;
|
||
|
} else if (currentIndex > this._videoIndex) {
|
||
|
isNext = true;
|
||
|
}
|
||
|
if (isNext) {
|
||
|
this._videoDataIndex++;
|
||
|
} else {
|
||
|
this._videoDataIndex--;
|
||
|
}
|
||
|
if (this._videoDataIndex < 0) {
|
||
|
this._videoDataIndex = this.videoDataList.length - 1;
|
||
|
} else if (this._videoDataIndex >= this.videoDataList.length) {
|
||
|
this._videoDataIndex = 0;
|
||
|
}
|
||
|
this.circular = this._videoDataIndex != 0;
|
||
|
if (this._videoIndex >= 0) {
|
||
|
this._videoContextList[this._videoIndex].pause();
|
||
|
this._videoContextList[this._videoIndex].seek(0);
|
||
|
}
|
||
|
this._videoIndex = currentIndex;
|
||
|
setTimeout(() => {
|
||
|
this.updateVideo(isNext);
|
||
|
}, 200);
|
||
|
},
|
||
|
getNextIndex(isNext) {
|
||
|
let index = this._videoIndex + (isNext ? 1 : -1);
|
||
|
if (index < 0) {
|
||
|
return this.videoList.length - 1;
|
||
|
} else if (index >= this.videoList.length) {
|
||
|
return 0;
|
||
|
}
|
||
|
return index;
|
||
|
},
|
||
|
getNextDataIndex(isNext) {
|
||
|
let index = this._videoDataIndex + (isNext ? 1 : -1);
|
||
|
if (index < 0) {
|
||
|
return this.videoDataList.length - 1;
|
||
|
} else if (index >= this.videoDataList.length) {
|
||
|
return 0;
|
||
|
}
|
||
|
return index;
|
||
|
},
|
||
|
updateVideo(isNext) {
|
||
|
this.$set(this.videoList[this._videoIndex], "src", this.videoDataList[this._videoDataIndex].src);
|
||
|
this.$set(this.videoList[this.getNextIndex(isNext)], "src", this.videoDataList[this.getNextDataIndex(isNext)].src);
|
||
|
setTimeout(() => {
|
||
|
this._videoContextList[this._videoIndex].play();
|
||
|
}, 200);
|
||
|
console.log("v:" + this._videoIndex + " d:" + this._videoDataIndex + "; next v:" + this.getNextIndex(
|
||
|
isNext
|
||
|
) + " next d:" + this.getNextDataIndex(isNext));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||
|
return {
|
||
|
a: common_vendor.f($data.videoList, (item, k0, i0) => {
|
||
|
return {
|
||
|
a: item.id,
|
||
|
b: item.id,
|
||
|
c: item.src,
|
||
|
d: item.id
|
||
|
};
|
||
|
}),
|
||
|
b: $data.circular,
|
||
|
c: common_vendor.o((...args) => $options.onSwiperChange && $options.onSwiperChange(...args))
|
||
|
};
|
||
|
}
|
||
|
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "E:/xianyu/app/greenPro/pages/template/swiper-vertical/swiper-vertical.nvue"]]);
|
||
|
wx.createPage(MiniProgramPage);
|