解决布局跳动问题
This commit is contained in:
parent
74d299a8c3
commit
5c2a9ab91b
@ -8,6 +8,7 @@
|
|||||||
import { TosClient } from '@volcengine/tos-sdk';
|
import { TosClient } from '@volcengine/tos-sdk';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
|
||||||
|
|
||||||
// 配置信息
|
// 配置信息
|
||||||
@ -114,11 +115,10 @@ async function uploadDirectory(dirPath: string): Promise<void> {
|
|||||||
|
|
||||||
// 主函数
|
// 主函数
|
||||||
async function main() {
|
async function main() {
|
||||||
// 使用 import.meta.url 替代 __dirname (ES 模块兼容)
|
// ES 模块中获取当前文件目录的正确方式
|
||||||
const currentFileUrl = import.meta.url;
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const currentFilePath = new URL(currentFileUrl).pathname;
|
const __dirname = path.dirname(__filename);
|
||||||
const currentDir = path.dirname(currentFilePath);
|
const assetsDir = path.resolve(__dirname, '../dist/assets');
|
||||||
const assetsDir = path.resolve(currentDir, '../dist/assets');
|
|
||||||
console.log(`开始上传目录: ${assetsDir}`);
|
console.log(`开始上传目录: ${assetsDir}`);
|
||||||
await uploadDirectory(assetsDir);
|
await uploadDirectory(assetsDir);
|
||||||
}
|
}
|
||||||
@ -128,4 +128,3 @@ main().catch(error => {
|
|||||||
console.error('程序执行失败:', error);
|
console.error('程序执行失败:', error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -142,7 +142,51 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "Aboutus"
|
name: "Aboutus",
|
||||||
|
mounted() {
|
||||||
|
this.$nextTick(function() {
|
||||||
|
this.handleMediaLoad();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleMediaLoad: function() {
|
||||||
|
const container = document.getElementById('aboutusbanner');
|
||||||
|
|
||||||
|
if (container) {
|
||||||
|
// 处理视频加载
|
||||||
|
const video = document.getElementById('abtbannervideo');
|
||||||
|
if (video) {
|
||||||
|
const handleVideoReady = () => {
|
||||||
|
container.classList.add('video-loaded');
|
||||||
|
video.removeEventListener('loadedmetadata', handleVideoReady);
|
||||||
|
video.removeEventListener('canplay', handleVideoReady);
|
||||||
|
};
|
||||||
|
|
||||||
|
video.addEventListener('loadedmetadata', handleVideoReady);
|
||||||
|
video.addEventListener('canplay', handleVideoReady);
|
||||||
|
|
||||||
|
if (video.videoWidth > 0) {
|
||||||
|
handleVideoReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理图片加载(移动端GIF)
|
||||||
|
const img = document.querySelector('#aboutusbanner .videoimg');
|
||||||
|
if (img) {
|
||||||
|
const handleImageReady = () => {
|
||||||
|
container.classList.add('video-loaded');
|
||||||
|
img.removeEventListener('load', handleImageReady);
|
||||||
|
};
|
||||||
|
|
||||||
|
img.addEventListener('load', handleImageReady);
|
||||||
|
|
||||||
|
if (img.complete && img.naturalWidth > 0) {
|
||||||
|
handleImageReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -11,9 +11,6 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
<template>
|
<template>
|
||||||
<div class="pageroot" id="examplesprocessroot">
|
<div class="pageroot" id="examplesprocessroot">
|
||||||
<div id="examplebanner" class="videorootbanner">
|
<div id="examplebanner" class="videorootbanner">
|
||||||
<!-- <img v-if="$isMobile.android.phone||$isMobile.android.tablet"-->
|
|
||||||
<!-- src="/ExpVideoPreload.png"-->
|
|
||||||
<!-- class="videoimg"/>-->
|
|
||||||
<video v-if="breakpoint==='xs'||breakpoint==='sm'||breakpoint==='md'"
|
<video v-if="breakpoint==='xs'||breakpoint==='sm'||breakpoint==='md'"
|
||||||
controls=""
|
controls=""
|
||||||
id="expbannervideo"
|
id="expbannervideo"
|
||||||
@ -23,7 +20,6 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
<source :src="ExpVideo" type="video/mp4"></source>
|
<source :src="ExpVideo" type="video/mp4"></source>
|
||||||
</video>
|
</video>
|
||||||
<video v-else
|
<video v-else
|
||||||
:poster="ExpVideoPreload"
|
|
||||||
id="expbannervideo"
|
id="expbannervideo"
|
||||||
muted autoplay="autoplay"
|
muted autoplay="autoplay"
|
||||||
loop="loop" playsinline webkit-playsinline
|
loop="loop" playsinline webkit-playsinline
|
||||||
@ -52,7 +48,36 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
<script>
|
<script>
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
export default {
|
export default {
|
||||||
name: "Examples"
|
name: "Examples",
|
||||||
|
mounted() {
|
||||||
|
this.$nextTick(function() {
|
||||||
|
this.handleVideoLoad();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleVideoLoad: function() {
|
||||||
|
const video = document.getElementById('expbannervideo');
|
||||||
|
const container = document.getElementById('examplebanner');
|
||||||
|
|
||||||
|
if (video && container) {
|
||||||
|
// 优化:使用loadedmetadata事件,这是视频尺寸信息可用的最早时机
|
||||||
|
const handleVideoReady = () => {
|
||||||
|
container.classList.add('video-loaded');
|
||||||
|
// 移除事件监听器避免重复触发
|
||||||
|
video.removeEventListener('loadedmetadata', handleVideoReady);
|
||||||
|
video.removeEventListener('canplay', handleVideoReady);
|
||||||
|
};
|
||||||
|
|
||||||
|
video.addEventListener('loadedmetadata', handleVideoReady);
|
||||||
|
video.addEventListener('canplay', handleVideoReady);
|
||||||
|
|
||||||
|
// 如果视频已经有尺寸信息,立即触发
|
||||||
|
if (video.videoWidth > 0) {
|
||||||
|
handleVideoReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -19,18 +19,14 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
<template>
|
<template>
|
||||||
<div id="homepageroot" class="pageroot">
|
<div id="homepageroot" class="pageroot">
|
||||||
<div id="homepagebanner" class="videorootbanner">
|
<div id="homepagebanner" class="videorootbanner">
|
||||||
<!-- <img v-if="$isMobile.android.phone||$isMobile.android.tablet"-->
|
|
||||||
<!-- src="/bannervideopreload.png"-->
|
|
||||||
<!-- class="videoimg"/>-->
|
|
||||||
<video v-if="breakpoint==='xs'||breakpoint==='sm'||breakpoint==='md'"
|
<video v-if="breakpoint==='xs'||breakpoint==='sm'||breakpoint==='md'"
|
||||||
:poster="bannervideopreload" controls=""
|
|
||||||
id="bannervideo" muted autoplay="autoplay" loop="loop"
|
id="bannervideo" muted autoplay="autoplay" loop="loop"
|
||||||
playsinline webkit-playsinline
|
playsinline webkit-playsinline
|
||||||
class="bannervideos"
|
class="bannervideos"
|
||||||
x5-video-player-type="h5-page">
|
x5-video-player-type="h5-page">
|
||||||
<source :src="HpgVideo" type="video/mp4"></source>
|
<source :src="HpgVideo" type="video/mp4"></source>
|
||||||
</video>
|
</video>
|
||||||
<video v-else :poster="bannervideopreload"
|
<video v-else
|
||||||
id="bannervideo" muted autoplay="autoplay" loop="loop"
|
id="bannervideo" muted autoplay="autoplay" loop="loop"
|
||||||
playsinline webkit-playsinline
|
playsinline webkit-playsinline
|
||||||
class="bannervideos"
|
class="bannervideos"
|
||||||
@ -179,6 +175,7 @@ export default {
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.$nextTick(function() {
|
this.$nextTick(function() {
|
||||||
this.video_autoplay();
|
this.video_autoplay();
|
||||||
|
this.handleVideoLoad();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
@ -190,6 +187,28 @@ export default {
|
|||||||
video.play();
|
video.play();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
handleVideoLoad: function() {
|
||||||
|
const video = document.getElementById('bannervideo');
|
||||||
|
const container = document.getElementById('homepagebanner');
|
||||||
|
|
||||||
|
if (video && container) {
|
||||||
|
// 优化:使用loadedmetadata事件,这是视频尺寸信息可用的最早时机
|
||||||
|
const handleVideoReady = () => {
|
||||||
|
container.classList.add('video-loaded');
|
||||||
|
// 移除事件监听器避免重复触发
|
||||||
|
video.removeEventListener('loadedmetadata', handleVideoReady);
|
||||||
|
video.removeEventListener('canplay', handleVideoReady);
|
||||||
|
};
|
||||||
|
|
||||||
|
video.addEventListener('loadedmetadata', handleVideoReady);
|
||||||
|
video.addEventListener('canplay', handleVideoReady);
|
||||||
|
|
||||||
|
// 如果视频已经有尺寸信息,立即触发
|
||||||
|
if (video.videoWidth > 0) {
|
||||||
|
handleVideoReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="pageroot" id="serviceprocessroot">
|
<div class="pageroot" id="serviceprocessroot">
|
||||||
<div id="serviceprocessbanner" class="videorootbanner">
|
<div id="serviceprocessbanner">
|
||||||
<img class="videoimg" :src="Newbanner"/>
|
<img class="videoimg" :src="Newbanner"/>
|
||||||
<div id="expbanner" class="bannerovervideo">
|
<div id="expbanner" class="bannerovervideo">
|
||||||
<div class="bannercontent">
|
<div class="bannercontent">
|
||||||
@ -96,7 +96,34 @@ const { breakpoint } = useBootstrapBreakpoint();
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "ServiceProcess"
|
name: "ServiceProcess",
|
||||||
|
mounted() {
|
||||||
|
this.$nextTick(function() {
|
||||||
|
this.handleImageLoad();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleImageLoad: function() {
|
||||||
|
const img = document.querySelector('#serviceprocessbanner .videoimg');
|
||||||
|
const container = document.getElementById('serviceprocessbanner');
|
||||||
|
|
||||||
|
if (img && container) {
|
||||||
|
// 图片加载完成后的处理
|
||||||
|
const handleImageReady = () => {
|
||||||
|
container.classList.add('video-loaded');
|
||||||
|
// 移除事件监听器避免重复触发
|
||||||
|
img.removeEventListener('load', handleImageReady);
|
||||||
|
};
|
||||||
|
|
||||||
|
img.addEventListener('load', handleImageReady);
|
||||||
|
|
||||||
|
// 如果图片已经加载完成
|
||||||
|
if (img.complete && img.naturalWidth > 0) {
|
||||||
|
handleImageReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -104,9 +131,18 @@ export default {
|
|||||||
@import "src/publicstyle.scss";
|
@import "src/publicstyle.scss";
|
||||||
|
|
||||||
#serviceprocessbanner{
|
#serviceprocessbanner{
|
||||||
|
width: 100% !important;
|
||||||
|
background-color: black !important;
|
||||||
|
position: relative !important;
|
||||||
|
z-index: 0 !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
|
||||||
@include media-breakpoint-between(xs, md) {
|
@include media-breakpoint-between(xs, md) {
|
||||||
aspect-ratio: 1.92;
|
aspect-ratio: 1.92;
|
||||||
}
|
}
|
||||||
|
@include media-breakpoint-up(md){
|
||||||
|
aspect-ratio: 2.62026969;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#blackchart{
|
#blackchart{
|
||||||
|
|||||||
@ -35,12 +35,43 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.videorootbanner{
|
.videorootbanner{
|
||||||
width: 100%;
|
width: 100% !important;
|
||||||
height: auto;
|
background-color: black !important;
|
||||||
background-color: black;
|
position: relative !important;
|
||||||
position: relative;
|
z-index: 0 !important;
|
||||||
z-index: 0; // 明确设置父容器z-index
|
overflow: hidden !important;
|
||||||
overflow: hidden; // 帮助创建新的堆叠上下文
|
|
||||||
|
// 始终保持固定的aspect-ratio作为占位,确保立即渲染
|
||||||
|
@include media-breakpoint-between(xs, md) {
|
||||||
|
aspect-ratio: 1.92 !important;
|
||||||
|
}
|
||||||
|
@include media-breakpoint-up(md){
|
||||||
|
aspect-ratio: 2.62026969 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 视频/图片元素的默认样式
|
||||||
|
video, .videoimg {
|
||||||
|
position: absolute !important;
|
||||||
|
top: 0 !important;
|
||||||
|
left: 0 !important;
|
||||||
|
width: 100% !important;
|
||||||
|
height: 100% !important;
|
||||||
|
object-fit: cover !important;
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 当媒体加载完成后,重新调整容器和媒体尺寸
|
||||||
|
&.video-loaded {
|
||||||
|
aspect-ratio: unset !important; // 移除固定比例
|
||||||
|
height: auto !important; // 高度自适应
|
||||||
|
|
||||||
|
video, .videoimg {
|
||||||
|
position: static !important; // 改为文档流布局
|
||||||
|
width: 100% !important; // 宽度占满
|
||||||
|
height: auto !important; // 高度自适应
|
||||||
|
object-fit: contain !important; // 保持媒体比例,完整显示
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bannervideos{
|
.bannervideos{
|
||||||
|
|||||||
@ -4,7 +4,8 @@ import { fileURLToPath, URL } from 'node:url'
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
base: process.env.NODE_ENV === 'production' ? 'https://cdn.kdesign.top/' : '/',
|
// base: process.env.NODE_ENV === 'production' ? 'https://cdn.kdesign.top/' : '/',
|
||||||
|
base: '/',
|
||||||
plugins: [
|
plugins: [
|
||||||
vue(),
|
vue(),
|
||||||
// 添加自定义中间件来处理根路径
|
// 添加自定义中间件来处理根路径
|
||||||
@ -37,6 +38,11 @@ export default defineConfig({
|
|||||||
input: {
|
input: {
|
||||||
main: fileURLToPath(new URL('./index.html', import.meta.url)),
|
main: fileURLToPath(new URL('./index.html', import.meta.url)),
|
||||||
start: fileURLToPath(new URL('./start.html', import.meta.url))
|
start: fileURLToPath(new URL('./start.html', import.meta.url))
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
chunkFileNames: 'assets/[name]-[hash].js',
|
||||||
|
entryFileNames: 'assets/[name]-[hash].js',
|
||||||
|
assetFileNames: 'assets/[name]-[hash].[ext]'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user