热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用JavaScript做一个简朴的框选图表

故事背景:这几天碰到一个客户,是做集会记录的,每次集会过程当中,都邑有特定装备记录下发言人的位置以角度值显现。他给我角度值,让我给他做一个图表来展现每一个人的一个或许位置。客户想到

故事背景:这几天碰到一个客户,是做集会记录的,每次集会过程当中,都邑有特定装备记录下发言人的位置以角度值显现。他给我角度值,让我给他做一个图表来展现每一个人的一个或许位置。

客户想到的是用Echarts图表来做,我起首想到的也是用Echarts,然则思索了他的请求今后,发现就一个简朴的框选图表用Echarts来做是否是牛鼎烹鸡了,而且还要导入那么多的没用的代码。

因而我想到了用canvas画布来仿着做,但又斟酌了一下,canvas操纵起来不顺手;终究可不能够用一般的css连系Javascript来把它做出来呢?此番思索考证了:任何事情一定要多动脑,才 到更简朴的解决题目的体式格局。

斟酌到或许某天人人用得着,所以宣布出来。注:具有可移植性,可移到页面任何位置,结果不会转变

先看终究结果吧:
图一:
《用Javascript做一个简朴的框选图表》

图二:
《用Javascript做一个简朴的框选图表》

这个小东西会触及的学问点不多,归结一下:js的三角函数CSS3的transform鼠标的坐标轴XY的盘算…啊哈,差不多大致就这三方面的学问吧,假如你都只是有过相识也没紧要,由于都只用的到外相所以没必要忧郁。然则假如完整没听过,那就请您再去相识一下这方面学问。

代码地区












    会用到的一些学问点拓展
    注:在js中设置Transform的时刻我用到的不是scale()要领,由于我想兼容ie9以下的版本所以用了矩阵变化。固然,你们也能够改成scale(),毫无影响。
    1. 在规范浏览器下的矩阵函数matix(a,b,c,d,e,f)、ie下的矩阵函数progid:DXImageTransform.Microsoft.Matrix( M11= 1, M12= 0, M21= 0 , M22=1,SizingMethod=’auto expend’)
      他们的共同点:M11 == a; M12 == c; M21 == b; M22 == d
      不一样的处所:ie下的矩阵函数没有ef两个参数,在矩阵函数中ef是用来位移的,也就是说ie下没法经由过程矩阵函数来完成位移[ 不过我们这里彷佛不需要位移,嘿嘿 ]

    2. 在规范浏览器下矩阵函数matrix中a,b,c,d,e,f 一一对应的的初始值为:matix(1,0,0,1,0,0)

    3. 经由过程矩阵完成缩放:
      x轴缩放:a = xa c = xc e = x*e
      y轴缩放:b = yb d = yd f = y*f

    4. 经由过程矩阵完成位移:[ie下没位移]
      x轴位移:e = e+x
      y轴位移:f = f+y

    5. 经由过程矩阵完成倾斜:
      x轴倾斜:c = Math.tan(xDeg/180*Math.PI)
      y轴倾斜:b = Math.tan(yDeg/180*Math.PI)

    6. 经由过程矩阵完成扭转:
      a = Math.cos(deg/180*Math.PI);
      b = Math.sin(deg/180*Math.PI);
      c = -Math.sin(deg/180*Math.PI);
      d = Math.cos(deg/180*Math.PI);

    7. 至于三角函数我就不引见了,百度一大把:
      三角函数


    推荐阅读
    • DirectShow Filter 开发指南
      本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
    • 视觉Transformer综述
      本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
    • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
    • 深入解析 C++ 中的 String 和 Vector
      本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
    • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
    • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
    • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
    • 利用Node.js实现PSD文件的高效切图
      本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
    • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
    • SDWebImage第三方库学习
      1、基本使用方法异步下载并缓存-(void)sd_setImageWithURL:(nullableNSURL*)urlNS_REFINED_FOR_SWIFT;使用占位图片& ... [详细]
    • 在移动端开发中,多点触控手势是提升用户体验的重要手段。然而,目前只有iOS浏览器原生支持手势事件,其他设备需要通过touchstart、touchmove和touchend等基础事件进行自定义实现。本文将详细介绍如何在Vue项目中实现多点触控手势。 ... [详细]
    • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
    • 本文档提供了 TA-Lib 的安装指南、快速入门、高级应用及各类技术指标的详细介绍。 ... [详细]
    • 本文探讨了在 SQL Server 2012 的 Integration Services 项目中配置 ADO.NET 源时遇到的错误及其解决方案。 ... [详细]
    • CSS 百分比单位的取值依据是什么
      本文详细探讨了 CSS 中百分比单位的取值依据,包括不同定位方式下的包含块概念及其应用。通过具体的示例和代码,帮助读者更好地理解和掌握这一知识点。 ... [详细]
    author-avatar
    书友75271582
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有