js实现时间轴自动排列效果

yizhihongxing

下面我将详细讲解如何使用JavaScript实现时间轴自动排列效果。

概述

时间轴是一种将时间点或事件与轴上的点或线连接起来的可视化工具,被广泛应用于各个网站的设计中。自动排列效果指的是时间轴上的点或线可以自动按照时间顺序排列显示。下面我们将分步骤详细介绍如何使用JavaScript实现这个效果。

步骤

1. 准备数据

首先需要准备一个包含时间信息的数据,通常由一个数组或JSON对象表示。例如,一个表示个人经历的时间轴可以定义为:

const data = [
  { year: 2000, event: '出生' }, 
  { year: 2010, event: '上小学' },
  { year: 2015, event: '上初中' },
  { year: 2018, event: '上高中' },
  { year: 2022, event: '毕业' },
];

2. 创建时间轴容器

创建一个容器用来承载时间轴,可以使用HTML和CSS实现。

<div id="timeline"></div>
#timeline {
  width: 600px;
  margin: 20px auto;
  position: relative;
}

3. 在容器中添加时间节点

根据数据中的时间信息,利用JavaScript动态创建时间节点和连接线。节点可以由一个div元素表示,连接线可以由一个伪元素before或after实现(具体实现方法因项目而异)。

function createTimelineNodes(data) {
  const timeline = document.querySelector('#timeline');
  for (let i = 0; i < data.length; i++) {
    const node = document.createElement('div');
    const year = document.createElement('p');
    const event = document.createElement('p');

    node.classList.add('timeline-node');
    year.classList.add('year');
    event.classList.add('event');

    year.innerHTML = data[i].year;
    event.innerHTML = data[i].event;

    node.appendChild(year);
    node.appendChild(event);
    timeline.appendChild(node);
  }
}
.timeline-node {
  width: 20px;
  height: 20px;
  background-color: #ffffff;
  border-radius: 50%;
  border: 3px solid #cccccc;
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

.timeline-node:before {
  content: '';
  position: absolute;
  left: calc(50% - 1.5px);
  top: -20px;
  width: 3px;
  height: 20px;
  background-color: #cccccc;
}

4. 排列时间节点

节点创建完后,需要利用JavaScript将其按照时间从早到晚排序。这里利用数组的sort方法,根据year来排序。

function sortTimelineNodes() {
  const timelineNodes = document.querySelectorAll('.timeline-node');
  const timelineArray = Array.prototype.slice.call(timelineNodes);
  timelineArray.sort(function(a, b) {
    const aYear = a.querySelector('.year').innerHTML;
    const bYear = b.querySelector('.year').innerHTML;
    return aYear - bYear;
  });
  for (let i = 0; i < timelineArray.length; i++) {
    timelineArray[i].style.top = i * 100 + 'px';
  }
}

5. 调用函数

最后,将上述函数调用放在一起,即可实现时间轴自动排列效果。

createTimelineNodes(data);
sortTimelineNodes();

示例

下面是一个含有图片的时间轴示例:

const data = [
  { year: 2000, event: '出生', img: 'https://via.placeholder.com/150x150' }, 
  { year: 2010, event: '上小学', img: 'https://via.placeholder.com/150x150' },
  { year: 2015, event: '上初中', img: 'https://via.placeholder.com/150x150' },
  { year: 2018, event: '上高中', img: 'https://via.placeholder.com/150x150' },
  { year: 2022, event: '毕业', img: 'https://via.placeholder.com/150x150' },
];

function createTimelineNodes(data) {
  const timeline = document.querySelector('#timeline');
  for (let i = 0; i < data.length; i++) {
    const node = document.createElement('div');
    const year = document.createElement('p');
    const event = document.createElement('p');
    const img = document.createElement('img');

    node.classList.add('timeline-node');
    year.classList.add('year');
    event.classList.add('event');
    img.classList.add('img');

    year.innerHTML = data[i].year;
    event.innerHTML = data[i].event;
    img.src = data[i].img;

    node.appendChild(year);
    node.appendChild(event);
    node.appendChild(img);
    timeline.appendChild(node);
  }
}

function sortTimelineNodes() {
  const timelineNodes = document.querySelectorAll('.timeline-node');
  const timelineArray = Array.prototype.slice.call(timelineNodes);
  timelineArray.sort(function(a, b) {
    const aYear = a.querySelector('.year').innerHTML;
    const bYear = b.querySelector('.year').innerHTML;
    return aYear - bYear;
  });
  for (let i = 0; i < timelineArray.length; i++) {
    timelineArray[i].style.top = i * 200 + 'px';
  }
}

createTimelineNodes(data);
sortTimelineNodes();

通过以上代码可以实现一个时间轴节点中包含图片的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现时间轴自动排列效果 - Python技术站

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

相关文章

  • JavaScript定时器常见用法实例分析

    下面就为大家详细讲解“JavaScript定时器常见用法实例分析”的完整攻略。 定时器的基本用法 定时器是JavaScript中的一个重要概念,它允许我们在一段时间之后执行代码。以下是定时器的基本用法示例: // 1秒后弹出提示框 setTimeout(function() { alert("Hello World!"); }, 1000…

    JavaScript 2023年6月10日
    00
  • javascript中setAttribute()函数使用方法及兼容性

    下面是关于JavaScript中setAttribute()函数的使用方法及兼容性的完整攻略: 一、语法概述 setAttribute()函数是一种在HTML和XML文档中设置属性的方法。它有两个参数: 属性名:要设置的属性名称 属性值:要设置的属性值 使用语法如下所示: element.setAttribute(attributeName, attribu…

    JavaScript 2023年5月27日
    00
  • 微信小程序按钮点击动画效果的实现

    下面是关于“微信小程序按钮点击动画效果的实现”的完整攻略: 简介 在微信小程序中,用户交互体验至关重要。为了增强用户的交互体验,为小程序中按钮添加点击动画效果是非常必要的。本节将详细讲解如何实现一个简单的点击动画效果。 实现步骤 1.添加点击事件 首先,我们需要为按钮添加一个点击事件,这个很简单,只需要在 WXML 文件中绑定点击事件即可: <view…

    JavaScript 2023年6月11日
    00
  • 微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)

    微信小程序中,为了提高用户体验,往往需要对一些按钮或表单组件进行防止多次点击或输入内容多次验证,以避免用户重复提交数据或误操作。这时,我们可以使用函数防抖来实现这些效果。 函数防抖是指在一段时间内,多次触发同一事件,只执行一次函数。具体而言,是在延迟时间内,如果再次触发了同一事件,则清空之前的计时器并重新开始计时,直到延迟时间过去后再触发该事件时才会执行真正…

    JavaScript 2023年6月10日
    00
  • JavaScript组件开发完整示例

    下面是JavaScript组件开发完整示例的攻略。 示例说明 示例1:创建一个简单的按钮组件 首先,我们要创建一个简单的按钮组件。这个组件可以接受一个标题和一个点击事件处理函数作为参数。组件将呈现一个按钮,当点击按钮时,将调用事件处理程序。以下是组件的HTML和JavaScript代码。 <button class="my-button&qu…

    JavaScript 2023年5月27日
    00
  • webpack HappyPack实战详解

    webpack HappyPack实战详解 什么是 HappyPack HappyPack是一个webpack插件,可以将代码在多个子进程中并行编译,提高构建的速度。 HappyPack使用 使用步骤: 安装 HappyPack: npm install happypack -D 引入 HappyPack: js const HappyPack = requ…

    JavaScript 2023年5月28日
    00
  • javascript获取select值的方法完整实例

    关于JavaScript获取Select的值,你可以按照下面的步骤实现: 第一步:获取Select元素 要获取Select元素,可以使用document.getElementById()方法,传入Select元素的ID作为参数,如下所示: let select = document.getElementById("mySelect"); …

    JavaScript 2023年6月10日
    00
  • 什么是cookie?js手动创建和存储cookie

    关于”什么是cookie”的讲解: Cookie指的是一种服务器发送给浏览器的小型文本文件,在浏览器端保存用户的登录状态、购物车信息等。在下次用户访问同样的网站时,浏览器会将存在本地的Cookie信息发送给服务器,服务器根据接收到的Cookie信息来进行相应的处理。 Cookie有以下特点:- Cookie由服务器生成,浏览器存储。- 每次请求时需要将Coo…

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