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

下面我将详细讲解如何使用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日

相关文章

  • js 面向对象学习笔记

    关于JS面向对象的学习,我们可以分为以下步骤: 1. 了解什么是面向对象编程 面向对象编程(OOP)是一种编程范式或编程风格,其主要思想是通过类和实例来描述和组织代码,将数据和行为封装在对象内部,对外提供接口进行访问和操作。 2. 学习面向对象的基本术语 在 OOP 中,有以下基本概念需要了解: 类(Class):定义对象的属性和方法的蓝图 对象(Objec…

    JavaScript 2023年5月18日
    00
  • vue3中路由传参query、params及动态路由传参详解

    针对vue3中的路由传参query、params及动态路由传参,我来为大家做一份详细的攻略。 一、前置知识 Vue-router Vue提供了一款官方的路由插件Vue-router,可以方便的实现SPA应用的路由管理。若未安装Vue-router,可以通过以下命令进行安装: npm install vue-router 动态路由 动态路由是 vue-rout…

    JavaScript 2023年6月11日
    00
  • Javascript入门学习第四篇 js对象和数组第1/2页

    下面是针对“Javascript入门学习第四篇 js对象和数组第1/2页”的完整攻略: Javascript对象和数组入门 什么是对象 在Javascript中,对象(Object)是指一组属性和方法的集合。每个属性都是由键名和键值组成的,而方法则是一段特殊的函数。 对象可以用花括号括起来,其中每个属性或方法都用逗号隔开。例如: let person = {…

    JavaScript 2023年5月27日
    00
  • JavaScript函数参数的传递方式详解

    下面是JavaScript函数参数的传递方式的详细讲解: 函数的参数传递方式 在JavaScript中,函数的参数可以通过以下三种方式进行传递: 值传递 (call by value) 传递的是一个值的副本,函数内部对传递进来的值进行修改不会影响原来的值。例如: function foo(num) { num = 5; console.log(num); /…

    JavaScript 2023年5月27日
    00
  • javascript cookie的基本操作(添加和删除)

    Javascript Cookie 的基本操作 添加 Cookie 以下是添加Cookie的步骤: 创建一个 Date 对象用于设置 Cookie 过期时间。 将 Cookie 信息存储到一个变量中,变量必须是一个字符串。 使用 document.cookie 将 Cookie 写入浏览器的 Cookie 中。 以下是一个简单的示例,设置一个名为 usern…

    JavaScript 2023年6月11日
    00
  • JavaScript变量声明var,let.const及区别浅析

    JavaScript变量声明var,let,const及区别浅析 在JavaScript中,我们可以使用 var,let 和 const 关键字来声明变量,但这些关键字的用法和区别是比较容易混淆的。本文将对这三种关键字进行详细讲解。 var 在ES6之前,JavaScript中只有 var 这一个声明变量的关键字。var 关键字声明的变量作用域是函数级别的。…

    JavaScript 2023年6月10日
    00
  • createElement动态创建HTML对象脚本代码

    当我们需要在网页中动态创建HTML元素时,可以使用document.createElement()方法,其语法格式为: document.createElement(tagName) 其中tagName是指要创建的HTML元素的标签名,比如div,p,ul等。 接下来,我们来具体介绍使用createElement动态创建HTML对象的完整攻略: 1. 创建H…

    JavaScript 2023年6月10日
    00
  • Go语言实现简单的一个静态WEB服务器

    一、说明 本文将详细讲解如何使用Go语言实现一个简单的静态WEB服务器。 二、实现步骤 创建HTTP服务器 首先,我们要创建一个HTTP服务器。可以使用内置的net/http包来创建一个HTTP服务器,代码如下: package main import ( "net/http" ) func main() { http.Handle(&q…

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