JavaScript制作简单的框选图表

  

故事背景:这几天遇到一个客户,是做会议记录的,每次会议过程中,都会有特定设备记录下讲话人的位置以角度值显示。他给我角度值,让我给他做一个图表来展示每个人的一个大概位置。

  

客户想到的是用Echarts图表来做,我首先想到的也是用Echarts,但是思考了他的要求以后,发现就一个简单的框选图表用Echarts来做是不是大材小用了,而且还要导入那么多的没用的代码。

  

于是我想到了用帆布画布来仿着做,但又考虑了一下,帆布操作起来不顺手;究竟可不可以用普通的css结合javascript来把它做出来呢?此番思考验证了:任何事情一定要多动脑,才能碰到更简单的解决问题的方式。

  

考虑到也许某天大家用得着,所以发布出来。注:拥有可移植性,可移到页面任何位置,效果不会改变

  

先看最终效果吧:

  

图一:   

 JavaScript制作简单的框选图表“> <img src=

  

图二:   

 JavaScript制作简单的框选图表

  

这个小东西会涉及的知识点不多,归纳一下:js的三角函数,CSS3的变换,鼠标的坐标轴XY的计算啊…哈,差不多大体就这三方面的知识吧,如果你都只是有过了解也没关系,因为都只用的到皮毛所以不必担心。但是如果完全没听过,那就请您再去了解一下这方面知识。

  

代码区域
  

        & lt; !doctype html>   & lt; html>   & lt; head>   & lt;元charset=" utf - 8 "/比;   & lt; title>仿Echarts图表& lt;/title>   & lt; style>   * {   填充:0;   保证金:0;   }   # getcharts {   位置:相对;   宽度:510 px;   身高:510 px;      }   # wrapcharts {   list-style:没有;   身高:500 px;   宽度:500 px;   边界:2 px固体# aaa级;   这个特性:50%;   位置:相对;   保证金:20 px汽车;   }   李# wrapcharts {   高度:10 px;   宽度:10 px;   diaplay:块;   位置:绝对的;   光标:指针;   左:247 px;   上图:2 px;   高度:10 px;   宽度:10 px;   过渡:0.2秒;   背景:红色;   这个特性:50%;   }   # boxshadow {   位置:绝对的;   背景:蓝色;   透明度:0.2;   高度:0;   宽度:0;   左:0;   上图:0;   }   & lt;/style>   & lt;/head>   & lt; body>      & lt; ul id=" wrapcharts "祝辞& lt;/ul>   & lt; div id=" boxshadow "祝辞& lt;/div>      & lt; script>/*   * *模拟从后端取值过来的【角度】和相对应的【人名】数组   * */var degArr=[25, 88252323, 33岁,28岁,30岁,90290100300年,50180205220331195年,97102年,77年,62年,38岁,32岁,79年);   var nameArr=['内衣天使”,“小恶魔”、“金正恩”、“奥巴马”、“duolaA梦”,“午夜激情”,“梁静茹的,”刘亦菲”,“琪琪”,“大熊”,“小静”,“小屁孩”、“张三”,“李四”,“王五”、“麻六”、“小明”,“小张”、“丽丽”,“多”多,“瑾瑾’,‘biubiu’,‘Mr.boluo ', '汉森'];/*   * *声明getPos(参数)函数:利用三角函数定理根据传入的角度值获取对边和临边的x, y值   * */函数getPos(度)   {   var X=sin(度* Math.PI/180) * 250 + 245;   var Y=-Math.cos(度* Math.PI/180) * 250 + 245;   返回{x, x, y, y};   }/*   * *这里不用说的吧,获取页面中的ul、和ul中李的对象,以及框选时的那个任意变动大小的小方块对象   * */var oWrap=. getelementbyid (“wrapcharts”);   阿里var=oWrap.getElementsByTagName(‘李’);   var oBox=. getelementbyid (“boxshadow”);   var allLi=";   var posArr=[];/*   * *的循环中调用getPos(参数)来获取degArr数组中的所有角度对应的x, y值(就是每个角度对应的x, y坐标),并传入到一个数组中保存,方便取用   * */我(var=0; i< degArr.length;我+ +)   {   posArr.push (getPos (degArr[我]));   }/*   * *的循环根据度数数组degArr的长度插入李小圆点到ul中,并将之前获取的每个点对应的x, y左边插入到行内样式   * */(var=0;i”;   }   oWrap。innerHTML=allLi;/*   * *遍历最终得到的ul中李的   * */(var=0;i

JavaScript制作简单的框选图表