标签:
今天来为大家说一说在我最近做的一个项目中遇到的一个比较有意思的东西。
先说一下,这个项目的需求是要在前端显示界面提供信息整合分析的图表,这里我们选择了使用柱形图。
以一个镇子里面的每一个村子有多少人为例:
首先要先确定Y轴的数据的间隔是多少,我们在这里设置的为20px;
因为在前端浏览器Height标签获取相应数据的时候采用的是取整,但是这里在显示的时候是明显不能够用整数值的;
假如我们设置Y轴大概每一个20px的间距就是100个人口,那么如果是99个人的话实际的柱形图的高度应为99/100*20=19.8px;
但是呢Height只取整数值也就是19px,这样就会产生很多误差,使系统的完成度和可信度大大降低;
当然,这里很多人会想到为什么不用百分数呢,是的当时我也想到了用百分数,但是当你真正用到的时候就会发现,使用百分数的时候Height标签也只是会取整数的部分;
比如我们所需要的值时19.8%,那么Height只会取到19%,这样在信息量很大的时候误差会更大;
所以,这两种方法都是不可以的,那么我就在这里为大家提供一种可行的方法:
我们使用px和em转换的方法,1em=16px,但是我不知道是我的浏览器的原因还是其他的原因,当我使用的是这个值的时候显示的信息并不是我想要的,
使用方法是这样的,我们还是设置人数为99人,那么在算的时候就是这样的: 99/100*20/16 这个值就是我们转换到em 的值,在页面代码中Height中将px换成em ;
这样你通过审查界面代码你就可以发现这个时候的柱形图的高度为19.8px;我的浏览器用的是谷歌浏览器,转换的时候我发现使用16来转换的结果并不是我想要的,后来通过计算我得到的值是13.989899,所以我在转换的时候用的就是这个值。
但在实际做项目的过程中,我们是要求这个柱形图是可以随着数据库信息的整合而变化的,这样才能更好的增加系统的完善性,下面为给大家举个例子:
我们在这里使用的是.net语言编程
控制器部分:
public ActionResult showHumanOfVillage(){
NumberOfPersonModel model=new NumberOfPersonModel();
model.FengXiangCun=99;
model.FengXiangCun=model.FengXiangCun/100*20/13.989899;
return View(model);
}
视图部分:
@model NumberOfPersonModel
@{
string ems="em";
}
//这里给大家个提醒,再给Height设置值的时候,在所传值的后面直接加上em,或者加空格之后再加em是不对的
比如:<canvas class="jqplot-series-shadowCanvas" style="position: absolute; left: 90px; bottom: 20px;border-color: rgba(246, 156, 147, 0.8);height:@Model.FengXiangCunem;width:50px;"></canvas>
或者<canvas class="jqplot-series-shadowCanvas" style="position: absolute; left: 90px; bottom: 20px;border-color: rgba(246, 156, 147, 0.8);height:@Model.FengXiangCun em;width:50px;"></canvas>
所以我们采用字符串拼接的形式
<canvas class="jqplot-series-shadowCanvas" style="position: absolute; left: 90px; bottom: 20px;border-color: rgba(246, 156, 147, 0.8);height:@Model.FengXiangCun.ToString()@ems;width:50px;"></canvas>
这样我们就会发现这里最终height中显示的值就是为19.8px,正是我们所想要的。
这个方法是本人在这次项目开发的过程中遇到这类问题之后通过思考和实践而做出来的可行的一种方法,希望大家在制作项目的过程中遇到此类的问题可以更快的解决。
同时希望更多更有经验的前辈能多给提提意见,让学生能够学到更多的有用的知识为学生1年后求职增加更多的经验和实力,感激不尽!!!!!
标签:
原文地址:http://www.cnblogs.com/qtc-zyl/p/5463742.html