| | |
| | | autoplay |
| | | preload="auto" |
| | | muted |
| | | @click="unmuteVideo" |
| | | @click="handleVideoClick" |
| | | > |
| | | æ¨çæµè§å¨ä¸æ¯æè§é¢ææ¾ã |
| | | </video> |
| | | <div v-if="isMuted" class="mute-hint" @click="unmuteVideo"> |
| | | <span>ç¹å»åæ¶éé³ï¼5ç§åèªå¨ææ¾å£°é³ï¼</span> |
| | | <div v-if="showUnmuteButton" class="unmute-button" @click="unmuteVideo"> |
| | | <span>ð ç¹å»åæ¶éé³</span> |
| | | </div> |
| | | </dv-border-box-13> |
| | | </div> |
| | |
| | | export default { |
| | | data() { |
| | | return { |
| | | isMuted: false, |
| | | unmuteTimeout: null // åå¨å®æ¶å¨ä»¥ä¾¿æ¸
ç |
| | | showUnmuteButton: true, // æ¾ç¤ºåæ¶éé³æé® |
| | | hasUserInteracted: false, // è®°å½ç¨æ·æ¯å¦å·²äº¤äº |
| | | wasPlaying: false // è®°å½è§£é¤éé³åçææ¾ç¶æ |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.initVideo(); |
| | | this.adjustVideoSize(); |
| | | window.addEventListener('resize', this.adjustVideoSize); |
| | | |
| | | // 5ç§åèªå¨åæ¶éé³ |
| | | this.unmuteTimeout = setTimeout(() => { |
| | | this.unmuteVideo(); |
| | | }, 5000); |
| | | }, |
| | | beforeDestroy() { |
| | | window.removeEventListener('resize', this.adjustVideoSize); |
| | | if (this.unmuteTimeout) { |
| | | clearTimeout(this.unmuteTimeout); // æ¸
é¤å®æ¶å¨é¿å
å
åæ³æ¼ |
| | | const video = this.$refs.videoPlayer; |
| | | if (video) { |
| | | video.removeEventListener('error', this.handleVideoError); |
| | | } |
| | | }, |
| | | methods: { |
| | | initVideo() { |
| | | async initVideo() { |
| | | const video = this.$refs.videoPlayer; |
| | | if (video) { |
| | | video.addEventListener('ended', () => { |
| | | video.currentTime = 0; |
| | | video.play(); |
| | | }); |
| | | // ç¡®ä¿è§é¢ä»¥éé³ç¶æå¼å§ |
| | | video.muted = true; |
| | | |
| | | // æ·»å é误çå¬ |
| | | video.addEventListener('error', this.handleVideoError); |
| | | |
| | | // å°è¯èªå¨ææ¾ï¼éé³ç¶æä¸é常å
è®¸ï¼ |
| | | try { |
| | | await video.play(); |
| | | this.wasPlaying = true; |
| | | } catch (error) { |
| | | console.log('èªå¨ææ¾è¢«é»æ¢:', error); |
| | | } |
| | | } |
| | | document.addEventListener('click', this.unmuteVideo, { once: true }); |
| | | }, |
| | | unmuteVideo() { |
| | | |
| | | handleVideoClick() { |
| | | if (!this.hasUserInteracted) { |
| | | this.hasUserInteracted = true; |
| | | // ç¨æ·ç¬¬ä¸æ¬¡ç¹å»è§é¢æ¶å°è¯è§£é¤éé³ |
| | | this.unmuteVideo(); |
| | | } |
| | | }, |
| | | |
| | | async unmuteVideo() { |
| | | const video = this.$refs.videoPlayer; |
| | | if (video) { |
| | | if (!video) return; |
| | | |
| | | // è®°å½å½åææ¾ç¶æ |
| | | this.wasPlaying = !video.paused; |
| | | |
| | | try { |
| | | // å
ç¡®ä¿è§é¢å¨ææ¾ |
| | | if (this.wasPlaying) { |
| | | await video.play(); |
| | | } |
| | | |
| | | // è§£é¤éé³ |
| | | video.muted = false; |
| | | video.volume = 1.0; |
| | | this.isMuted = false; |
| | | |
| | | // éèåæ¶éé³æé® |
| | | this.showUnmuteButton = false; |
| | | } catch (error) { |
| | | console.error('è§£é¤éé³å¤±è´¥:', error); |
| | | // æ¾ç¤ºæç¤ºï¼åç¥ç¨æ·éè¦äº¤äºæè½ææ¾å£°é³ |
| | | this.showUnmuteButton = true; |
| | | } |
| | | }, |
| | | |
| | | handleVideoError(e) { |
| | | const video = e.target; |
| | | console.error('è§é¢é误:', video.error); |
| | | }, |
| | | |
| | | adjustVideoSize() { |
| | | const video = this.$refs.videoPlayer; |
| | | if (video) { |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* æ ·å¼ä¿æä¸å */ |
| | | .centermap { |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: cover; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .mute-hint { |
| | | .unmute-button { |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | background: rgba(0,0,0,0.7); |
| | | bottom: 20px; |
| | | right: 20px; |
| | | background: rgba(0, 0, 0, 0.7); |
| | | color: white; |
| | | padding: 10px 20px; |
| | | border-radius: 5px; |
| | | padding: 8px 16px; |
| | | border-radius: 20px; |
| | | cursor: pointer; |
| | | z-index: 10; |
| | | font-size: 14px; |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 8px; |
| | | transition: all 0.3s ease; |
| | | |
| | | &:hover { |
| | | background: rgba(0, 0, 0, 0.9); |
| | | } |
| | | } |
| | | </style> |