前端原生构建动态焦点卡片切换组件


在现代网页设计中,提供一个既美观又实用的用户界面(UI)是吸引和保留用户的关键。今天,我们将深入探讨如何使用HTML、CSS以及JavaScript来创建一个名为“动态焦点卡片切换(Dynamic Focus Card Switching)”的交互式组件。这个组件非常适合用来展示产品特性、图片集或任何你想要突出显示的内容,并能为你的网站增添一份独特的魅力。

理解动态焦点卡片切换

动态焦点卡片切换是一种用户界面元素,它允许用户通过点击不同的卡片来浏览内容。当某个卡片被选中时,该卡片会扩展以占据更多的空间,并且展示详细信息,而其他卡片则相应地缩小。这种交互方式提供了直观的视觉反馈,使用户的注意力能够集中在当前选中的项目上,同时保持了页面的整体美感和流畅性。

技术栈

为了实现我们的目标,我们将利用以下技术:

  • HTML5:用于定义网页结构。
  • CSS3:用于设置样式,包括响应式设计。
  • JavaScript (ES6):用于处理用户交互逻辑。

逐步指南

1. HTML 结构

首先,我们需要创建基本的HTML结构。每个卡片都被放置在一个div.container容器内,它们都具有panel类。其中一个卡片默认拥有active类,表示它是当前展开的卡片。

DOCTYPE html>
DOCTYPE html>
<html lang="en">
<head>
    
    <meta charset="UTF-8" />
    
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    
    <link rel="stylesheet" href="style.css" />
    
    <title>Expanding Cardstitle>
head>
<body>

<div class="container">
    
    <div class="panel active" style="background-image: url('https://images.pexels.com/photos/32224796/pexels-photo-32224796.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2')">
        
        <h3>海边民宿h3>
    div>
    <div class="panel" style="background-image: url('https://images.pexels.com/photos/32347279/pexels-photo-32347279.png?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2')">
        <h3>沙滩h3>
    div>
    <div class="panel" style="background-image: url('https://images.pexels.com/photos/3426867/pexels-photo-3426867.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2')">
        <h3>大海h3>
    div>
    <div class="panel" style="background-image: url('https://images.pexels.com/photos/2923590/pexels-photo-2923590.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2')">
        <h3>冲浪h3>
    div>
    <div class="panel" style="background-image: url('https://images.pexels.com/photos/18303333/pexels-photo-18303333.jpeg')">
        <h3>海边城堡h3>
    div>
div>


<script src="script.js">script>
body>
html>

2. CSS 样式

接下来,我们定义CSS来控制卡片的外观和行为。这包括了卡片的基础样式、激活状态下的样式以及媒体查询以确保在移动设备上的良好表现。

/* 引入 Google 字体 Muli */
@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');

/* 设置盒模型为 border-box,方便布局 */
* {
  box-sizing: border-box;
}

/* 页面基础样式:全屏居中显示 */
body {
  font-family: 'Muli', sans-serif;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh; /* 全屏高度 */
  overflow: hidden; /* 隐藏滚动条 */
  margin: 0;
}

/* 容器设置:卡片容器 */
.container {
  display: flex;
  width: 90vw; /* 宽度占视口的90% */
}

/* 每个面板的基本样式 */
.panel {
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  height: 80vh; /* 高度为视口高度的80% */
  border-radius: 50px;
  color: #fff;
  cursor: pointer;
  flex: 0.5; /* 初始较小宽度 */
  margin: 10px;
  position: relative;

  /* 过渡动画效果 */
  transition: all 700ms ease-in;
}

/* 面板标题样式,默认隐藏 */
.panel h3 {
  font-size: 24px;
  position: absolute;
  bottom: 20px;
  left: 20px;
  margin: 0;
  opacity: 0;
}

/* 当面板被激活时的样式 */
.panel.active {
  flex: 5; /* 扩展为主面板 */
}

/* 激活状态下的文字渐显效果 */
.panel.active h3 {
  opacity: 1;
  transition: opacity 0.3s ease-in 0.4s;
}

/* 响应式设计:小屏幕适配 */
@media (max-width: 480px) {
  .container {
    width: 100vw; /* 占满整个视口宽度 */
  }

  /* 隐藏第4和第5个面板,避免拥挤 */
  .panel:nth-of-type(4),
  .panel:nth-of-type(5) {
    display: none;
  }
}

3. JavaScript 功能

最后,添加一些JavaScript代码来实现交互逻辑。每当用户点击某个卡片时,我们会移除所有卡片的active类,然后给被点击的卡片添加active类。

// 获取所有带有 'panel' 类的元素
const panels = document.querySelectorAll('.panel');

// 为每个面板添加点击事件监听器
panels.forEach(panel => {
    panel.addEventListener('click', () => {
        // 当面板被点击时,首先移除所有面板的 'active' 类
        removeActiveClasses();
        // 然后给被点击的面板添加 'active' 类
        panel.classList.add('active');
    });
});

/**
 * 移除所有面板的 'active' 类
 */
function removeActiveClasses() {
    panels.forEach(panel => {
        panel.classList.remove('active');
    });
}

结语

通过结合HTML、CSS和JavaScript,我们可以轻松创建出既美观又功能强大的用户界面组件。“动态焦点卡片切换”不仅提升了用户体验,还增加了网页的设计感。希望这篇教程能为你带来灵感,并帮助你在自己的项目中应用类似的技术。无论你是网页设计师还是前端开发者,掌握这些技巧都将对你的职业生涯大有裨益。让我们一起打造更加引人入胜的数字体验吧!

你可能感兴趣的:(Web前端开发,html5,css3,javascript,前端,chrome,safari)