|
@@ -22,11 +22,13 @@
|
|
|
@dragover.prevent
|
|
|
@drop.prevent="onDrop"
|
|
|
/>
|
|
|
- <!-- <button class="replay"
|
|
|
+ <button
|
|
|
v-click-audio
|
|
|
- >
|
|
|
+ class="replay"
|
|
|
+ @click="onClickReplay"
|
|
|
+ >
|
|
|
重玩
|
|
|
- </button> -->
|
|
|
+ </button>
|
|
|
</div>
|
|
|
|
|
|
<div class="jigsaw-list">
|
|
@@ -69,6 +71,7 @@
|
|
|
<script>
|
|
|
import useWindowSizeAdaptor from '@/useFunctions/useWindowSizeAdaptor.js'
|
|
|
import { ElMessageBox } from 'element-plus'
|
|
|
+import { shuffle } from "lodash"
|
|
|
|
|
|
export default {
|
|
|
name: 'JigsawGame',
|
|
@@ -107,17 +110,12 @@ export default {
|
|
|
hasPut: false,
|
|
|
})
|
|
|
}
|
|
|
+ this.jigsawItemsFlatten = shuffle(this.jigsawItemsFlatten)
|
|
|
}
|
|
|
setTimeout(() => {
|
|
|
console.log('进入timeout!')
|
|
|
if (!this.jigsawProgressSceneL2.isJigsawDone) {
|
|
|
- console.log('要hide!')
|
|
|
- const objectDocument = this.$refs.svgContainer.contentDocument
|
|
|
- const gList = objectDocument.getElementsByTagName('g')
|
|
|
- for (let index = 1; index < gList.length; index++) {
|
|
|
- const element = gList[index]
|
|
|
- element.setAttribute('visibility', 'hidden')
|
|
|
- }
|
|
|
+ this.hideAllInSvg()
|
|
|
}
|
|
|
}, 300)
|
|
|
},
|
|
@@ -126,7 +124,16 @@ export default {
|
|
|
methods: {
|
|
|
...mapMutations([
|
|
|
'recordJigsawDone',
|
|
|
+ 'replayJigsaw',
|
|
|
]),
|
|
|
+ hideAllInSvg() {
|
|
|
+ const objectDocument = this.$refs.svgContainer.contentDocument
|
|
|
+ const gList = objectDocument.getElementsByTagName('g')
|
|
|
+ for (let index = 1; index < gList.length; index++) {
|
|
|
+ const element = gList[index]
|
|
|
+ element.setAttribute('visibility', 'hidden')
|
|
|
+ }
|
|
|
+ },
|
|
|
onDragStart(e, jigsawImgName, idx) {
|
|
|
// 不知道为啥,在svg内部元素上无法触发drop事件,求助gpt也没用。只好用一个透明方块放在需要能drop的svg内部元素上面。
|
|
|
|
|
@@ -246,6 +253,13 @@ export default {
|
|
|
onDragOver(e) {
|
|
|
e.preventDefault()
|
|
|
},
|
|
|
+ onClickReplay() {
|
|
|
+ this.jigsawItemsFlatten.forEach(element => {
|
|
|
+ element.hasPut = false
|
|
|
+ })
|
|
|
+ this.hideAllInSvg()
|
|
|
+ this.replayJigsaw(Number(this.$route.query.sceneL2Idx))
|
|
|
+ }
|
|
|
},
|
|
|
}
|
|
|
</script>
|
|
@@ -289,22 +303,22 @@ export default {
|
|
|
// opacity: 0.2;
|
|
|
z-index: 1;
|
|
|
}
|
|
|
- // >button.replay {
|
|
|
- // position: absolute;
|
|
|
- // bottom: calc(-15 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
- // left: 50%;
|
|
|
- // transform: translate(-50%, 100%);
|
|
|
- // width: calc(100 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
- // height: calc(40 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
- // border-radius: calc(5 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
- // border: 1px solid red;
|
|
|
- // letter-spacing: 0.5em;
|
|
|
- // padding-left: 0.5em;
|
|
|
- // font-size: calc(20 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
- // font-family: Source Han Sans CN-Bold, Source Han Sans CN;
|
|
|
- // font-weight: bold;
|
|
|
- // color: red;
|
|
|
- // }
|
|
|
+ >button.replay {
|
|
|
+ position: absolute;
|
|
|
+ bottom: calc(-15 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, 100%);
|
|
|
+ width: calc(100 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
+ height: calc(40 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
+ border-radius: calc(5 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
+ border: 1px solid red;
|
|
|
+ letter-spacing: 0.5em;
|
|
|
+ padding-left: 0.5em;
|
|
|
+ font-size: calc(20 / v-bind('windowSizeWhenDesign') * v-bind('unit'));
|
|
|
+ font-family: Source Han Sans CN-Bold, Source Han Sans CN;
|
|
|
+ font-weight: bold;
|
|
|
+ color: red;
|
|
|
+ }
|
|
|
}
|
|
|
>.jigsaw-list {
|
|
|
position: relative;
|