Asp.Net Web控件 (二)(无间隙滚动控件)
来源:互联网 发布:优化目标函数 编辑:程序博客网 时间:2024/05/23 01:17
这次的js脚本来源于 崔永祥 编写的通用不间断滚动JS封装类。
还是先上效果:
html代码如下:
设计时如下:
只要把所需滚动的代码拖放到该控件内就可以了。
现在设置的是向上滚动,高度为100px,宽度为当前浏览器窗口的宽。
再看一下预览效果,就可以实现滚动了:
下面来讲述控件的编码过程。
这次我们来继承WebControl类,这样方便一些。
[ParseChildren(false)] [ToolboxData("{0}:MarqueeControl runat=server/{0}:MarqueeControl")] public class MarqueeControl : WebControl
这里要讲一下ParseChildren这个特性,
ParseChildren(false),表示放在此控件内的元素将被解析成控件。
ParseChildren(true),表示放在此控件内的元素将被解析成属性 (Property)。
构造函数: public MarqueeControl() : base(HtmlTextWriterTag.Div) { }
使生成的html标签是div。
新增的属性如下:
[Description("滚动方向 (默认为 向上滚动)")] [TypeConverter(typeof(DirectionType))] public DirectionType Direction
[Description("滚动的步长 (默认值为2,数值越大,滚动越快)")] public int Step
[Description("定时器 (默认值为50,数值越小,滚动的速度越快,1000=1秒,建议不小于20)")] public int Timer
[Description("间歇停顿延迟时间 (默认为0不停顿,1000=1秒)")] public int DelayTime
[Description("开始时的等待时间 (默认或0为不等待,1000=1秒)")] public int WaitTime
[Description("间歇滚动间距 (默认为50, -1禁止鼠标控制)")] public int ScrollStep
[Description("客户端名称 默认为ClientID")] public string ClientInstanceName
[Description("客户端自定义脚本")] public string ClientScript
这里就不一一介绍啦,选几个吧。
Direction设计时属性对话框中如下:
变为可选择的项,
是通过[TypeConverter(typeof(DirectionType))] 来实现的.
DirectionType是一个枚举:
public enum DirectionType { /// summary /// 下上滚动 /// /summary Top = 0, /// summary /// 向下滚动 /// /summary Bottom = 1, /// summary /// 向左滚动 /// /summary Left = 2, /// summary /// 向右滚动 /// /summary Right = 3 }
ClientInstanceName是生成脚本的构造出来的Marquee实例,例如:var marq=new Marquee(id);
ClientScript为在开启滚动之前的脚本,可自行编写。
接下来就是输出脚本的代码,内嵌的控件代码则会自动输出的,不需要做处理。
protected override void OnPreRender(EventArgs e) { if (!Page.ClientScript.IsClientScriptIncludeRegistered("MarqueeControlJS")) Page.ClientScript.RegisterClientScriptInclude("MarqueeControlJS", Page.ClientScript.GetWebResourceUrl(this.GetType(), "Hxj.Web.UI.js.marquee.js")); string clientName = this.ClientInstanceName; StringBuilder script = new StringBuilder(); script.AppendLine(); script.Append("var "); script.Append(clientName); script.Append("=new Marquee(\""); script.Append(this.ClientID); script.Append("\","); script.Append(this.Direction.GetHashCode().ToString()); script.Append(","); script.Append(this.Step.ToString()); script.AppendLine(");"); if (this.Width.Type == UnitType.Pixel) { script.Append(clientName); script.Append(".Width="); script.Append(this.Width.Value.ToString()); script.Append(";"); } if (this.Height.Type == UnitType.Pixel) { script.Append(clientName); script.Append(".Height="); script.Append(this.Height.Value.ToString()); script.Append(";"); } script.Append(clientName); script.Append(".Timer="); script.Append(this.Timer.ToString()); script.Append(";"); script.Append(clientName); script.Append(".DelayTime="); script.Append(this.DelayTime.ToString()); script.Append(";"); script.Append(clientName); script.Append(".WaitTime="); script.Append(this.WaitTime.ToString()); script.Append(";"); script.Append(clientName); script.Append(".ScrollStep="); script.Append(this.ScrollStep.ToString()); script.AppendLine(";"); if (!string.IsNullOrEmpty(ClientScript)) { script.AppendLine(ClientScript); } script.Append(clientName); script.AppendLine(".Start();"); if (!this.Page.ClientScript.IsStartupScriptRegistered("MarqueeControlStartscript" + this.ClientID)) this.Page.ClientScript.RegisterStartupScript(typeof(string), "MarqueeControlStartscript" + this.ClientID, script.ToString(), true); base.OnPreRender(e); }
也可根据自己的需求在客户端用js改变滚动的效果。
这样一个无间隙滚动控件就编写完成了。
下载
还是先上效果:
html代码如下:
设计时如下:
只要把所需滚动的代码拖放到该控件内就可以了。
现在设置的是向上滚动,高度为100px,宽度为当前浏览器窗口的宽。
再看一下预览效果,就可以实现滚动了:
下面来讲述控件的编码过程。
这次我们来继承WebControl类,这样方便一些。
[ParseChildren(false)] [ToolboxData("{0}:MarqueeControl runat=server/{0}:MarqueeControl")] public class MarqueeControl : WebControl
这里要讲一下ParseChildren这个特性,
ParseChildren(false),表示放在此控件内的元素将被解析成控件。
ParseChildren(true),表示放在此控件内的元素将被解析成属性 (Property)。
构造函数: public MarqueeControl() : base(HtmlTextWriterTag.Div) { }
使生成的html标签是div。
新增的属性如下:
[Description("滚动方向 (默认为 向上滚动)")] [TypeConverter(typeof(DirectionType))] public DirectionType Direction
[Description("滚动的步长 (默认值为2,数值越大,滚动越快)")] public int Step
[Description("定时器 (默认值为50,数值越小,滚动的速度越快,1000=1秒,建议不小于20)")] public int Timer
[Description("间歇停顿延迟时间 (默认为0不停顿,1000=1秒)")] public int DelayTime
[Description("开始时的等待时间 (默认或0为不等待,1000=1秒)")] public int WaitTime
[Description("间歇滚动间距 (默认为50, -1禁止鼠标控制)")] public int ScrollStep
[Description("客户端名称 默认为ClientID")] public string ClientInstanceName
[Description("客户端自定义脚本")] public string ClientScript
这里就不一一介绍啦,选几个吧。
Direction设计时属性对话框中如下:
变为可选择的项,
是通过[TypeConverter(typeof(DirectionType))] 来实现的.
DirectionType是一个枚举:
public enum DirectionType { /// summary /// 下上滚动 /// /summary Top = 0, /// summary /// 向下滚动 /// /summary Bottom = 1, /// summary /// 向左滚动 /// /summary Left = 2, /// summary /// 向右滚动 /// /summary Right = 3 }
ClientInstanceName是生成脚本的构造出来的Marquee实例,例如:var marq=new Marquee(id);
ClientScript为在开启滚动之前的脚本,可自行编写。
接下来就是输出脚本的代码,内嵌的控件代码则会自动输出的,不需要做处理。
protected override void OnPreRender(EventArgs e) { if (!Page.ClientScript.IsClientScriptIncludeRegistered("MarqueeControlJS")) Page.ClientScript.RegisterClientScriptInclude("MarqueeControlJS", Page.ClientScript.GetWebResourceUrl(this.GetType(), "Hxj.Web.UI.js.marquee.js")); string clientName = this.ClientInstanceName; StringBuilder script = new StringBuilder(); script.AppendLine(); script.Append("var "); script.Append(clientName); script.Append("=new Marquee(\""); script.Append(this.ClientID); script.Append("\","); script.Append(this.Direction.GetHashCode().ToString()); script.Append(","); script.Append(this.Step.ToString()); script.AppendLine(");"); if (this.Width.Type == UnitType.Pixel) { script.Append(clientName); script.Append(".Width="); script.Append(this.Width.Value.ToString()); script.Append(";"); } if (this.Height.Type == UnitType.Pixel) { script.Append(clientName); script.Append(".Height="); script.Append(this.Height.Value.ToString()); script.Append(";"); } script.Append(clientName); script.Append(".Timer="); script.Append(this.Timer.ToString()); script.Append(";"); script.Append(clientName); script.Append(".DelayTime="); script.Append(this.DelayTime.ToString()); script.Append(";"); script.Append(clientName); script.Append(".WaitTime="); script.Append(this.WaitTime.ToString()); script.Append(";"); script.Append(clientName); script.Append(".ScrollStep="); script.Append(this.ScrollStep.ToString()); script.AppendLine(";"); if (!string.IsNullOrEmpty(ClientScript)) { script.AppendLine(ClientScript); } script.Append(clientName); script.AppendLine(".Start();"); if (!this.Page.ClientScript.IsStartupScriptRegistered("MarqueeControlStartscript" + this.ClientID)) this.Page.ClientScript.RegisterStartupScript(typeof(string), "MarqueeControlStartscript" + this.ClientID, script.ToString(), true); base.OnPreRender(e); }
也可根据自己的需求在客户端用js改变滚动的效果。
这样一个无间隙滚动控件就编写完成了。
下载
- Asp.Net Web控件 (二)(无间隙滚动控件)
- ASP.NET - 使用 ASP.NET Web 服务器控件(二)
- asp.net web控件( RegularExpressionValidator 控件)
- ASP.NET - ImageMap Web 服务器控件概述(二)
- 无间隙图片滚动(关于)
- 自定义asp.net控件分析(二)
- ASP.NET - 使用 ASP.NET Web 服务器控件(一)
- ASP.NET - 使用 ASP.NET Web 服务器控件(三)
- ASP.NET - 使用 ASP.NET Web 服务器控件(四)
- ASP.NET - 使用 ASP.NET Web 服务器控件(五)
- ASP.NET - 使用 ASP.NET Web 服务器控件(六)
- ASP.NET - 使用 ASP.NET Web 服务器控件(七)
- ASP.NET - 使用 ASP.NET Web 服务器控件(八)
- ASP.NET - 使用 ASP.NET Web 服务器控件(九)
- ASP.NET - 使用 ASP.NET Web 服务器控件(十)
- 让treeview控件显示滚动条(asp.net 1.1)
- ASP水平无间隙滚动图片代码
- ASP.NET - MultiView 和 View Web 服务器控件概述(二)
- android应用程序获取Root权限
- 创业者2012必看十大文章(5)
- Usaco:Palindromic Squares
- oracle执行计划
- 创业者2012必看十大文章(6)
- Asp.Net Web控件 (二)(无间隙滚动控件)
- Unity3d中英文API
- Log4J的配置文件详解
- php:php多层数组和对象的转换
- C#开发Windows Service程序
- 创业者2012必看十大文章(7)
- 虚拟机ubuntu11.10与win7共享文件夹(samba服务模式)
- 创业者2012必看十大文章(8)
- 网站学习备忘006——Session,页面计数器