页面中动态画有超连接的图

简介:
最近有个项目,客户要求在客户端能动态显示不同年份数据,用折线图来表示,并且单击相关年份能查看详细数据,这里就有个问题放在面前,要从数据库里动态生成折线图,并且不只图,还能友好的操作。
分析了一下,可以通过至少三种技术做到,一是利用 javascript 脚本自身画图功能去实现,服务端的数据可以用 Ajax 来获取,这样就做到了客户端动态画折线图显示各年数据了,但这种方法要求的客户端的脚本代码相对复杂,实现起来有一定的困难。另一种方法是用插件技术实现,比如 flash silverlight ,这种方法表现效果很好,问题是我不是专业的 flash silverlight 手,实现有点难度。最后一种是靠自己的 C# 基本结合 HTML 来完成了。下面说说这种做法。
首先来构建客户端代码:
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" Index.aspx.cs" Inherits="MediaAdSystem. Index" %> 

3<!DOCTYPE html  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

5<html xmlns="http://www.w3.org/1999/xhtml" > 
6<head runat="server"> 
7        <title>无标题页</title> 
8</head> 
9<body > 
10 
11<script language="javascript" type=" text/javascript"> 
12// <!CDATA[ 
13//通过滚轮实现对图片的缩放 
14function ChangImg(o)    
15{    
16var zoom=parseInt(o.style.zoom, 10)||100; 
17zoom+=event.wheelDelta/12; 
18if (zoom>0) 
19 o.style.zoom=zoom+ '%';    
20 //一个标签显示缩放百分比 
21 document .getElementById ("bfb").innerHTML =Math. floor(zoom) +"%"; 
22return false;    
23}    
24// ]]> 
25</script> 
26        <form id="form1" runat="server"> 
27        <div> 
28         </div> 
29        <center >     
30                < table style="width: 100%;"> 
31                        <tr> 
32                                <td> 
33                                        第一年:<asp:TextBox ID="TextBox1" runat="server">90</asp:TextBox>  
34                                </td> 
35                                <td> 
36                                        第二年:<asp:TextBox ID="TextBox2" runat="server">46</asp:TextBox>   
37                                </td> 
38                                <td> 
39                                        第三年:<asp:TextBox ID="TextBox3" runat="server">23</asp:TextBox>  
40                                </td> 
41                        </tr> 
42                        <tr> 
43                                <td> 
44                                        第四年:<asp:TextBox ID="TextBox4" runat="server">123</asp:TextBox>   
45                                </td> 
46                                <td> 
47                                        第五年:<asp:TextBox ID="TextBox5" runat="server">56</asp:TextBox>   
48                                </td> 
49                                <td> 
50                                        第六年:<asp:TextBox ID="TextBox6" runat="server">333</asp:TextBox>   
51                                </td> 
52                        </tr> 
53                </ table>         
54                    <span id="bfb">100%</span><asp:Button ID="Button6" runat="server"  Text="生成图表" />         
55                <br /> 
56                <asp:ImageMap ID="ImageMap1" onmousewheel=" return ChangImg(this)"    runat="server"> 
57                </asp:ImageMap> 
58             </center> 
59        </form> 
60        </body> 
61</html> 
62
 
客户端主要是数据的录入,和 Img 图片标签的展示。我们发现,这里用的是 ImageMap ,并非普通的 Image ,这是因为我们要用到 ImageMap Map 的功能,通过点击相应年进入该年的详细信息页面。还有一点就是我们可以从 JS 的函数中能得到图片的缩放比例,显示在一个 id bfb span 标签上。
下来我们就把客户端的数据,通过后台代码生成 ImageMap:
1protected void Button1_Click(object sender, EventArgs e) 
2                { 
3                         int[] intarr = new  int[6] {  int.Parse(TextBox1. Text),  int.Parse(TextBox2. Text),  int.Parse(TextBox3. Text) , 
4                                                         int.Parse(TextBox4. Text),  int.Parse(TextBox5. Text),  int.Parse(TextBox6. Text)         };                        
5                         int step = 80; 
6                        //画热点的图形 
7                         for ( int i = 0; i < 6; i++) 
8                        { 
9                                CircleHotSpot Circ = new CircleHotSpot(); 
10                                Circ.Radius = 5; 
11                                Circ.X = i*step+10; 
12                                Circ.Y = 340 - intarr[i]; 
13                                Circ.NavigateUrl = "http://www.baidu.com? year="+i; 
14                                Circ.AlternateText = i.ToString (); 
15                                Circ.Target = "_blank"; 
16                                ImageMap1.HotSpots. Add(Circ); 
17                        }                 
18                        ImageMap1.ImageUrl = "image1.aspx?c1=" + TextBox1. Text + "&c2=" + TextBox2. Text + "&c3=" + TextBox3. Text + "&c4=" + TextBox4. Text + "&c5=" + TextBox5. Text + "&c6=" + TextBox6. Text;             
19                } 
20
 
代码中的 for 语句用来生成热点,热点的个数决定于数据。

接下来,我们看一下画图类,这个其在我 利用Ajax无全页面提交实现动态画图  的文章中说过,这里只把代码共享出来。
1using System; 
2using System.Collections; 
3using System.Configuration; 
4using System.Data; 
5using System.Web; 
6using System.Web.Security; 
7using System.Web.UI; 
8using System.Web.UI.HtmlControls; 
9using System.Web.UI.WebControls; 
10using System.Web.UI.WebControls.WebParts; 
11using System.Drawing; 
12using System.Drawing.Drawing2D; 
13using System.Drawing.Imaging; 
14 
15public partial class image1 : System.Web.UI.Page 
16{ 
17        protected void Page_Load(object sender, EventArgs e) 
18        { 
19                DrawMarket(); 
20        } 
21        /**//// <summary> 
22        /// 自动画折线图 
23        /// </summary> 
24        private void DrawMarket() 
25        { 
26                 int[] ZbArr = new  int[Request.QueryString. Count]; 
27                 for ( int i = 0; i < ZbArr.Length; i++) 
28                { 
29                        ZbArr[i] =  int.Parse(Request.QueryString[i]); 
30                } 
31                 int width = 600, height = 360; 
32                Bitmap bm = new Bitmap(width, height); 
33                Graphics g = Graphics.FromImage(bm); 
34                g.Clear(Color.White); 
35                Brush b = new SolidBrush(Color.Green); 
36                Pen p = new Pen(Color.Black,1.8f); 
37                Pen p1 = new Pen(Color.Green, 2); 
38                p.EndCap = LineCap.ArrowAnchor ; 
39                //画坐标系 
40                g.DrawLine(p, 10, 340, 540, 340); 
41                g.DrawLine(p, 10, 340, 10, 10); 
42                g.DrawString("年", new Font("宋体", 15, FontStyle.Bold), b, 545, 332); 
43                 int step = 80; 
44                //画折线 
45                GraphicsPath graphPath = new GraphicsPath(); 
46                Point[] point = new Point[ZbArr.Length]; 
47                 for ( int i = 0; i < point.Length; i++) 
48                { 
49                        point[i].X = i * step + 10; 
50                        point[i].Y = 340 - ZbArr[i]; 
51                } 
52                Pen blackPen = new Pen(Color.Black, 3); 
53                graphPath.AddLines(point); 
54                g.DrawPath(p, graphPath); 
55                //画点 
56                 for ( int i = 0; i < point.Length; i++) 
57                { 
58                        g.DrawEllipse(p1, point[i].X - 5, point[i].Y - 5, 10, 10); 
59                }                 
60                bm. Save(this.Response.OutputStream, ImageFormat.Jpeg); 
61                g.Dispose(); 
62                bm.Dispose(); 
63 
64        } 
65} 
66
这种画图的效果相对来说明了,但出来的图的效果不是太好,需要进一步优化。
 
















本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/149938  ,如需转载请自行联系原作者




相关文章
|
Java 程序员 数据库
【动态连接】
【动态连接】
|
4月前
|
数据可视化 前端开发 JavaScript
可视化图表与源代码显示配置项及页面的动态调整功能分析
本篇文章对可视化图表与源代码显示配置项及页面的动态调整进行了一个详细的功能分析,我将文章内容分为四个部分(分析图表源代码;分析源代码显示功能;分析源代码显示及动态调整;分析代码编辑器及运行效果显示)。对此,我会一一为大家解释代码的结构,功能的组成;且文章出现的所有代码,为了方便小白也能够读懂,我都做了详细的注释
57 0
可视化图表与源代码显示配置项及页面的动态调整功能分析
|
5月前
|
JavaScript
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
|
7月前
唯美动态个人404页面源码
手机端先加载静态图再缓慢加载gif动图,电脑端先加载静态图在加载mp4。提升打开速度!
36 0
唯美动态个人404页面源码
|
人工智能 JavaScript 前端开发
小程序实现页面多级来回切换支持滑动和点击操作
想留住粉丝,就必须安排演示: [审核中…]然后开摆!!!!首先通过swiper创建一个简单的多tab页面 通过触发pagechange1方法中的事件对currentIndex来进行赋值,又通过currentIndex的改变使前端wxml对应更改,这个部分对滑动和点击的操作都一样,无非就是使currentIndex对应到各自的位置,通过数字来决定位置 这个部分完整代码如下: wxml wxss js 上一步完成后,下级页面再加一个滑动页面,当内切换结束后,在做切换就是父级的切换操作 在“内容1”的vie
272 0
小程序实现页面多级来回切换支持滑动和点击操作
|
前端开发
评论列表案例-创建CmtList组件并渲染基本页面结构
评论列表案例-创建CmtList组件并渲染基本页面结构
评论列表案例-创建CmtList组件并渲染基本页面结构
|
前端开发 JavaScript
单页面多路由区域操作
单页面多路由区域操作
131 0
|
小程序
小程序-点击按钮式 进行页面之间的跳转
小程序-点击按钮式 进行页面之间的跳转
|
Apache 开发者
服务器节点动态上下线案例注册代码|学习笔记
快速学习 服务器节点动态上下线案例注册代码
114 0
|
DataWorks 图计算
如何创建图计算服务图实例列表
图计算服务GraphCompute按图实例来管理与图相关的模型和数据,本文为您介绍如何购买、创建和管理一个图实例。
684 0