原生js实现折线图
不借助Echarts等图形框架原生JS快速实现折线图效果
1. 折线图效果预览
例如下图所示的折线图效果实现就很简单:
调用下面这段JS代码中的方法就好了:
假设页面上需要连接的所有点元素集合是eleDots,则页面上执行下fnLineChart(eleDots)效果就出来了。
当然,这段JS只处理长度和角度这两个动态属性,其他固定的样式还需要CSS配合,例如,线条的粗细和线条颜色,例如下面这个粗细2像素的绿色折线,可以这样:
2. 斜线效果实现的原理
1)计算两点之间的直线长度
这个应该属于初中或者高中时候的知识,勾股定理,a^2 + b^2 = c^2,直线长度实际上就是c,而a, b则是两个点的横坐标距离和纵坐标距离,假设直线前后两个点的坐标分别是(x1, y1)和(x2, y2),则直线长度为:
2)计算两点之间的弧度或角度
这个也是属于初中或者高中时候的知识,已知两个直角边的长度,求y边的对角角度,我们可以使用Math.atan()方法计算出弧度,CSS3中有专门的弧度单位rad,就是用来给旋转使用的,于是我们可以直接设置:
我们的线条就旋转了。有些小伙伴习惯使用角度deg,也是可以的,借助Math.PI常量再转换下,代码如下:
3)设置transform-origin变换点
这一步很重要是不可或缺的,否则线条的位置会有问题,就是我们需要设置线条旋转的变换点是左边缘居中位置,如下CSS代码:
于是乎,我们就可以画出两点之间的斜线效果了。因此,要实现折线图图表效果,步骤下面这样:
如果希望移到点元素上有黑色tips信息提示,可以使用LuLu UI中的tips提示方法,如果结构合理,纯CSS就可以实现。
3. 简单的图表效果没必要使用框架
本文demo展示折线斜线图表效果,所使用JS代码就寥寥几十行,而且以后也可以复用,代码量几乎可以不值一提。但是,如果就为了这一个小小的功能,而引入一个巨大的 Highcharts 或者 Echarts JS文件就成本有些大,而且UI定制这一块也不如手动写写样式来得快。
简单的图表效果完全没必要使用框架,纯手写手写正好还可以锻炼自己的基本功。
也是可以纯传统DOM实现,无需借助SVG或canvas技术。
图表框架什么时候使用合适呢?
今天就分享到这,今日留言话题:今天的这个小功能你们学会了吗?一起来说说吧,对于有价值的留言,我们都会一一回复的。如果觉得对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。
【我们直招】很苦逼,但工资超级高!
原生js实现折线图的更多相关文章
- javascript原生js轮播图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 原生js轮播图
//用原生js实现了一个简单的轮播图效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...
- 原生JS实现banner图的滚动与跳转
HTML部分: <div id="banner"> <!--4张滚动的图片--> <div id="inside"> < ...
- 用require.js封装原生js轮播图
index.html页面: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 手把手原生js轮播图
在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...
- chart.js制作折线图
<!DOCTYPE html> <html> <head> <title></title> </head> <script ...
- d3.js画折线图
下载d3.zip,并解压到网页文件所在的文件夹 windows下,在命令行进入网页文件夹,输入 python -m http.server 在浏览器中输入127.0.0.1:8000/xxx.html ...
- canvas+js绘制折线图
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Vue整合d3.v5.js制作--折线图(line)
先上效果图(x轴固定为时间轴): 图中出现的悬浮框是鼠标悬停效果 1.环境说明: vue版本:"vue": "^2.5.2" d3版本:"d3&quo ...
- 原生js轮播图实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- vue动态绑定类名
<view :class="[index == 0 ? 'bgpvip' : 'bgsvip' ,bg]"> 1.class前面需要加: 2.多个类名可以使用数组的方式 ...
- ARC157E XXYX Binary Tree 题解
首先,条件可以抽象为 Y 不能相连,然后: 钦定根为 Y,YX 的个数加上 \(2\): 钦定某一个叶子节点为 Y,XY 的个数加上 \(1\): 钦定某一个非叶子非根节点为 Y,YX 的个数加上 \ ...
- VMware-实用网站
二进制包的获取方式 ftp://ftp.redhat.com推荐网站 www.rpmfind.net相应的官方网站http://www.mysql.com
- 看图王 10.9.1.9791 With X64 去广告绿色版
修改历史:2022.12.14:自改官方 10.9.1.9791 最新正式版本2022.06.18:首个自改官方 10.9.0.9760 修改内容:美化部分关联图标:基于官方最新版本制作,精简部分非必 ...
- Mac OS 如何批量转换图片格式
在苹果电脑中,如何快速批量地转换图片的格式.苹果电脑的预览程序,可以实现PNG.JPEG.JPEG-2000.PDF.TIFF格式之间的互换.这里以将PNG格式转换为JPEG格式为例. 工具/原料 ...
- java中使用 MultipartFile 进行文件上传而且指定了上传的临时路径,但是文件上传成功后,显示临时文件 无法删除为什么
来自 AI BOT 回复:这是因为文件可能正在被应用程序使用,即文件已经被Java程序锁定,使得系统无法对其进行修改或删除.为了解决这个问题,你需要在保存完文件之后把它移动到正确的位置,或者在Java ...
- [Swift]Xcode格式化代码快捷键
写代码最常用的快捷键莫过于格式化代码了,最近玩Swift,百度上没有找到简单明了的内容,特意记录一下. Control + I 自动调整缩进 可以选中相应的代码 或 Command + A全选 ...
- pycharm、pyqt5、pyuic、anaconda配置界面
转载一篇很棒的文档,讲解的是如何在pycharm里面使用QT desiger勾画界面并且将相应的界面转化成py文件 https://www.jianshu.com/p/8b992e47a0e4 个人 ...
- C - Perform the Combo
C - Perform the Combo 思路:当读到这个题的时候,第一反应就是枚举,但是,无线超时,没办法,那就变,利用前缀和,减少时间. 代码: #include<iostream> ...
- 重新安装office原版本没卸载干净
先在设置--卸载界面确保已经卸载 在键盘上按"win+R",在运行窗口里面输入"regedit",回车 ,进入注册表编辑器 找到products 删除与offi ...