返回顶部
首页 > 资讯 > 精选 >JS前端怎么模拟Excel条件格式实现数据条效果
  • 106
分享到

JS前端怎么模拟Excel条件格式实现数据条效果

2023-07-05 07:07:51 106人浏览 独家记忆
摘要

这篇文章主要介绍“js前端怎么模拟excel条件格式实现数据条效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS前端怎么模拟Excel条件格式实现数据条效果”文章能帮助大家解决问题。需求背景最近

这篇文章主要介绍“js前端怎么模拟excel条件格式实现数据条效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS前端怎么模拟Excel条件格式实现数据条效果”文章能帮助大家解决问题。

需求背景

最近业务中遇到一个有意思的需求,是要在现有的表格中实现类似 Excel 中的数据条的效果,在数据比较多的时候单纯看表格里的数字会比较密集且不容易对比,加上数据条之后就比较明显的看出数据的对比情况,也让表格看起来生动了一些,这算是融合了表格和柱状图的优点。

先来看下 Excel 的效果

JS前端怎么模拟Excel条件格式实现数据条效果

需求分析

通过图片可以看出共有几种情况:

  • 只有正值:数据条全部向右

  • 只有负值:数据条全部向左

  • 正负值都有:正负值会以一个轴线做分割分布在左右两侧,根据正负值的多少轴线的位置也会相应的偏左或偏右

实现逻辑

实现这个效果的前提,我们要知道每列数据的最大值max和最小值min,最大值的数据条宽度就是100%,下面先用伪代码梳理下逻辑。

全是正值和全是负值的情况,这种情况就比较简单了,就是计算单元格的值占最大值的比例,计算公式是这样:数据条宽度 = (当前值 / max) * 100

正负值都有的情况多了一个“轴线位置“的计算和”数据条偏移量“计算

轴线位置 = (Math.abs(min) / (max - min)) * 100
数据条宽度 = (Math.abs(当前值) / (max - min)) * 100
// 当前值 < 0 时数据条在轴线左边,改变 right 值// 数据条的总长为100%right = 100 - 轴线位置// 当前值 > 0 时数据条在轴线右边,改变 left 值left = 轴线位置

轴线位置逻辑其实是 "最小值到0的距离在总长度(max-min)之间的占比",我们知道数字与0之间的距离其实就是绝对值的计算,那么转换为公式来表示就是:

数据条的宽度就是 “当前值到0的距离在总长度(max-min)之间的占比”,公式表示:

  • 数据条的偏移量,这里需要知道是向左还是向右偏移(最终是通过改变元素CSS的 left、right 属性来实现偏移)

完整代码实现

代码使用 Vue + ElementUI

template 部分

<template>  <el-table :data="tableData" border >    <el-table-column      v-for="item in columns"      sortable      :key="item.prop"      :prop="item.prop"      :label="item.label"    >      <template slot-scope="scope">        <!-- 数据条 -->        <div class="data-bar" :></div>        <!-- 轴线 -->        <div class="data-bar-axis" :></div>        <!-- 当前值 -->        <span class="cell-value">{{ scope.row[item.prop] }}</span>      </template>    </el-table-column>  </el-table></template>

style 部分

先放 style 部分是为了让大家对基础样式有个感受,渲染函数中主要就是动态修改元素的 width、left、right 的值

<style>    .el-table .cell-value {      position: relative;    }    .data-bar {      position: absolute;      top: 0;      bottom: 0;      margin: 5px auto;      transition: width 0.2s;    }    .data-bar-axis {      position: absolute;      top: -1px;      bottom: 0;      border-right: 1px dashed #303133;    }</style>

script 部分

<script>export default {  data() {    return {      columns: [        {          prop: 'positive',          label: '正值',          min: 1,          max: 10        },        {          prop: 'negative',          label: '负值',          min: -1,          max: -12        },        {          prop: 'mixed',          label: '正负值',          min: -6,          max: 5        }      ],      tableData: []    }  },  created() {    this.initData()  },  methods: {    initData() {      // mock数据过程,忽略 ...      this.tableData.push({...})    },    renderDataBar(column, row) {      const { min, max, prop } = column      // 当前单元格值      const cellVal = row[prop]      if (cellVal === 0) return { display: 'none' };      let style = {        width: '0',        background: '#409eff'      }      // 全是正值 或 全是负值      if (min >= 0 || max <= 0) {        const width = ((cellVal / max) * 100).toFixed(2);        style.width = `${width}%`        style = min >= 0 ? { ...style, left: '0' } : { ...style, right: '0' }      }      // 正负值都有      if (min < 0 && max > 0) {        const range = max - min;        // 轴线位置        const leftOffset = Math.abs((min / range) * 100)        // 数据条宽度        const width = ((Math.abs(cellVal / range) * 100)).toFixed(2)        style = cellVal > 0 ? {          width: `${width}%`,          left: `${leftOffset.toFixed(2)}%`        } : {          width: `${width}%`,          background: '#F56C6C', // 负值进行颜色区分          right: `${(100 - leftOffset).toFixed(2)}%`        }      }      return style;    },    renderAxis(column) {      const { min, max } = column      if (min < 0 && max > 0) {        // 正负值都有的情况下,显示轴线        const range = max - min;        const leftOffset = (((0 - min) / range) * 100).toFixed(2)        return {          left: `${leftOffset}%`        }      } else {        return {          display: 'none'        }      }    }  }}</script>

关于“JS前端怎么模拟Excel条件格式实现数据条效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: JS前端怎么模拟Excel条件格式实现数据条效果

本文链接: https://lsjlt.com/news/350307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS前端模拟Excel条件格式实现数据条效果
    目录需求背景需求分析实现逻辑完整代码实现template 部分style 部分script 部分最终实现效果需求背景 最近业务中遇到一个有意思的需求,是要在现有的表格中实现类似 E...
    99+
    2023-02-28
    JS模拟Excel数据条 JS Excel条件格式数据条
  • JS前端怎么模拟Excel条件格式实现数据条效果
    这篇文章主要介绍“JS前端怎么模拟Excel条件格式实现数据条效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS前端怎么模拟Excel条件格式实现数据条效果”文章能帮助大家解决问题。需求背景最近...
    99+
    2023-07-05
  • css+js怎么实现简单的动态进度条效果
    这篇文章主要介绍css+js怎么实现简单的动态进度条效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   我们要知道,这里主要使用了css3的animation动画属性,首先将进...
    99+
    2024-04-02
  • 怎么使用JS和CSS实现加载进度条的效果
    这篇文章主要介绍“怎么使用JS和CSS实现加载进度条的效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用JS和CSS实现加载进度条的效果”文章能帮助大家解决问题。准备软件:HBuilderX...
    99+
    2023-07-04
  • javascript怎么实现纯前端将数据导出excel
    这篇文章主要介绍了javascript怎么实现纯前端将数据导出excel的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript怎么实现纯前端将数据导出excel文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-02
  • Java中怎么用策略模式实现条件判断
    本文小编为大家详细介绍“Java中怎么用策略模式实现条件判断”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中怎么用策略模式实现条件判断”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。定义策略模式定义了一系...
    99+
    2023-06-29
  • mysql中怎么实现有条件插入数据
    这篇文章将为大家详细讲解有关mysql中怎么实现有条件插入数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。关键是如下的MYSQL语句, 插入多条...
    99+
    2024-04-02
  • JS怎么封装转换前后端接口数据格式工具
    本篇内容介绍了“JS怎么封装转换前后端接口数据格式工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!思路一般后端返回给前端的数据几乎都是数组...
    99+
    2023-07-05
  • js怎么模拟实现淘宝网商品放大镜效果
    小编给大家分享一下js怎么模拟实现淘宝网商品放大镜效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果图:(实例图片由自己添加...
    99+
    2024-04-02
  • 利用pandas怎么实现按条件筛选数据
    本篇文章给大家分享的是有关利用pandas怎么实现按条件筛选数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用布尔型DataFrame对数据进行筛选使用一个条件对数据进行筛...
    99+
    2023-06-06
  • JS怎么实现数组过滤从简单到多条件筛选
    本篇内容主要讲解“JS怎么实现数组过滤从简单到多条件筛选”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现数组过滤从简单到多条件筛选”吧!目录单条件单数据筛选单条件多数据筛选多条件单数据...
    99+
    2023-06-20
  • js前端表单数据处理和校验怎么实现
    这篇文章主要介绍了js前端表单数据处理和校验怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js前端表单数据处理和校验怎么实现文章都会有所收获,下面我们一起来看看吧。1.数据处理当表单在视图所展示的数据并...
    99+
    2023-07-02
  • jQuery怎么实现表格行数据滚动效果
    这篇文章主要讲解了“jQuery怎么实现表格行数据滚动效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jQuery怎么实现表格行数据滚动效果”吧!HTML代码:<div c...
    99+
    2023-06-20
  • vue项目怎么实现前端预览word与pdf格式文件
    今天小编给大家分享一下vue项目怎么实现前端预览word与pdf格式文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。页面上...
    99+
    2023-07-05
  • HTML5 Canvas怎么实现圆形进度条并显示数字百分比效果
    这篇文章主要介绍HTML5 Canvas怎么实现圆形进度条并显示数字百分比效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现效果首先创建html代码<canvas id="canvas&...
    99+
    2023-06-09
  • mongoDB数据库中的多条件查询怎么利用Java实现
    mongoDB数据库中的多条件查询怎么利用Java实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。客户端代码:db.url.find({index:4,status:0,ur...
    99+
    2023-05-31
    java mongodb ava
  • Java中怎么操作Jxl实现导出数据生成Excel表格数据文件
    这篇文章主要讲解了“Java中怎么操作Jxl实现导出数据生成Excel表格数据文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中怎么操作Jxl实现...
    99+
    2024-04-02
  • 怎么用sort()函数与文件碎片实现表格的前端排序
    本篇内容介绍了“怎么用sort()函数与文件碎片实现表格的前端排序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!表格排序在网页的利用也很多,...
    99+
    2023-06-27
  • 分布式开发医疗挂号系统数据字典模块web前后端怎么实现
    这篇文章主要介绍了分布式开发医疗挂号系统数据字典模块web前后端怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇分布式开发医疗挂号系统数据字典模块web前后端怎么实现文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作