原生 JS+CSS+HTML 实现时序图的方法

yizhihongxing

要使用原生 JS+CSS+HTML 实现时序图,需要经过以下步骤:

1. 定义 HTML 结构

一个时序图可以分为多个时序帧,每个时序帧可以包含多个参与者。因此,我们首先需要定义 HTML 结构来承载这些信息。比如,可以使用以下 HTML 结构:

<div class="sequence-diagram">
  <div class="sequence-frame">
    <div class="sequence-participant">A</div>
    <div class="sequence-participant">B</div>
    <div class="sequence-participant">C</div>
  </div>

  <div class="sequence-frame">
    <div class="sequence-participant">A</div>
    <div class="sequence-participant">B</div>
    <div class="sequence-participant">C</div>
  </div>

  <!-- more frames -->
</div>

在上面的 HTML 结构中,我们定义了一个 sequence-diagram 容器,用于包含整个时序图。每个时序帧都被定义为一个 sequence-frame,其中包含了多个参与者,即 sequence-participant。您可以添加更多 HTML 元素来构建您想要的时序图。

2. 使用 CSS 绘制样式

为了让我们的时序图更加美观、易于阅读,我们可以使用 CSS 属性定义样式。以下是一个基本的 CSS 样式示例:

.sequence-diagram {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.sequence-frame {
  display: flex;
  align-items: center;
}

.sequence-participant {
  width: 100px;
  height: 50px;
  border: 1px solid #000;
  margin-right: 20px;
  text-align: center;
  line-height: 50px;
  font-size: 20px;
}

在上述 CSS 样式中,我们对容器 sequence-diagram 和参与者 sequence-participant 分别定义了样式。您可以修改这些样式以达到您自己的风格和需求。

3. 使用 JS 添加交互功能

最后,我们可以使用 JavaScript 为我们的时序图添加交互功能。例如,您可以使用事件监听器、动画等功能来实现以下功能:

  1. 点击某个参与者后,显示该参与者在该帧中的所有消息;
  2. 拖动某个参与者,调整其在序列图中的位置。

以下是一个示例 JavaScript 代码,实现了一个基本的事件监听器:

const sequenceFrames = document.querySelectorAll('.sequence-frame');
sequenceFrames.forEach(frame => {
  const participants = frame.querySelectorAll('.sequence-participant');
  participants.forEach(participant => {
    participant.addEventListener('click', () => {
      alert(`Clicked on participant ${participant.innerText}`);
    });
  });
});

在上面的 JavaScript 示例中,我们获取了所有的时序帧和参与者,为参与者的 click 事件添加了一个监听器,在点击时提示用户点击的是哪个参与者。您可以根据需求自行修改监听器的操作。

示例说明

下面为您提供两个示例说明。

示例一:瀑布流模式

以下是一个示例,展示了如何使用原生 JS+CSS+HTML 实现一个简单的瀑布流模式的时序图:

<div class="sequence-diagram">
  <div class="sequence-frame">
    <div class="sequence-participant">A</div>
    <div class="sequence-participant">B</div>
  </div>

  <div class="sequence-frame">
    <div class="sequence-participant">B</div>
    <div class="sequence-participant">C</div>
  </div>

  <div class="sequence-frame">
    <div class="sequence-participant">C</div>
    <div class="sequence-participant">D</div>
  </div>

  <div class="sequence-frame">
    <div class="sequence-participant">D</div>
    <div class="sequence-participant">E</div>
  </div>
</div>
.sequence-frame {
  display: flex;
  align-items: flex-start;
}

.sequence-participant {
  width: 50px;
  height: 50px;
  border-radius: 25px;
  border: 1px solid #000;
  margin-right: 50px;
  text-align: center;
  line-height: 50px;
  font-size: 20px;
  transition: all 0.5s ease-out;
}

.sequence-participant.active {
  transform: translateY(70px);
  border-color: #f00;
  background-color: #f00;
  color: #fff;
}
const sequenceFrames = document.querySelectorAll('.sequence-frame');
sequenceFrames.forEach(frame => {
  const participants = frame.querySelectorAll('.sequence-participant');
  participants.forEach(participant => {
    participant.addEventListener('click', () => {
      participants.forEach(p => {
        p.classList.remove('active');
      });
      participant.classList.add('active');
    });
  });
});

在上面的示例中,我们为每个参与者添加了一个圆形的边框,用于区分不同的参与者。当用户点击某个参与者时,该参与者会“飞”到该时序帧的下方,并变为红色。您可以参考这个示例自己制作更加复杂的时序图。

示例二:双方通信模式

以下是另一个示例,展示了如何使用原生 JS+CSS+HTML 实现双方通信的时序图:

<div class="sequence-diagram">
  <div class="sequence-frame">
    <div class="sequence-participant">A</div>
    <div class="sequence-participant">B</div>
  </div>

  <div class="sequence-frame">
    <div class="sequence-participant">A</div>
    <div class="sequence-participant">B</div>
  </div>

  <div class="sequence-frame">
    <div class="sequence-participant">A</div>
    <div class="sequence-participant">B</div>
  </div>
</div>
.sequence-frame {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px;
}

.sequence-participant {
  width: 100px;
  height: 50px;
  border: 1px solid #000;
  margin-right: 20px;
  text-align: center;
  line-height: 50px;
  font-size: 20px;
  position: relative;
}

.sequence-participant:after {
  content: "";
  display: block;
  width: 20px;
  height: 10px;
  border-top: 1px solid #000;
  border-right: 1px solid #000;
  transform: rotate(-45deg);
  position: absolute;
  bottom: -15px;
  left: 50%;
  margin-left: -10px;
}

.sequence-participant.active:after {
  border-color: #f00;
}
const sequenceFrames = document.querySelectorAll('.sequence-frame');
let activeParticipant = null;

sequenceFrames.forEach(frame => {
  const participants = frame.querySelectorAll('.sequence-participant');

  participants.forEach(participant => {
    if (participant.innerText === 'A') {
      participant.classList.add('active');
      activeParticipant = participant;
    } else {
      participant.classList.add('disabled');
    }
    participant.addEventListener('click', () => {
      if (!participant.classList.contains('disabled')) {
        participants.forEach(p => {
          p.classList.remove('active');
        });
        participant.classList.add('active');
        activeParticipant.classList.add('disabled');
        activeParticipant = participant;
      }
    });
  });
});

在上面的示例中,我们为每个参与者添加了一个箭头,用于表示其向另一个参与者发送信息。当用户点击某个参与者时,该参与者会变为红色,并且禁用上一个活动参与者,表示信息的发送方和接收方已经交换。您可以参考这个示例自己制作更加复杂的时序图。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生 JS+CSS+HTML 实现时序图的方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS教程(2):通过实例学习CSS背景

    下面是详细的攻略: CSS教程(2):通过实例学习CSS背景 1. 学习CSS背景概述 CSS的背景属性是页面设计中非常重要的一部分,我们可以通过CSS来改变元素的背景颜色、背景图片、背景位置以及背景的重复方式等。在学习CSS背景时,我们需要掌握的核心概念有以下四点: background-color:元素背景的颜色 background-image:元素背…

    css 2023年6月9日
    00
  • 第一篇初识bootstrap

    初识Bootstrap Bootstrap是Twitter公司开发的一个前端开发框架,具有响应式设计和易于使用的特点。本文介绍Bootstrap的初步使用。 安装 Bootstrap的最新版本可以从官方网站得到(https://getbootstrap.com/)。在下载页面中,可以选择下载完整的源代码或者只下载预编译的文件来使用。 如果你想在HTML页面中…

    css 2023年6月11日
    00
  • Javascript Bootstrap的网格系统,导航栏和轮播详解

    关于Javascript Bootstrap的网格系统、导航栏和轮播的完整攻略,我将从以下几个方面进行详细讲解: 什么是Bootstrap Bootstrap网格系统 Bootstrap导航栏 Bootstrap轮播 1. 什么是Bootstrap Bootstrap是Twitter开源的用于前端开发的HTML、CSS和JS框架,它的主要目标是让开发人员快速…

    css 2023年6月10日
    00
  • 实例讲解CSS3中的box-flex弹性盒属性布局

    下面是关于“实例讲解CSS3中的box-flex弹性盒属性布局”的完整攻略: CSS3中的box-flex弹性盒属性布局 1. 弹性盒模型简介 弹性盒模型指的是一种新的布局模式,它可以使元素在一个容器内以弹性的方式排列和对齐。这种布局方式不同于传统的基于盒子模型的布局方式,在处理一些复杂的布局时表现更加优异。 2. 弹性盒模型的基本概念 在弹性盒模型中,有三…

    css 2023年6月10日
    00
  • 浅谈CSS过渡、动画和变换

    浅谈 CSS 过渡、动画和变换 什么是 CSS 过渡 CSS 过渡是指在某些 CSS 属性值发生改变时,逐渐地、平滑地过渡到新的属性值。CSS 过渡可以应用在大部分 CSS 属性上,例如:背景颜色、边框宽度、盒子大小等等。 CSS 过渡的实现需要以下两个要素: 需要明确属性值的起始点和结束点。 指定过渡的时间和方式。 下面是一个 CSS 过渡的示例: .bu…

    css 2023年6月10日
    00
  • 你真的需要了解一下CSS变量 var()的用法

    当我们设计网站时,经常需要使用相同的颜色、大小、距离等等,这些我们成为“全局变量”。在很多情况下,如果某个全局变量需要修改,我们需要逐一查找和修改每个使用这个变量的地方,这是非常繁琐的,甚至还容易出错。CSS变量 var() 很好地解决了这个问题。 什么是CSS变量 var()? CSS 变量(也称为自定义属性)是一种在使用CSS时定义的新类型属性,它们旨在…

    css 2023年6月9日
    00
  • CSS中三角形的绘制与巧妙应用实例详解

    在CSS中,可以使用伪元素和border属性来绘制三角形,这是一种非常有用的技巧,可以用于创建各种形状和图案。以下是CSS中三角形的绘制与巧妙应用实例详解: 绘制三角形 1. 使用border属性绘制三角形 可以使用CSS的border属性来绘制三角形。以下是一个简单的示例: .triangle { width: 0; height: 0; border-t…

    css 2023年5月18日
    00
  • CSS中的伪元素简介

    CSS中的伪元素是指使用:before和 :after这两个CSS伪元素属性所创建的元素。这些元素不需要在HTML结构中就可以被CSS样式所调用,因此成为了CSS样式设计中的重要元素。 :before 伪元素的使用 :before伪元素的正式名称是“假像素”,其可以让开发者在目标元素之前插入文本和内容,使得目标元素的呈现看起来更加清晰美观。 .content…

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