Skip to content

Commit 4b5fd7d

Browse files
committed
feat: implement modal popup for news items in GlobalQuickReport, enhance CSS for improved layout and user experience
1 parent 60fc15f commit 4b5fd7d

2 files changed

Lines changed: 97 additions & 32 deletions

File tree

scripts/GlobalQuickReport/index.js

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const news = [
1616
},
1717
{
1818
title: '神舟二十号载人飞行任务航天员乘组出征仪式在酒泉卫星发射中心举行',
19-
content: '北京时间2025年4月24日14时25分,神舟二十号载人飞行任务航天员乘组出征仪式在酒泉卫星发射中心问天阁圆梦园广场举行。14时26分,中国载人航天工程总指挥、空间站应用与发展阶段飞行任务总指挥部总指挥长许学强下达“出发”命令,陈冬、陈中瑞、王杰3名航天员在第十个中国航天日当天领命出征。目前,神舟十九号航天员乘组进驻空间站近六个月,正在积极准备迎接即将到来的神舟二十号航天员乘组。55年前的今天,中国第一颗人造地球卫星东方红一号在酒泉卫星发射中心成功发射,吹响了中国人进军太空的号角。22年前,中国首位飞天航天员杨利伟从这里出征太空,实现了中华民族千年飞天梦想。如今,空间站已经建成,登月梦正在从蓝图走向现实,一代代后来者接过接力棒、踏着前人的足迹接力出征,一张蓝图绘到底的中国航天未来可期!',
19+
content: '北京时间2025年4月24日14时25分,神舟二十号载人飞行任务航天员乘组出征仪式在酒泉卫星发射中心问天阁圆梦园广场举行。14时26分,中国载人航天工程总指挥、空间站应用与发展阶段飞行任务总指挥部总指挥长许学强下达"出发"命令,陈冬、陈中瑞、王杰3名航天员在第十个"中国航天日"当天领命出征。目前,神舟十九号航天员乘组进驻空间站近六个月,正在积极准备迎接即将到来的神舟二十号航天员乘组。55年前的今天,中国第一颗人造地球卫星"东方红一号"在酒泉卫星发射中心成功发射,吹响了中国人进军太空的号角。22年前,中国首位飞天航天员杨利伟从这里出征太空,实现了中华民族千年飞天梦想。如今,空间站已经建成,登月梦正在从蓝图走向现实,一代代后来者接过"接力棒"、踏着前人的足迹接力出征,"一张蓝图绘到底"的中国航天未来可期!',
2020
date: '2025-04-24',
2121
},
2222
{
@@ -26,19 +26,14 @@ const news = [
2626
},
2727
{
2828
title: '神舟十九号航天员乘组圆满完成第三次出舱活动',
29-
content: '北京时间2025年3月21日20时50分,经过约7小时的出舱活动,神舟十九号乘组航天员蔡旭哲、宋令东、王浩泽密切协同,在空间站机械臂和地面科研人员的配合支持下,完成了空间站空间碎片防护装置及舱外辅助设施安装、舱外设备设施巡检等任务。出舱航天员蔡旭哲、宋令东已安全返回问天实验舱,出舱活动取得圆满成功。航天员蔡旭哲已完成5次出舱活动,成为目前在舱外执行任务次数最多的中国航天员。神舟十九号航天员乘组的太空出差之旅已近5个月,各项空间科学实(试)验任务进展顺利。按计划,乘组将于1个多月后返回地球家园。',
29+
content: '北京时间2025年3月21日20时50分,经过约7小时的出舱活动,神舟十九号乘组航天员蔡旭哲、宋令东、王浩泽密切协同,在空间站机械臂和地面科研人员的配合支持下,完成了空间站空间碎片防护装置及舱外辅助设施安装、舱外设备设施巡检等任务。出舱航天员蔡旭哲、宋令东已安全返回问天实验舱,出舱活动取得圆满成功。航天员蔡旭哲已完成5次出舱活动,成为目前在舱外执行任务次数最多的中国航天员。神舟十九号航天员乘组的"太空出差之旅"已近5个月,各项空间科学实(试)验任务进展顺利。按计划,乘组将于1个多月后返回地球家园。',
3030
date: '2025-03-21',
3131
},
3232
{
3333
title: '2025年中国载人航天工程将扎实推进空间站应用与发展和载人月球探测两大任务',
3434
content: '2025年,中国载人航天工程将扎实推进空间站应用与发展和载人月球探测两大任务,为推动科技强国、航天强国建设作出更大贡献。目前,中国空间站在轨运行稳定、效益发挥良好,载人月球探测工程登月阶段任务各项研制建设工作按计划稳步推进。空间站建成以来,工程全线密切协同,先后组织完成4次载人飞行、3次货运补给、4次飞船返回任务,5个航天员乘组、15人次在轨长期驻留,累计进行了11次航天员出舱和多次应用载荷出舱,开展多次舱外维修任务,刷新航天员单次出舱活动时长的世界纪录,完成包括2名港澳载荷专家的第四批预备航天员选拔、低成本货物运输系统择优并启动研制、《中国空间站科学研究与应用进展报告》(2024年)发布等工作。与此同时,瞄准2030年前实现中国人首次登陆月球的目标,载人月球探测工程登月阶段任务各项研制建设工作按计划稳步推进。',
3535
date: '2025-03-03',
3636
},
37-
{
38-
title: '中国与巴基斯坦签署选拔训练航天员合作协议 中国空间站将迎来首位外籍航天员造访',
39-
content: '北京时间2025年2月28日,中国载人航天工程办公室与巴基斯坦太空与高层大气研究委员会在巴基斯坦首都伊斯兰堡,正式签署《关于选拔、训练巴基斯坦航天员并参与中国空间站飞行任务的合作协议》,开启了中巴两国在载人航天领域深化合作的新篇章,迈出了中国选拔训练外籍航天员参与中国空间站飞行任务的第一步。北京时间当日13时45分,签字仪式在巴基斯坦总理府举行,在巴基斯坦总理夏巴兹·谢里夫见证下,中国载人航天工程办公室副主任林西强与巴基斯坦太空与高层大气研究委员会主席穆罕默德·优素福·汗签署协议。此次协议的签署,标志着中国政府将首次为外国选拔训练航天员,中国空间站将迎来首位外籍航天员造访。',
40-
date: '2025-02-28',
41-
},
4237
]
4338

4439
const htkjyymfw = [
@@ -105,33 +100,53 @@ function createNewsItem(news = []) {
105100
`<div class="new-item" data-index="${index}">
106101
<div class="title">${item.title}</div>
107102
<div class="date">${item.date}</div>
108-
<div class="new-content-box">
109-
<div class="close-btn"></div>
110-
<div class="children">
111-
<div class="new-box-title">${item.title}</div>
112-
<div class="line"></div>
113-
<p class="new-content">${item.content}</p>
114-
</div>
115-
</div>
116103
</div>`
117104
).join('');
118105

119106
newsContainer.addEventListener('click', (event) => {
120107
const target = event.target.closest('.new-item');
121108
if (target) {
122109
const index = target.getAttribute('data-index');
123-
const box = document.querySelector(`.new-item[data-index="${index}"] .new-content-box`);
124-
document.querySelectorAll('.new-content-box').forEach(item => {
125-
item.style.display = 'none';
126-
});
127-
box.style.opacity = '1';
128-
box.style.transition = 'opacity 0.3s ease-in-out';
129-
box.style.display = 'block';
110+
const newsItem = news[index];
111+
112+
// 移除已存在的弹窗
113+
const existingModal = document.querySelector('.news-modal-overlay');
114+
if (existingModal) {
115+
existingModal.remove();
116+
}
117+
118+
// 创建新的弹窗并添加到body
119+
const modalOverlay = document.createElement('div');
120+
modalOverlay.className = 'news-modal-overlay';
121+
modalOverlay.innerHTML = `
122+
<div class="new-content-box">
123+
<div class="close-btn"></div>
124+
<div class="children">
125+
<div class="new-box-title">${newsItem.title}</div>
126+
<div class="line"></div>
127+
<p class="new-content">${newsItem.content}</p>
128+
</div>
129+
</div>
130+
`;
130131

131-
const closeBtn = box.querySelector('.close-btn');
132+
document.body.appendChild(modalOverlay);
133+
134+
// 显示弹窗
135+
setTimeout(() => {
136+
modalOverlay.style.opacity = '1';
137+
}, 10);
138+
139+
const closeBtn = modalOverlay.querySelector('.close-btn');
132140
closeBtn.addEventListener('click', (e) => {
133141
e.stopPropagation();
134-
box.style.display = 'none';
142+
modalOverlay.remove();
143+
});
144+
145+
// 点击背景关闭弹窗
146+
modalOverlay.addEventListener('click', (e) => {
147+
if (e.target === modalOverlay) {
148+
modalOverlay.remove();
149+
}
135150
});
136151
}
137152
});

styles/GlobalQuickReport/index.css

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,18 @@ body {
9292
}
9393

9494
.page:nth-child(1) .news .new-item .new-content-box {
95+
position: fixed;
9596
display: none;
9697
transition: all 0.3s ease;
97-
position: fixed;
9898
opacity: 0;
99-
width: 100vw;
100-
height: 100vh;
99+
justify-content: center;
100+
align-items: center;
101101
top: 0;
102102
left: 0;
103+
width: 100vw;
104+
height: 100vh;
103105
z-index: 1000;
104106
background-color: rgba(0, 0, 0, 0.5);
105-
will-change: auto;
106107
backdrop-filter: blur(0.5rem);
107108
animation: fade-in-fwd 0.3s ease;
108109
}
@@ -127,15 +128,16 @@ body {
127128
}
128129

129130
.new-content-box .close-btn {
131+
z-index: 9999;
130132
background-image: url("../../assets/images/GlobalQuickReport/CloseBtn.svg");
131133
background-size: contain;
132134
background-repeat: no-repeat;
133135
background-position: center;
134136
width: 8rem;
135137
height: 8rem;
136138
position: absolute;
137-
top: 8rem;
138-
right: 5rem;
139+
top: 0rem;
140+
right: -10rem;
139141
will-change: all;
140142
transition: all 0.3s ease;
141143
animation: rotate-in 0.6s ease-in-out;
@@ -239,8 +241,8 @@ body {
239241

240242
.video-popup {
241243
position: relative;
242-
max-width: 100vw;
243-
max-height: 100vh;
244+
max-width: 75vw;
245+
max-height: 75vh;
244246
}
245247

246248
.video-popup video {
@@ -268,4 +270,52 @@ body {
268270

269271
.close-video-btn:hover {
270272
transform: scale(1.1);
273+
}
274+
275+
/* 新的弹窗样式,直接添加到body下 */
276+
.news-modal-overlay {
277+
position: fixed;
278+
display: flex;
279+
transition: opacity 0.3s ease;
280+
opacity: 0;
281+
justify-content: center;
282+
align-items: center;
283+
top: 0;
284+
left: 0;
285+
width: 100vw;
286+
height: 100vh;
287+
z-index: 1000;
288+
background-color: rgba(0, 0, 0, 0.5);
289+
backdrop-filter: blur(0.5rem);
290+
animation: fade-in-fwd 0.3s ease;
291+
}
292+
293+
.news-modal-overlay .new-content-box {
294+
position: relative;
295+
width: auto;
296+
height: auto;
297+
display: block;
298+
opacity: 1;
299+
background: transparent;
300+
backdrop-filter: none;
301+
animation: none;
302+
}
303+
304+
.news-modal-overlay .new-content-box .children {
305+
position: relative;
306+
top: 0;
307+
left: 0;
308+
transform: none;
309+
background-image: url("../../assets/images/GlobalQuickReport/ModelBg.svg");
310+
background-size: contain;
311+
background-repeat: no-repeat;
312+
background-position: center;
313+
width: 144.49rem;
314+
height: 77.793rem;
315+
padding: 2rem;
316+
padding: 5rem 8rem 5rem 8rem;
317+
display: flex;
318+
flex-direction: column;
319+
justify-content: flex-start;
320+
color: rgba(255, 255, 255, 1);
271321
}

0 commit comments

Comments
 (0)