修复bug

This commit is contained in:
2025-11-27 09:42:18 +08:00
parent 0ff0b17f7a
commit 1c2d09fa6c
10 changed files with 546 additions and 459 deletions

View File

@@ -486,6 +486,7 @@
); // passive: false 必须,否则 preventDefault 无效
const allVideos = document.querySelectorAll('.right-video');
let scrollTimer = null; // 防抖定时器
// 停止所有视频播放
function stopAllVideos() {
allVideos.forEach((video) => {
@@ -496,18 +497,18 @@
if (img) img.style.display = 'block';
});
}
// 滚动切换图片/视频(核心逻辑
window.addEventListener('scroll', function () {
// 处理视频/图片切换的核心逻辑(抽离为独立函数)
// 处理视频/图片切换的核心逻辑(抽离为独立函数
function handleVideoActive() {
const productRights = document.querySelectorAll('.product-right');
let activeVideo = null;
// 找出当前在视口中的视频容器
productRights.forEach((rightContainer) => {
const img = rightContainer.querySelector('.right-img');
const video = rightContainer.querySelector('.right-video');
const videoSrc = video.src.trim()
if (!img || !video) return;
if(!videoSrc) return;
const videoSrc = video.src.trim();
if (!img || !video || !videoSrc) return;
const rect = rightContainer.getBoundingClientRect();
// 视口判断容器进入视口50%以上视为活跃
const isInView =
@@ -538,6 +539,13 @@
} else {
stopAllVideos(); // 无活跃视频时停止所有播放
}
}
// 滚动事件添加防抖移动端推荐100-200ms延迟
window.addEventListener('scroll', function () {
// 清除上一次的定时器
clearTimeout(scrollTimer);
// 滚动停止后150ms再执行核心逻辑
scrollTimer = setTimeout(handleVideoActive, 150);
});
@@ -549,10 +557,10 @@
swiper = new Swiper('.auto-swiper-container', {
autoplay: {
delay: 113000, // 3秒切换
delay: 3000, // 3秒切换
disableOnInteraction: false,
},
loop: true,
loop: false,
slidesPerView: 1,
spaceBetween: 0,
// 启用分页指示标(核心配置)

View File

@@ -549,10 +549,10 @@
swiper = new Swiper('.auto-swiper-container', {
autoplay: {
delay: 113000, // 3秒切换
delay: 3000, // 3秒切换
disableOnInteraction: false,
},
loop: true,
loop: false,
slidesPerView: 1,
spaceBetween: 0,
// 启用分页指示标(核心配置)

View File

@@ -2,7 +2,7 @@
.advantage-section {
width: 90%;
margin: 0 auto;
padding: 4rem 0 3rem 0;
padding: 2rem 0;
position: relative;
z-index: 1;
}
@@ -29,21 +29,30 @@
padding: 0 0.1rem;
}
/* 卡片核心:优化宽高比和尺寸计算 */
.advantage-card {
/* 新增:卡片外层容器(专门控制圆角,避免缩放时丢失) */
.advantage-card-wrap {
flex: 0 0 calc((100% - 4 * clamp(0.1rem, 0.3vw, 0.8rem)) / 5);
min-width: calc((100% - 4 * clamp(0.1rem, 0.3vw, 0.8rem)) / 5);
max-width: calc((100% - 4 * clamp(0.1rem, 0.3vw, 0.8rem)) / 5);
border-radius: 0.5rem;
overflow: hidden;
box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease;
border-radius: 0.5rem; /* 外层容器承担圆角 */
overflow: hidden; /* 裁剪内部缩放的卡片 */
box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.1); /* 阴影移到外层,避免缩放时阴影变形 */
position: relative;
z-index: 1;
aspect-ratio: 1 / 1.7;
}
/* 卡片核心:优化宽高比和尺寸计算 */
.advantage-card {
width: 100%;
height: 100%;
cursor: pointer;
background: #fff;
position: relative;
z-index: 1;
aspect-ratio: 1 / 1.7;
/* PC端卡片高度略缩短更紧凑 */
/* 关键修复添加will-change优化渲染移除原圆角和阴影移到外层 */
will-change: transform; /* 告知浏览器准备变换,避免圆角渲染异常 */
transition: transform 0.3s ease;
}
.advantage-card__img {
@@ -101,11 +110,11 @@
/* 卡片标题右侧箭头:居右显示 */
.card-arrow {
color: #409eff;
font-size: clamp(0.7rem, 1vw, 1rem);
/* 箭头尺寸跟随标题放大,避免不协调 */
transition: transform 0.3s ease;
display: inline-block;
width: 24px;
width: 16px;
/* 箭头宽度同步增加 */
text-align: center;
}
@@ -119,7 +128,7 @@
.advantage-card__description {
font-size: clamp(0.6rem, 0.9vw, 0.9rem);
/* PC端描述文字略放大 */
color: #78787a;
color: #666;
line-height: 1.2;
/* PC端行高略紧凑 */
white-space: normal;
@@ -138,14 +147,18 @@
justify-content: left;
}
/* 卡片hover效果 */
/* 卡片hover效果(仅保留缩放,阴影移到外层) */
.advantage-card:hover {
transform: scale(1.03);
/* z-index: 10; */
/* box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.15); */
z-index: 10;
}
/* 移动端适配 */
/* 外层容器hover时增强阴影更自然的浮起效果 */
.advantage-card-wrap:hover {
box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.15);
}
/* 移动端适配 - 核心修改一行2个显示2行隐藏第5个 */
@media (max-width: 767px) {
.advantage-card:active {
transform: scale(1.01);
@@ -157,12 +170,24 @@
}
.advantage-section__list {
gap: 0.1rem;
gap: 0.5rem; /* 优化间距,更美观 */
flex-wrap: wrap; /* 允许换行 */
overflow: visible; /* 取消溢出隐藏,显示多行 */
justify-content: space-between; /* 两端对齐确保2个卡片均匀分布 */
}
.advantage-card {
/* 移动端卡片宽度一行2个 */
.advantage-card-wrap {
flex: 0 0 calc(50% - 0.25rem); /* 50%宽度减去一半间距,避免溢出 */
min-width: calc(50% - 0.25rem);
max-width: calc(50% - 0.25rem);
aspect-ratio: 1 / 1.8;
/* 移动端恢复更高的卡片高度 */
margin-bottom: 0.5rem; /* 行与行之间的间距 */
}
/* 隐藏第5个卡片 */
.advantage-card-wrap:nth-child(5) {
display: none;
}
.advantage-card__img {
@@ -189,8 +214,6 @@
-webkit-line-clamp: 2;
/* 移动端同步添加最小高度 */
min-height: calc(clamp(0.5rem, 0.8vw, 0.8rem) * 2 * 1.5);
display: flex;
align-items: flex-start;
}
/* 移动端箭头和文字尺寸缩小 */

View File

@@ -62,6 +62,7 @@ a {
.header {
width: 100%;
background: #fff;
height: 60px;
}
.header-img {
margin: 0 auto;

View File

@@ -13,6 +13,8 @@
overflow: hidden; /* 阻止蒙版自身滚动 */
touch-action: none; /* 禁止触摸行为 */
pointer-events: auto; /* 确保蒙版能接收事件 */
backdrop-filter: blur(8px); /* 模糊半径可调整4px-15px为宜 */
-webkit-backdrop-filter: blur(8px); /* 兼容Safari */
}
/* 蒙版内容容器 - 新增触摸事件传递控制 */

View File

@@ -11,7 +11,21 @@
display: flex;
flex-wrap: nowrap;
overflow: hidden;
padding: 0 clamp(0.2rem, 0.6vw, 0.3rem);
/* 关键修改1增大间距值原 clamp(0.3rem, 0.5vw, 0.36rem) → 现在放大2倍左右 */
gap: clamp(0.6rem, 1vw, 0.8rem);
padding: 0; /* 保持无内边距,避免间距叠加 */
}
/* 新增:外层容器(承载圆角、阴影、尺寸,避免缩放时圆角丢失) */
.product-card-wrap {
/* 原卡片的宽度计算逻辑移到外层 */
width: calc(25% - (clamp(0.6rem, 1vw, 0.8rem) * 3 / 4));
flex: none;
border-radius: clamp(0.375rem, 1vw, 0.5rem); /* 外层承载圆角 */
overflow: hidden; /* 裁剪内层缩放的卡片 */
box-shadow: 0 clamp(0.1rem, 0.2vw, 0.125rem) clamp(0.3rem, 0.8vw, 0.5rem) rgba(0, 0, 0, 0.05); /* 外层承载阴影 */
position: relative;
z-index: 1;
}
/* ######################################################################### */
@@ -23,20 +37,22 @@
align-items: stretch;
}
/* 卡片核心:移动端固定宽高比 */
/* 外层容器移动端适配:宽高比移到外层 */
.product-card-wrap {
aspect-ratio: 3 / 4.2;
}
/* 卡片核心移动端调整移除圆角、阴影添加will-change */
.product-card {
background: rgb(242, 243, 245);
border-radius: clamp(0.375rem, 1vw, 0.5rem);
cursor: pointer;
width: calc(25% - clamp(0.3rem, 0.5vw, 0.36rem));
width: 100%; /* 内层卡片占满外层容器 */
height: 100%;
flex: none;
box-shadow: 0 clamp(0.1rem, 0.2vw, 0.125rem)
clamp(0.3rem, 0.8vw, 0.5rem) rgba(0, 0, 0, 0.05);
margin: 0 clamp(0.16rem, 0.24vw, 0.2rem);
margin: 0; /* 保持无margin间距由gap控制 */
display: flex;
flex-direction: column;
aspect-ratio: 3 / 4.2;
/* 移动端固定宽高比 */
will-change: transform; /* 优化渲染,避免圆角异常 */
}
/* 卡片hover效果移动端特有 */
@@ -45,59 +61,51 @@
transition: transform 0.3s ease;
}
/* 图片容器:用视口单位固定高度,彻底不受图片影响 */
/* 外层容器hover增强阴影更自然的浮起效果 */
.product-card-wrap:hover {
box-shadow: 0 clamp(0.2rem, 0.4vw, 0.25rem) clamp(0.5rem, 1vw, 0.8rem) rgba(0, 0, 0, 0.08);
}
/* 图片容器:移动端固定占比 */
.product-card-img {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
/* 关键用vw固定高度基于屏幕宽度计算和图片本身尺寸无关 */
height: clamp(8rem, 28vw, 12rem); /* 移动端适配小屏8rem大屏12rem中间按28vw缩放 */
flex: 0 0 72%;
margin-bottom: clamp(0.4rem, 0.6vw, 0.5rem);
overflow: hidden;
border-radius: clamp(0.2rem, 0.4vw, 0.25rem);
}
/* 产品图片:强制填充容器,消除尺寸差异 */
/* 产品图片:移动端特有 */
.product-card img {
width: 100%;
height: 100%;
object-fit: contain; /* 保留完整图片如果需要裁剪用cover */
object-fit: contain;
object-position: center;
/* 强制图片适应容器,不管原图尺寸 */
min-width: 80%; /* 防止图片过窄(可选,根据需求调整) */
max-width: 100%;
}
/* 文字容器:移动端固定占比 */
/*.product-card-text {*/
/* flex: 0 0 20%;*/
/* 移动端文字区占比 */
/* display: flex;*/
/* flex-direction: column;*/
/* justify-content: center;*/
/* padding-left: clamp(0.8rem, 2vw, 1.5rem);*/
/* padding-right: clamp(0.8rem, 2vw, 1.5rem);*/
/*}*/
.product-card-text {
width: 100%;
/* 用vw固定文字区域高度和图片容器高度解耦 */
height: clamp(3rem, 10vw, 4.5rem); /* 小屏3rem大屏4.5rem中间按10vw缩放 */
flex: 0 0 20%;
display: flex;
flex-direction: column;
justify-content: flex-start;
overflow: hidden; /* 防止文字溢出 */
justify-content: center;
padding-left: clamp(0.8rem, 2vw, 1.5rem);
padding-right: clamp(0.8rem, 2vw, 1.5rem);
}
/* 标题样式:移动端特有 */
.product-card-title {
font-size: clamp(0.75rem, 1.2vw, 0.875rem);
font-size: clamp(0.8rem, 1.3vw, 1.2rem);
font-weight: 600;
color: #333;
margin-bottom: clamp(0.2rem, 0.3vw, 0.25rem);
/* 最多2行溢出省略避免文字过多挤压 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 35%;
line-height: 1.2;
}
/* 描述样式移动端固定2行高度 */
@@ -106,7 +114,6 @@
color: #656565;
word-break: break-word;
height: 65%;
/* 移动端描述固定高度2行 */
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
@@ -120,7 +127,6 @@
display: flex;
align-items: center;
flex: 0 0 10%;
/* 移动端链接区占比 */
padding: clamp(0.8rem, 2vw, 1.5rem);
}
@@ -151,23 +157,27 @@
.product-card-container {
align-items: stretch;
height: clamp(30vw, 35vw, 480px);
/* PC端容器高度自适应 */
/* 关键修改3PC端同步增大gap间距与通用容器一致 */
gap: clamp(0.6rem, 1vw, 0.8rem);
padding: 0;
}
/* 卡片核心PC端高度自适应 */
/* 外层容器PC端适配高度占满容器 */
.product-card-wrap {
height: 100%;
}
/* 卡片核心PC端调整移除圆角、阴影添加will-change */
.product-card {
background: rgb(242, 243, 245);
border-radius: clamp(0.375rem, 1vw, 0.5rem);
cursor: pointer;
width: calc(25% - clamp(0.3rem, 0.5vw, 0.36rem));
width: 100%; /* 内层卡片占满外层容器 */
height: 100%;
flex: none;
box-shadow: 0 clamp(0.1rem, 0.2vw, 0.125rem)
clamp(0.3rem, 0.8vw, 0.5rem) rgba(0, 0, 0, 0.05);
margin: 0 clamp(0.16rem, 0.24vw, 0.2rem);
margin: 0; /* 保持无margin */
display: flex;
flex-direction: column;
height: 100%;
/* PC端卡片高度继承父容器 */
will-change: transform; /* 优化渲染,避免圆角异常 */
}
/* 卡片hover效果PC端特有 */
@@ -176,6 +186,11 @@
transition: transform 0.3s ease;
}
/* 外层容器hover增强阴影 */
.product-card-wrap:hover {
box-shadow: 0 clamp(0.2rem, 0.4vw, 0.25rem) clamp(0.5rem, 1vw, 0.8rem) rgba(0, 0, 0, 0.08);
}
/* 图片容器PC端固定占比 */
.product-card-img {
display: flex;
@@ -183,7 +198,6 @@
align-items: center;
width: 100%;
flex: 0 0 72%;
/* PC端图片区占比 */
margin-bottom: clamp(0.4rem, 0.6vw, 0.5rem);
overflow: hidden;
border-radius: clamp(0.2rem, 0.4vw, 0.25rem);
@@ -200,8 +214,7 @@
/* 文字容器PC端固定占比 */
.product-card-text {
flex: 0 0 15%;
/* PC端文字区占比 */
/* display: flex; */
display: flex; /* 补充display: flex原代码遗漏 */
flex-direction: column;
justify-content: center;
padding-left: clamp(0.8rem, 2vw, 1.5rem);
@@ -216,8 +229,6 @@
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
/* height: 35%; */
/* PC端标题固定高度 */
line-height: 1.2;
display: flex;
align-items: center;
@@ -228,8 +239,6 @@
font-size: clamp(0.7rem, 1.1vw, 0.9rem);
color: #656565;
word-break: break-word;
/* height: 65%; */
/* PC端描述固定高度2行 */
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
@@ -240,11 +249,10 @@
/* 链接图标容器PC端固定占比 */
.product-card-link {
width: 100%;
/* display: flex; */
/* align-items: center; */
flex: 0 0 12%;
/* PC端链接区占比 */
padding-left: clamp(0.8rem, 2vw, 1.5rem);
display: flex; /* 补充display: flex确保图标垂直居中 */
align-items: center;
}
/* 链接图标PC端特有 */

View File

@@ -1,29 +1,76 @@
.swiper-container {
padding: 0 !important;
}
/* 轮播容器 - 核心:基于视口高度自适应 */
.auto-swiper-container {
width: 100%;
/* 关键:高度 = 视口高度的百分比可调整如60vh=屏幕高度60% */
height: 60vh;
max-height: 800px; /* 限制最大高度(避免大屏过高) */
min-height: 300px; /* 限制最小高度(避免小屏过低) */
overflow: hidden;
margin-bottom: 5.625rem;
}
max-height: 900px;
min-height: 300px;
position: relative;
margin-top:60px;
}
/* 轮播项 - 填充容器高度 */
.auto-swiper-slide {
width: 100%;
height: 100%;
/*height: 100%;*/
display: flex;
align-items: center;
justify-content: center;
background: #333; /* 图片加载前占位 */
}
/* 图片自适应核心:填充屏幕比例高度,保持比例 */
.auto-swiper-slide img {
width: 100%;
height: 100%;
object-fit: cover; /* 优先填充容器,裁剪超出部分(无拉伸) */
/* object-fit: contain; 可选:完整显示图片,不裁剪(可能留黑边) */
object-fit: contain; /* 替换 cover 为 contain完整显示图片 */
display: block;
}
/* 轮播容器保持相对定位 */
.auto-swiper-container {
position: relative;
width: 100%;
}
/* 轮播容器保持相对定位 */
.auto-swiper-container {
position: relative;
width: 100%;
}
/* 指示标容器:居中排列 */
.swiper-pagination {
position: absolute;
bottom: 10%; /* 距离底部的距离,可调整 */
left: 50%;
transform: translateX(-50%);
/* width:100%;
display: flex; */
/* justify-content: center; */
z-index: 10;
}
/* 激活状态:白色长条 */
.swiper-pagination-bullet-active {
background:#fff !important;
}
/* 未激活状态:黑色透明圆点(可调整透明度) */
.swiper-pagination-bullet {
display: inline-block;
width: 16px !important;
height: 16px !important;
border-radius: 8px;
/*background: #555;*/
margin: 0 5px;
/*opacity: 0.8;*/
border: 1px solid #fff;
/*cursor: pointer;*/
}

View File

@@ -63,6 +63,7 @@ a {
.header {
width: 100%;
background: #fff;
height: 60px;
}
.header-img {
margin: 0 auto;

View File

@@ -55,16 +55,12 @@
.product-img-hover img {
width: 100%;
/*max-width: 340px;*/
/* 图片尺寸100%,无区别 */
height: auto;
/* max-height: 70%; */
border-radius: 10px;
}
/* 第一个产品:悬浮图居中上移(仅定位差异) */
.product-img-1 {
top: -10%;

View File

@@ -1,12 +1,13 @@
/* 轮播容器 - 核心:基于视口高度自适应 */
.auto-swiper-container {
width: 100%;
/* 关键:高度 = 视口高度的百分比可调整如60vh=屏幕高度60% */
margin-bottom: 5.625rem;
max-height: 900px;
min-height: 300px;
position: relative;
}
/* 轮播项 - 填充容器高度 */
.auto-swiper-slide {
width: 100%;
@@ -24,7 +25,7 @@
height: 100%;
object-fit: contain; /* 替换 cover 为 contain完整显示图片 */
display: block;
background-color: #f5f5f5; /* 图片未填充区域用浅色背景,避免黑边 */
}
/* 轮播容器保持相对定位 */
@@ -45,9 +46,9 @@
bottom: 10%; /* 距离底部的距离,可调整 */
left: 50%;
transform: translateX(-50%);
width:100%;
display: flex;
justify-content: center;
/* width:100%;
display: flex; */
/* justify-content: center; */
z-index: 10;
}