|
@@ -11,6 +11,7 @@ import {
|
|
|
import {
|
|
|
PropType,
|
|
|
defineComponent,
|
|
|
+ nextTick,
|
|
|
onMounted,
|
|
|
reactive,
|
|
|
ref,
|
|
@@ -24,6 +25,7 @@ import { checkFile } from '@/helpers/toolsValidate';
|
|
|
import MVideo from '../m-video';
|
|
|
import { state } from '@/state';
|
|
|
import { browser } from '@/helpers/utils';
|
|
|
+import deepClone from '@/helpers/deep-clone';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'm-image-preview',
|
|
@@ -61,8 +63,10 @@ export default defineComponent({
|
|
|
setup(props, { emit }) {
|
|
|
const forms = reactive({
|
|
|
show: false,
|
|
|
+ showButton: true,
|
|
|
index: props.startPosition + 1,
|
|
|
- saveLoading: false
|
|
|
+ saveLoading: false,
|
|
|
+ preLoading: false
|
|
|
});
|
|
|
|
|
|
const onSave = async (img: string) => {
|
|
@@ -99,6 +103,12 @@ export default defineComponent({
|
|
|
|
|
|
onMounted(() => {
|
|
|
forms.show = props.show;
|
|
|
+ // console.log(window.document.body.clientWidth);
|
|
|
+ document.documentElement.style.setProperty(
|
|
|
+ '--window-page-width',
|
|
|
+ (window.document.body.clientWidth || window.document.body.offsetWidth) +
|
|
|
+ 'px'
|
|
|
+ );
|
|
|
});
|
|
|
|
|
|
watch(
|
|
@@ -106,6 +116,23 @@ export default defineComponent({
|
|
|
() => {
|
|
|
forms.show = props.show;
|
|
|
forms.index = props.startPosition + 1;
|
|
|
+ forms.preLoading = props.show;
|
|
|
+ // console.log(forms.preLoading, 'show');
|
|
|
+ // nextTick(() => {
|
|
|
+ // // 判断打开的内容是否为视频,是则自动播放
|
|
|
+ // const defaultUrl = props.images[props.startPosition];
|
|
|
+ // console.log(defaultUrl, 'defaultUrl');
|
|
|
+ // if (checkFile(defaultUrl, 'video') && props.show) {
|
|
|
+ // console.log(1111, videoRef.value);
|
|
|
+ // // videoRef.value[props.startPosition]?.onPlay();
|
|
|
+ // videoRef.value.forEach((item: any, child: any) => {
|
|
|
+ // if (child === props.startPosition) {
|
|
|
+ // console.log(item, 'item');
|
|
|
+ // item?.onPlay();
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // });
|
|
|
}
|
|
|
);
|
|
|
watch(
|
|
@@ -115,13 +142,6 @@ export default defineComponent({
|
|
|
}
|
|
|
);
|
|
|
|
|
|
- onMounted(() => {
|
|
|
- // navBarHeight;
|
|
|
- // document.documentElement.style.setProperty(
|
|
|
- // '--header-height',
|
|
|
- // height + 'px'
|
|
|
- // );
|
|
|
- });
|
|
|
return () => (
|
|
|
<Popup
|
|
|
teleport={props.teleport}
|
|
@@ -130,49 +150,53 @@ export default defineComponent({
|
|
|
class={['van-image-preview', styles.imagePreview]}>
|
|
|
{forms.show ? (
|
|
|
<>
|
|
|
- <Icon
|
|
|
- name={iconPreviewClose}
|
|
|
- class="van-image-preview__close-icon van-image-preview__close-icon--top-left van-haptics-feedback"
|
|
|
- style={{
|
|
|
- top: state.navBarHeight
|
|
|
- ? state.navBarHeight + 'px'
|
|
|
- : 'var(--van-padding-md)'
|
|
|
- }}
|
|
|
- onClick={() => {
|
|
|
- onPlay(-1);
|
|
|
- emit('update:show', false);
|
|
|
- }}
|
|
|
- />
|
|
|
- <div
|
|
|
- class={'van-image-preview__index'}
|
|
|
- style={{
|
|
|
- top: state.navBarHeight
|
|
|
- ? state.navBarHeight + 'px'
|
|
|
- : 'var(--van-padding-md)'
|
|
|
- }}>
|
|
|
- {forms.index} / {props.images.length}
|
|
|
- </div>
|
|
|
- {props.showDownload && browser().isApp ? (
|
|
|
- <Icon
|
|
|
- name={iconPreviewDownload}
|
|
|
- class="van-image-preview__close-icon van-image-preview__close-icon--top-right van-haptics-feedback"
|
|
|
- style={{
|
|
|
- top: state.navBarHeight
|
|
|
- ? state.navBarHeight + 'px'
|
|
|
- : 'var(--van-padding-md)'
|
|
|
- }}
|
|
|
- onClick={() => {
|
|
|
- console.log(
|
|
|
- forms.index,
|
|
|
- 'index',
|
|
|
- props.images[forms.index - 1]
|
|
|
- );
|
|
|
+ {forms.showButton && (
|
|
|
+ <>
|
|
|
+ <Icon
|
|
|
+ name={iconPreviewClose}
|
|
|
+ class="van-image-preview__close-icon van-image-preview__close-icon--top-left van-haptics-feedback"
|
|
|
+ style={{
|
|
|
+ top: state.navBarHeight
|
|
|
+ ? state.navBarHeight + 'px'
|
|
|
+ : 'var(--van-padding-md)'
|
|
|
+ }}
|
|
|
+ onClick={() => {
|
|
|
+ onPlay(-1);
|
|
|
+ emit('update:show', false);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <div
|
|
|
+ class={'van-image-preview__index'}
|
|
|
+ style={{
|
|
|
+ top: state.navBarHeight
|
|
|
+ ? state.navBarHeight + 'px'
|
|
|
+ : 'var(--van-padding-md)'
|
|
|
+ }}>
|
|
|
+ {forms.index} / {props.images.length}
|
|
|
+ </div>
|
|
|
+ {props.showDownload && browser().isApp ? (
|
|
|
+ <Icon
|
|
|
+ name={iconPreviewDownload}
|
|
|
+ class="van-image-preview__close-icon van-image-preview__close-icon--top-right van-haptics-feedback"
|
|
|
+ style={{
|
|
|
+ top: state.navBarHeight
|
|
|
+ ? state.navBarHeight + 'px'
|
|
|
+ : 'var(--van-padding-md)'
|
|
|
+ }}
|
|
|
+ onClick={() => {
|
|
|
+ console.log(
|
|
|
+ forms.index,
|
|
|
+ 'index',
|
|
|
+ props.images[forms.index - 1]
|
|
|
+ );
|
|
|
|
|
|
- onSave(props.images[forms.index - 1]);
|
|
|
- }}
|
|
|
- />
|
|
|
- ) : (
|
|
|
- ''
|
|
|
+ onSave(props.images[forms.index - 1]);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ ) : (
|
|
|
+ ''
|
|
|
+ )}
|
|
|
+ </>
|
|
|
)}
|
|
|
<Swipe
|
|
|
autoplay={0}
|
|
@@ -182,6 +206,7 @@ export default defineComponent({
|
|
|
initialSwipe={props.startPosition}
|
|
|
onChange={(index: number) => {
|
|
|
forms.index = index + 1;
|
|
|
+ // forms.preLoading = true;
|
|
|
onPlay(index);
|
|
|
}}
|
|
|
lazyRender>
|
|
@@ -202,10 +227,29 @@ export default defineComponent({
|
|
|
e.preventDefault();
|
|
|
}}>
|
|
|
<MVideo
|
|
|
- ref={(el: any) => (videoRef.value[index] = el)}
|
|
|
+ ref={(el: any) => {
|
|
|
+ videoRef.value[index] = el;
|
|
|
+ // if (forms.index === index + 1 && forms.preLoading) {
|
|
|
+ // console.log(el, 'player');
|
|
|
+ // el?.onPlay();
|
|
|
+ // forms.preLoading = false;
|
|
|
+ // }
|
|
|
+ }}
|
|
|
+ // onReady={player => {
|
|
|
+ // if (
|
|
|
+ // props.startPosition === index &&
|
|
|
+ // forms.preLoading
|
|
|
+ // ) {
|
|
|
+ // console.log(player, 'player');
|
|
|
+ // player?.play();
|
|
|
+ // forms.preLoading = false;
|
|
|
+ // }
|
|
|
+ // }}
|
|
|
src={url}
|
|
|
onPlay={() => onPlay(index)}
|
|
|
preLoading={false}
|
|
|
+ onEnterfullscreen={() => (forms.showButton = false)}
|
|
|
+ onExitfullscreen={() => (forms.showButton = true)}
|
|
|
/>
|
|
|
</div>
|
|
|
)}
|