You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

324 lines
7.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 技术服务板块模板
*
* 显示三个技术服务卡片7x24h响应、认证售前售后技术人员、智能ESS守护者
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 获取短代码参数
global $technical_service_shortcode_atts;
$atts = $technical_service_shortcode_atts;
// 设置默认值
$section_id = !empty($atts['id']) ? esc_attr($atts['id']) : 'nenghui-technical-service-' . uniqid();
$section_class = !empty($atts['class']) ? esc_attr($atts['class']) : '';
$title = !empty($atts['title']) ? esc_html($atts['title']) : 'Reliable Technical Service';
$subtitle = !empty($atts['subtitle']) ? esc_html($atts['subtitle']) : 'Enhance Experience for Customers';
$show_animation = !empty($atts['show_animation']) && $atts['show_animation'] !== 'false';
// 服务数据
$services = array(
array(
'icon' => get_template_directory_uri() . '/assets/images/24-h.webp',
'title' => '7x24h Respond',
'description' => 'We provide in-time response support to our customers'
),
array(
'icon' => get_template_directory_uri() . '/assets/images/Certified Pre-sales.webp',
'title' => 'Certified Pre-sales & Post-sales Technical Personnel',
'description' => 'Well trained technical experts to serve you online'
),
array(
'icon' => get_template_directory_uri() . '/assets/images/Intelligent ESS Guardian.webp',
'title' => 'Intelligent ESS Guardian',
'description' => 'Transformer Monitoring Proactively Eliminates 95% Operational Risks'
)
);
?>
<section id="<?php echo $section_id; ?>" class="technical-service-section <?php echo $section_class; ?>">
<div class="container">
<!-- 标题区域 -->
<div class="section-header text-center <?php echo $show_animation ? 'fade-in-up' : ''; ?>">
<h2 class="section-title"><?php echo $title; ?></h2>
<p class="section-subtitle"><?php echo $subtitle; ?></p>
</div>
<!-- 服务卡片网格 -->
<div class="services-grid">
<?php foreach ($services as $index => $service): ?>
<div class="service-card <?php echo $show_animation ? 'fade-in-up' : ''; ?>"
<?php if ($show_animation): ?>data-delay="<?php echo ($index + 1) * 200; ?>"<?php endif; ?>>
<div class="service-icon">
<img src="<?php echo esc_url($service['icon']); ?>" alt="<?php echo esc_attr($service['title']); ?>" />
</div>
<div class="service-content">
<h3 class="service-title"><?php echo esc_html($service['title']); ?></h3>
<div class="service-divider"></div>
<p class="service-description"><?php echo esc_html($service['description']); ?></p>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</section>
<style>
.technical-service-section {
padding: 80px 0;
background-color: #f8f9fa;
}
.technical-service-section .container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
.section-header {
margin-bottom: 60px;
}
.section-title {
font-size: 2.5rem;
font-weight: 700;
color: #2c3e50;
margin-bottom: 15px;
line-height: 1.2;
}
.section-subtitle {
font-size: 1.2rem;
color: #7f8c8d;
margin: 0;
font-weight: 400;
}
.services-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 40px;
align-items: stretch;
}
.service-card {
background: #ffffff;
border-radius: 0;
padding: 40px 30px;
text-align: center;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
border-bottom: 4px solid transparent;
}
.service-card:hover {
transform: translateY(-8px);
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);
border-bottom: 4px solid;
border-image: linear-gradient(90deg, #009194 0%, #116598 100%) 1;
transition: all 0.3s ease;
}
.service-icon {
margin-bottom: 30px;
position: relative;
text-align: left;
}
.service-icon img {
width: 80px;
height: 80px;
object-fit: contain;
transition: all 0.3s ease;
filter: grayscale(0.2);
display: block;
}
.service-card:hover .service-icon img {
filter: grayscale(0) brightness(1.1);
transform: scale(1.05);
transition: all 0.3s ease;
}
/* 为图标添加渐变遮罩效果 */
.service-card:hover .service-icon::after {
content: '';
position: absolute;
top: 0;
left: 15%;
transform: translateX(-50%);
width: 80px;
height: 80px;
background: linear-gradient(135deg, rgba(0, 145, 148, 0.2) 0%, rgba(17, 101, 152, 0.2) 100%);
border-radius: 50%;
pointer-events: none;
transition: all 0.3s ease;
}
.service-content {
position: relative;
text-align: left;
}
.service-title {
font-size: 1.3rem;
font-weight: 600;
color: #2c3e50;
margin-bottom: 20px;
line-height: 1.4;
min-height: 60px;
display: flex;
align-items: center;
justify-content: flex-start;
}
.service-divider {
width: 60px;
height: 3px;
background: #e9ecef;
margin: 0 0 20px 0;
border-radius: 2px;
transition: all 0.3s ease;
}
.service-card:hover .service-divider {
background: linear-gradient(90deg, #009194 0%, #116598 100%);
width: 80px;
transition: all 0.3s ease;
}
.service-description {
font-size: 1rem;
color: #6c757d;
line-height: 1.6;
margin: 0;
text-align: left;
}
/* 动画效果 */
.fade-in-up {
opacity: 0;
transform: translateY(30px);
animation: fadeInUp 0.8s ease forwards;
}
.fade-in-up[data-delay] {
animation-delay: var(--delay, 0s);
}
@keyframes fadeInUp {
to {
opacity: 1;
transform: translateY(0);
}
}
/* 响应式设计 */
@media (max-width: 992px) {
.technical-service-section {
padding: 60px 0;
}
.services-grid {
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.section-title {
font-size: 2.2rem;
}
.service-card {
padding: 35px 25px;
}
}
@media (max-width: 768px) {
.technical-service-section {
padding: 50px 0;
}
.section-header {
margin-bottom: 40px;
}
.section-title {
font-size: 2rem;
}
.section-subtitle {
font-size: 1.1rem;
}
.services-grid {
grid-template-columns: 1fr;
gap: 25px;
}
.service-card {
padding: 30px 20px;
}
.service-title {
font-size: 1.2rem;
min-height: 50px;
}
}
@media (max-width: 480px) {
.technical-service-section .container {
padding: 0 15px;
}
.section-title {
font-size: 1.8rem;
}
.service-icon img {
width: 70px;
height: 70px;
}
.service-card:hover .service-icon::after {
width: 70px;
height: 70px;
}
}
</style>
<script>
// 动画初始化
document.addEventListener('DOMContentLoaded', function() {
const animatedElements = document.querySelectorAll('.fade-in-up');
// 设置动画延迟
animatedElements.forEach(function(element) {
const delay = element.getAttribute('data-delay');
if (delay) {
element.style.setProperty('--delay', delay + 'ms');
}
});
// 滚动触发动画
const observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.style.animationPlayState = 'running';
}
});
}, {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
});
animatedElements.forEach(function(element) {
observer.observe(element);
});
});
</script>