摘要: 序一(08/07/21)很久之前就在一个网站的截取相片的功能中看到这个效果,也叫图片裁剪、图片剪切(设置一下也可以做出放大镜等类似的效果)。当时觉得很神奇,碍于水平有限,没做出来。前些日子突然想做一个透镜效果,就突然想到了这个效果,于是找出当年“珍藏”的代码决定一尝所愿。序二(08/12/06)自上一个版本的图片切割效果出来后,虽然也经常看到“框架开发这个如何如... 阅读全文
posted @ 2008-07-21 01:20 cloudgamer 阅读(34026) | 评论 (175)编辑
     摘要: 近来有客户要求用table显示一大串数据,由于滚动后就看不到表头,很不方便,所以想到这个效果。上次做table排序对table有了一些了解,这次更是深入了解了一番,发现table原来是这么不简单。还不清楚这个效果叫什么,有点像表头固定的效果,就叫行定位吧,本来想把列定位也做出来,但暂时还没这个需求,等以后有时间再弄吧。在淘宝的商品搜索页也看到类似的效果,但淘宝的不是table,而是li,而我这个是... 阅读全文
posted @ 2009-05-18 14:02 cloudgamer 阅读(6113) | 评论 (62)编辑
     摘要: 很久没写blog,太忙了。没什么时间写复杂的东西,重新把颜色渐变效果写一遍。关于颜色的效果一般就两个,颜色梯度变化和样式的颜色渐变,前者在ie中一般用滤镜实现。实例效果预览效果1:这是一个颜色梯度变化演示:预览效果2:一个颜色渐变的菜单:CropperTweenSliderResizeDrag预览效果3:颜色渐变的有趣应用,点击随机颜色渐变:点击随机换颜色程序说明【ColorGrads颜色梯度】程... 阅读全文
posted @ 2009-03-11 08:24 cloudgamer 阅读(8184) | 评论 (55)编辑
     摘要: Flash做动画时会用到Tween类,利用它可以做很多动画效果,例如缓动、弹簧等等。我这里要教大家的是怎么利用flash的Tween类的算法,来做js的Tween算法,并利用它做一些简单的缓动效果。实例效果Tween类型: Linear Quadratic Cubic Quartic Quintic Sinusoidal Exponential Circular Elastic ... 阅读全文
posted @ 2009-01-06 09:17 cloudgamer 阅读(10020) | 评论 (34)编辑
     摘要: 这个滑动条(拖动条)效果,一开始是参考了BlueDestiny的slider和Apple产品展示的样式,做了程序的原型。在做了拖放效果之后,我想应该可以做一个更好的了,所以重做一遍,完善和扩展了一些功能。碍于时间没有做得很强大,都是一些基本功能,希望各位多提意见!效果预览预览效果1:这个是仿Apple滑动条产品展示效果。除了原来的效果(包括点击缓动滑移、拖动滑移),我还加入了本程序特有的滚轮和键盘... 阅读全文
posted @ 2008-12-24 08:27 cloudgamer 阅读(13801) | 评论 (68)编辑
     摘要: 拖拉缩放效果,实现通过鼠标拖动来调整层的面积(宽高)大小。例如选框效果。这里的拖拉缩放比一般的选框复杂一点,能设置八个方位(方向)的固定触发点,能设置最小范围,最大范围和比例缩放。跟拖放效果一样,程序的原型也是在做图片切割效果的时候做出来的。但这个效果的参考少的多,基本上靠自己摸索,走了不少弯路,现在总算把自己想要的效果做出来了,程序跟上一个版本比较也已经“面目全非”,还是... 阅读全文
posted @ 2008-12-03 09:07 cloudgamer 阅读(12180) | 评论 (55)编辑
     摘要: 拖放效果,也叫拖拽、拖动,学名Drag-and-drop ,是最常见的js特效之一。如果忽略很多细节,实现起来很简单,但往往细节才是难点所在。这个程序的原型是在做图片切割效果的时候做出来的,那时参考了好几个同类的效果,跟muxrwc和BlueDestiny学习了不少东西。虽然每次整理都觉得很好了,不过每隔一段时间又会发现得某个地方可以改善,某个地方有错误,某些需求需要实现,就像自己学习的知识那样。... 阅读全文
posted @ 2008-11-17 08:48 cloudgamer 阅读(15967) | 评论 (80)编辑
     摘要: 一个日期联动选择器,年月日联动显示,准确显示日期(包括闰年日期),可自定义日期范围。效果预览:年 月 日 你选择的日期: 程序说明【select】先说清空一个select,最简单的方法是把options的length设为0就可以了:oSelect.options.length=0;给select添加option,有多个方法,如果用dom的标准方法是:varop=document.createEle... 阅读全文
posted @ 2008-10-28 10:30 cloudgamer 阅读(8518) | 评论 (48)编辑
     摘要: 这个仿163网盘无刷新文件上传系统,并没有用使用.net的控件,完全的手工制作。前台基本上是静态的,跟后台没有关系,所以后台用什么语言做都可以(后面有各个版本的实例下载)。本来觉得这个系统会很复杂,但把每个部分都分析清楚后,其实需要的技术并不高。不过当我把各个功能函数都整理好准备进行封装时,却发现要把程序封装不是那么容易,因为程序跟html的耦合度太高。然后我逐步把程序中操作html相关的部分分离... 阅读全文
posted @ 2008-10-20 08:20 cloudgamer 阅读(21592) | 评论 (251)编辑
     摘要: 序二(09/05/03) 近来还是那么忙,趁五一更新一下程序吧。这个版本主要增加和改进了以下东西:1,对字符串改用localeCompare来比较;2,一次排序中能使用多个排序对象(用于值相等时再排序);3,修正一些发现的问题;4,改进程序结构,个人觉得是更灵活更方便了;5,增加bool类型比较;6,添加attribute/property的内容;7,修正ie6/7的radio/checkbox状... 阅读全文
posted @ 2008-10-06 08:24 cloudgamer 阅读(13078) | 评论 (45)编辑

上一阵子做过一个图片切割效果,得到很多人关注。其中有很多人向我询问如何做一个真正的图片切割(裁剪),这里需要声明一下:
首先js是不能操作客户端文件的(除非特殊情况),所以图片的切割必须在后台处理,对于客户端的图片可以先上传再切割或者把图片和切割参数一起传递到服务器再处理(上传文件不在本次讨论范围,请自行修改);
还有是通过客户端传递的参数来处理图片,确实能得到展示图或预览图的效果(这是针对有些提出在后台处理的图片得不到预览图的效果来说的),下面会举例说明如何生成展示图那样的图片。


程序说明

【客户端部分】

客户端部分详细请参考图片切割效果(建议没有看过的先看那里的例子),这里说说要传递到后台的参数,建议用GetPos获取部分参数:

var p = ic.Url, o = ic.GetPos();
= o.Left,
= o.Top,
= o.Width,
= o.Height,
pw 
= ic._layBase.width,
ph 
= ic._layBase.height;


其中,ic.Url是图片地址:ic.Url,o.Left是水平切割,o.Top是垂直切割点,o.Width是切割宽度,o.Height是切割高度,ic._layBase.width是图片宽度,ic._layBase.height是图片高度。

可以这样传递这些参数:

$("imgCreat").src = "ImgCropper.ashx?p=" + p + "&x=" + x + "&y=" + y + "&w=" + w + "&h=" + h + "&pw=" + pw + "&ph=" + ph + "&" + Math.random();


其中图片地址、图片宽度、图片高度如果是预先设定好的话就可以不传递了。

【后台部分】

后台主要是进行图片的处理和输出。

【图片切割】

在后台获取前台传递的参数:

Code


然后就用这些参数对图片进行切割了,先说说切割的原理,主要分两部:切割和缩放。

切割和缩放的程序关键在这里:

gbmPhoto.DrawImage(imgPhoto, new Rectangle(00, CutWidth, CutHeight), PointX * imgPhoto.Width / PicWidth, PointY * imgPhoto.Height / PicHeight, CutWidth * imgPhoto.Width / PicWidth, CutHeight * imgPhoto.Height / PicHeight, GraphicsUnit.Pixel);


首先是在原图切割出需要的部分。切割需要的参数是PointX、PointY、CutWidth、CutHeight,因为在客户端的程序中是可以缩放原图来进行切割的,所以要在在切割原图时需要先按比例缩放这些参数,还要注意PointX和CutWidth需要水平方向的比例,PointY和CutHeight需要垂直方向的比例。例如(其中imgPhoto是原图):
水平切割点:PointX * imgPhoto.Width / PicWidth;
切割宽度:CutWidth * imgPhoto.Width / PicWidth;
垂直切割点:PointY * imgPhoto.Height / PicHeight;
切割高度:CutHeight * imgPhoto.Height / PicHeight。

用这些参数就可以对原图进行切割了。

然后是缩放原图。可以想象,当切割好原图后,只要把图宽高缩放到CutWidth和CutHeight就可以得到跟展示图一样的图片了:

new Rectangle(00, CutWidth, CutHeight), 


下面是处理图片的程序:

Code


当然对于不同的需求可能要生成的效果也不一样,但只要能灵活运用对于一般的需求基本都能实现了。
如果需要保存图片到服务器,那么可以用下面的方法保存图片:

bmPhoto.Save(文件物理路径, System.Drawing.Imaging.ImageFormat.Jpeg);


【IHttpHandler】

程序通过ashx文件用IHttpHandler发送切割生成的图片,参考使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法
“利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态图片,生成动态文本等内容。”

最后设置数据输出类型context.Response.ContentType,并使用context.Response.OutputStream向客户端输出图片数据:

context.Response.ContentType = "image/jpeg";
ResetImg(System.Web.HttpContext.Current.Server.MapPath(Pic), PicWidth, PicHeight, PointX, PointY, CutWidth, CutHeight).WriteTo(context.Response.OutputStream);


这个输出数据的方法适合用在不需要回发的数据输出中,例如ajax、动态图片等,关于这方面更详细的内容请看IHttpHandler接口

下面是完整服务器端代码:

Code


各位有什么建议或意见欢迎留言讨论,由于涉及后台操作,请下载完整实例测试。

下载完整测试实例(.net版本)
下载完整测试实例(asp版本)

ps:实例中没有加入图片,测试时请自己插入一张图片(默认是1.jpg)。
ps2:应要求把asp版本加上了,但需要支持aspjpeg组件。

posted @ 2008-10-05 00:20 cloudgamer 阅读(14701) | 评论 (103)编辑
     摘要: 近来要做一个LightBox的效果(也有的叫Windows关机效果),不过不用那么复杂,能显示一个内容框就行了。这个效果很久以前就做过,无非就是一个覆盖全屏的层,加一个内容显示的层。不过showbo教了我position:fixed这个新特性,决定重写一遍。先看效果:LightBox 内容显示 ps:“定位效果”的意思是屏幕滚动也能固定位置。程序说明:要实现一个简单的Lig... 阅读全文
posted @ 2008-09-15 02:57 cloudgamer 阅读(31076) | 评论 (143)编辑
     摘要: 程序集合了宽度、高度、透明度、top、left的渐变,可以自定义渐变项目和各个项目的初始值结束值,还能以任意点(定点)为中心渐变。使用该程序能实现很多常见的动画特效,包括大小变换、位置变换、渐显渐隐等等。效果: 程序说明: 渐变效果的原理就是利用定时器不断设置值,如果要减速效果就设置一个步长(详细看JavaScript 弹簧效果) 。这里只是把能渐变的属性(透明度、宽、高、left、top)整合在... 阅读全文
posted @ 2008-08-27 00:17 cloudgamer 阅读(10958) | 评论 (50)编辑

近来要做一个记事本系统,想找一个合适的日历控件,但网上的都是那种日历选择控件。
于是到qq的记事本系统找了一个,但里面的算法有点落后,所以用了它的样式自己写了个。

效果:

<<
>>


程序说明

【Date】

这个日历控件运用了很多Date相关操作和方法。

先说说Date对象几个有用的属性:
getFullYear:返回年份值
getMonth:返回月份值
getDate:返回一个月中的日期值
getDay:返回一周中的日期值

其中对getDay可能比较陌生,下面列出值对应的星期:
值 星期
0 星期天
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六

这几个属性都是根据本地时间获取的,还有getUTCFullYear、getUTCMonth、getUTCDate、getUTCDay这几个属性是全球标准时间对应的值。

下面说说获取日期对象,获取当前日期很简单:

new Date()


获取指定日期:

new Date(this.options.SelectDay)


获取指定年月日的日期:

new Date(this.Year, this.Month - 1, d)


下面是几个比较有技巧的地方:

首先,做日历控件时需要知道该月第一天离星期天的天数,参照getDay对应值,发现这刚好等于该月第一天的getDay值,所以可以这样获得:

new Date(this.Year, this.Month - 11).getDay()

还有是获取该月的天数,这里比较精妙,通过获取该月最后一天的getDate值就可以得到该月的天数,但没有办法直接获取该月最后一天。
这里有一个方法,当获取指定年月日的日期时,设置日参数为0,就可以获取上一个月的最后一天,所以可以这样获取:

new Date(this.Year, this.Month, 0).getDate()


这个方法是很久以前在别人代码中发现的。

使用说明:

首先是实例化一个Calendar,并设置参数。
参数说明:
Year:要显示的年份
Month:要显示的月份
SelectDay:选择日期
onSelectDay:在选择日期触发
onToday:在当天日期触发
onFinish:日历画完后触发

一般SelectDay设置成选择了的日期,并在onSelectDay中设置一个函数用来设置这个日期的样式,
例如实例里SelectDay设置成今个月10号并在那天样式设为onSelect:

SelectDay: new Date().setDate(10),
onSelectDay: 
function(o){ o.className = "onSelect"; },

而onToday就用来设置今日日期的样式,
例如实例里面把今天的日期的样式设为onToday:

onToday: function(o){ o.className = "onToday"; },

在onFinish中可以放需要设置日历的程序。
可以通过this.Year和this.Month获取当前日历显示的年份和月份。
对有数据的日期的也在这里设置,例如实例中是有一个当前月份的有数据的日期列表,然后根据这个列表对相应的日期进行设置:

Code

实例中是固定了这个日期列表,实际应用中可以根据年份月份获取对应的日期列表,
个人推荐用年份月份通过ajax获取。

程序还有下面这几个方法:
NowMonth:显示当前月
PreMonth:显示上一月
NextMonth:显示下一月
PreYear:显示上一年
NextYear:显示下一年
PreDraw:根据日期参数画日历

程序代码:

Code



测试代码:

Code




完整实例下载

posted @ 2008-08-23 00:25 cloudgamer 阅读(9022) | 评论 (37)编辑

由于asp的cookie是经过url编码的,所以读之前要unescape一下。

下面是我用正则的方法取cookie,包括单值和多值:

/************************************************** 
参数说明: 
sMainName Cookie名 
sSubName Cookie子键名,留空表示单值Cookie 
*************************************************
*/ 
function GetCookie(sMainName, sSubName)
{
    
var re = new RegExp((sSubName ? sMainName + "=(?:.*?&)*?" + sSubName + "=([^&;$]*)" : sMainName + "=([^;$]*)"),"i");
    
return re.test(unescape(document.cookie)) ? RegExp["$1"] : "";
}


有不完善的话,欢迎指出。

posted @ 2008-08-08 16:35 cloudgamer 阅读(2470) | 评论 (20)编辑

ie7的li:hover问题

 

<!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> 
<head> 
</head> 
<body>
<style type="text/css">  
#list span 
{ left:-999em;position: absolute; } 
#list:hover span, #list.on span 
{ left:auto; }
</style> 
<ul> 
<li id="list">产品介绍<span>产品一</span>  
</li> 
</ul> 
<input type="text"/>
<script>
var o = document.getElementById("list"); 
o.onmouseover
=function() { this.className="on"; }
o.onmouseout
=function() { this.className=""; } 
</script> 
</body> 
</html>

 

 ie6和ff都很正常

但ie7就有问题,当把光标放在文本框中,然后再把鼠标放在菜单上,弹出来的菜单就不会消失了

解决方法是去掉#list:hover或者加一个样式在onmouseout中设置

但未知什么原因

 

 

ie6的line-height失效问题

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<style="line-height:30px;"> 服务:
  
<input name="" type="text"/>
  
<br />
  特别推荐:
  
<input name="" type="text"/>
  
<br />
  交通停车:
  
<input name="" type="text"/>
</p>
</body>
</html>

 

ie7和ff显示正常
但ie6的line-height就没效果

未知解决方法,未知原因

 

ie高度设置问题

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<body>
<style type="text/css">
*
{ padding:0px; margin:0px;}
html,body
{overflow:hidden;height:100%; width:100%;}
</style>
<table style="width:100%; height:100%;" border="1" cellspacing="0" cellpadding="0">
  
<tr>
    
<td style="height:100px;">22222222222</td>
  
</tr>
  
<tr>
    
<td>mid</td>
  
</tr>
  
<tr>
    
<td style="height:100px;">111111111</td>
  
</tr>
</table>
</body>
</html>

 

这是一个全屏的三层样式

ff的效果应该是正确的
但在ie里上下两块的高度都不是设定的100px

未知原因,未有解决方法

 

 js的正则问题

 

function a(val) 

  
var re = /^\d+$/g;
  alert(re.lastIndex);
  
return re.test(val); 

alert(a(
5)); 
alert(a(
6));

 

用ie的话是0 true 0 true
用ff的话是0 true 1 false

原因没有弄清楚

不过直接用new RegExp的方法能解决

 

ie透明背景问题

 

Code

 

ff中正常,在ie中点击div中文字以外的部分会没反应。

如果有background-color就没问题,未知原因。

 

document.body.appendChild()导致IE已终止操作

 

以下代码会导致在ie出错“已终止操作”,ff中是没问题的:

Code

 

但脚本如果不套在div里面又没问题,

未知原因,估计跟dom有关(网上说是跟body的加载顺序有关)。

解决方法是body加载完之后执行(ie特有的document.body.onload),或用insertBefore代替,例如:

document.body.insertBefore(obj, document.body.childNodes[0]);



ie的table的td的宽度问题

Code

以上3个table的结构是一样的其中都有一个td是100宽度只是内容不同,
在ff中3个table显示的效果是一样的,但用ie看会发现第一第二个table会无端多出一段空白

解决方法:给table添加样式table-layout:fixed;,未定义时,单元格宽度会按内容宽度的比例自动调整。

 

ie6/7的hr行距问题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
1111111111111111111111111111111
<hr style="margin:0; padding:0;"/>
22222222222222222222222222222222
</body>
</html>

 

即使给hr设置了margin和padding都是0,但ie6和ie7还有有一个间距。
未知原因,未找到解决方法,建议用div的border模拟。

 
IE8的链接触发问题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
a:hover {
    background:#
000;
}
</style>
</head>
<body>
<div style="border:1px solid #1633bf;"> <a href="#">测试1</a> <a href="#">测试2</a> </div>
</body>
</html>

 

用ie8鼠标在“测试2”后面移动,居然会触发“测试1”的hover。
未知原因,未有解决方法。

 

posted @ 2008-07-27 03:31 cloudgamer 阅读(2261) | 评论 (14)编辑