手把手教你实现一个JavaScript时间轴组件

yizhihongxing

下面是“手把手教你实现一个JavaScript时间轴组件”的完整攻略:

1. 确定时间轴的基本结构

首先,我们需要确定时间轴的基本结构。时间轴通常由以下部分组成:

  1. 时间轴的标题,用于简要介绍时间轴的内容;
  2. 时间轴的标记,用于标注每个时间点的名称、时间、描述等信息;
  3. 时间轴的箭头,表示时间轴的方向。

时间轴的基本HTML结构如下所示:

<div class="timeline">
  <h1 class="timeline-title">时间轴标题</h1>
  <ul class="timeline-markers">
    <li class="timeline-marker">
      <div class="timeline-marker-content">
        <h2>标记标题</h2>
        <p>标记描述</p>
        <span class="timeline-marker-time">时间戳</span>
      </div>
    </li>
  </ul>
  <div class="timeline-arrow"></div>
</div>

2. 定义样式

接下来,我们需要定义时间轴的样式。这里只提供基本样式,可以根据需要自行调整。主要包括以下几个部分:

  1. 时间轴的颜色和宽度;
  2. 时间轴的标题和标记的样式;
  3. 时间轴的箭头的样式。
.timeline {
  position: relative;
  margin-bottom: 50px;
  padding: 50px 20px 0;
  border-top: 2px solid #ccc;
  border-bottom: 2px solid #ccc;
}

.timeline-title {
  font-size: 28px;
  font-weight: bold;
  margin-bottom: 30px;
  text-align: center;
}

.timeline-markers {
  margin: 0;
  padding: 0;
  list-style: none;
  position: relative;
}

.timeline-marker {
  position: relative;
}

.timeline-marker:before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: 15px;
  height: 15px;
  background-color: #ccc;
  border: 2px solid #fff;
  border-radius: 50%;
  transition: all 0.3s ease-in-out;
  z-index: 1;
}

.timeline-marker:hover:before,
.timeline-marker.active:before {
  background-color: #007bff;
  border-color: #007bff;
}

.timeline-marker:after {
  content: "";
  position: absolute;
  left: 7.5px;
  top: 15px;
  width: 0;
  height: 100%;
  border-left: 2px solid #ccc;
}

.timeline-marker-content {
  position: relative;
  margin-bottom: 30px;
}

.timeline-marker-content h2 {
  font-size: 18px;
  font-weight: bold;
  margin-bottom: 20px;
}

.timeline-marker-content p {
  font-size: 14px;
  line-height: 1.5;
}

.timeline-marker-time {
  display: block;
  font-size: 14px;
  color: #ccc;
  margin-top: 10px;
}

.timeline-arrow {
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  border: 20px solid transparent;
  border-top-color: #ccc;
  z-index: 2;
}

3. 定义JavaScript组件

最后,我们需要定义JavaScript组件,用于动态生成时间轴中的标记。主要包括以下几个功能:

  1. 初始化时间轴,设置标题和箭头;
  2. 添加标记,包括标记的标题、描述、时间等信息;
  3. 切换标记,根据用户点击的标记切换状态;
  4. 点击标记,滚动到对应标记的位置。
class Timeline {
  constructor(selector) {
    this.timeline = document.querySelector(selector);
    this.title = this.timeline.querySelector(".timeline-title");
    this.markers = this.timeline.querySelector(".timeline-markers");
    this.arrow = this.timeline.querySelector(".timeline-arrow");
    this.activeMarker = null;

    this.init();
  }

  init() {
    this.titleText = this.title.textContent;
    this.title.innerHTML = "";
    this.arrow.style.borderTopColor = getComputedStyle(this.arrow)["color"];

    window.addEventListener("resize", this.update.bind(this));
  }

  createMarker(options) {
    const marker = document.createElement("li");
    marker.classList.add("timeline-marker");

    const markerContent = document.createElement("div");
    markerContent.classList.add("timeline-marker-content");
    marker.appendChild(markerContent);

    const markerTitle = document.createElement("h2");
    markerTitle.textContent = options.title;
    markerContent.appendChild(markerTitle);

    const markerDescription = document.createElement("p");
    markerDescription.textContent = options.description;
    markerContent.appendChild(markerDescription);

    const markerTime = document.createElement("span");
    markerTime.classList.add("timeline-marker-time");
    markerTime.textContent = options.time;
    markerContent.appendChild(markerTime);

    marker.addEventListener("click", () => this.switchMarker(marker));
    this.markers.appendChild(marker);

    if (!this.activeMarker) {
      this.switchMarker(marker);
    }
  }

  update() {
    this.arrow.style.borderTopColor = getComputedStyle(this.arrow)["color"];

    if (this.activeMarker) {
      const offset =
        this.activeMarker.offsetTop - this.timeline.offsetTop - 30;
      this.timeline.scrollTop = offset;
    }
  }

  switchMarker(marker) {
    if (this.activeMarker) {
      this.activeMarker.classList.remove("active");
    }

    marker.classList.add("active");
    this.activeMarker = marker;
    this.update();
  }
}

const myTimeline = new Timeline(".timeline");

myTimeline.createMarker({
  title: "标记1",
  description: "这是标记1的描述",
  time: "2021-07-01",
});

myTimeline.createMarker({
  title: "标记2",
  description: "这是标记2的描述",
  time: "2021-07-03",
});

以上就是实现JavaScript时间轴组件的完整攻略。下面是两个示例:

示例一

const myTimeline = new Timeline(".timeline");

myTimeline.createMarker({
  title: "标记1",
  description: "这是标记1的描述",
  time: "2021-07-01",
});

myTimeline.createMarker({
  title: "标记2",
  description: "这是标记2的描述",
  time: "2021-07-03",
});

该示例创建一个时间轴,包含两个标记。第一个标记的标题为“标记1”,描述为“这是标记1的描述”,时间为“2021-07-01”;第二个标记的标题为“标记2”,描述为“这是标记2的描述”,时间为“2021-07-03”。

示例二

const myTimeline = new Timeline(".timeline");

myTimeline.createMarker({
  title: "标记1",
  description: "这是标记1的描述",
  time: "2021-07-01",
});

myTimeline.createMarker({
  title: "标记2",
  description: "这是标记2的描述",
  time: "2021-07-03",
});

myTimeline.createMarker({
  title: "标记3",
  description: "这是标记3的描述",
  time: "2021-07-05",
});

该示例创建一个时间轴,包含三个标记。第一个标记的标题为“标记1”,描述为“这是标记1的描述”,时间为“2021-07-01”;第二个标记的标题为“标记2”,描述为“这是标记2的描述”,时间为“2021-07-03”;第三个标记的标题为“标记3”,描述为“这是标记3的描述”,时间为“2021-07-05”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你实现一个JavaScript时间轴组件 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详细介绍HTTP Cookie

    详细介绍HTTP Cookie HTTP Cookie,通常简称Cookie,是指由Web服务器发送给客户端浏览器的一小段文本,浏览器将其存储到本地,稍后再发送给同一服务器。Cookie 可以帮助服务器记录用户的状态信息,实现用户的个性化设置,也可以保持用户登录状态,提高用户体验等。本文将详细介绍 HTTP Cookie 的相关知识点。 Cookie的组成 …

    JavaScript 2023年6月11日
    00
  • JS使用replace()方法和正则表达式进行字符串的搜索与替换实例

    下面进行详细的讲解。 1. replace()方法和正则表达式概述 在JS中,字符串是一种常见的数据类型。在处理字符串过程中,有时候我们需要对字符串进行搜索和替换操作。JS提供了replace()方法,可以用来替换字符串中的指定字符或子串。而在进行字符串的搜索和匹配时,我们通常会使用正则表达式。 正则表达式是一种用来描述字符模式的语法规则。用正则表达式可以检…

    JavaScript 2023年5月28日
    00
  • js判断一个对象是数组(函数)的方法实例

    下面是关于“js判断一个对象是数组(函数)的方法实例”的完整攻略。 判断一个对象是数组的方法 在 JavaScript 中判断一个对象是否为数组的方法有很多种,下面介绍两种比较常用的方法。 方法一:使用 Array.isArray() 使用 Array.isArray() 可以判断一个对象是否为数组,同时可以避免使用 typeof 判断的弊端。 示例代码如下…

    JavaScript 2023年5月27日
    00
  • Javascript实现div的toggle效果实例分析

    下面我将为大家讲解如何使用JavaScript实现div的toggle效果,并提供两个示例说明。 1. 前言 Javascript是一种广泛使用的脚本语言,它被用于在Web页面中创建动态和交互式效果。本文将讲解如何使用Javascript实现div的toggle效果。 2. div的toggle效果是什么 当我们点击一个元素时,可以让另一个元素显示或隐藏。一…

    JavaScript 2023年5月28日
    00
  • JavaScript实现的日期控件具体代码

    下面详细讲解一下如何使用JavaScript实现一个日期控件的具体代码。 步骤一:HTML代码编写 首先,在HTML文件中创建一个input元素,用来显示选中的日期,同时给它一个id值。 <input type="text" id="dateInput"> 步骤二:CSS样式设置 接下来,给这个input元…

    JavaScript 2023年5月27日
    00
  • 深入理解JavaScript系列(15) 函数(Functions)

    深入理解JavaScript系列(15) 函数(Functions)攻略 什么是函数? 函数是一段可复用的程序代码,用于执行特定的任务或计算。在JavaScript中,函数通常用于封装可重用的代码逻辑、数据处理或事件处理等。 函数的定义 在JavaScript中,函数有多种定义方式,下面是其中的三种常见方式: 函数声明 函数声明是一种直接定义函数的方式,它可…

    JavaScript 2023年5月18日
    00
  • JavaScript 数据类型详解

    JavaScript 数据类型详解 简介 JavaScript 是一种弱类型、动态类型的编程语言,数据类型非常多样化。本文将从基本数据类型、对象类型和特殊数据类型三个方面详细介绍 JavaScript 中的数据类型。 基本数据类型 数值型(Number) 数值型是 JavaScript 中最基本的数据类型。它可以表示整数和浮点数。JavaScript 使用 …

    JavaScript 2023年5月17日
    00
  • Javascript数组的 forEach 方法详细介绍

    下面我将为您详细讲解“Javascript数组的 forEach 方法详细介绍”的完整攻略。 什么是 JavaScript 数组的 forEach 方法? JavaScript 中的数组是一组含有相同类型的数据的集合。forEach() 是 JavaScript 中内置的数组方法,可以帮助我们遍历数组并对每个元素执行一个特定的操作,例如修改、删除或输出数组元…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部