存档: 标签: ‘Javascript’

用HTML+Javascript开发AIR桌面程序

11 条评论 2009年11月7日

    早就听说Adobe Air可以用HTML+Javascript的方式来开发,但是直到前不就才开始研究学习。做了几个air的小程序,其中遇到了很多困难。Air的资料网上比较少。所以遇到问题有时候真不知道怎么办。

    其中一个问题是弹出提示窗口(屏幕右下角或者右上角那种提示性的临时窗口),不知道怎么调整大小和位置。找了好多资料,后来终于明白了。弹出窗口的代码如下:

var options = new air.NativeWindowInitOptions();
options.systemChrome = "none"; //取消系统窗口外框
options.type = "lightweight"; //轻量级窗口
options.transparent = true; //允许透明
var bounds = new air.Rectangle(100,200,100,100); 

var newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, bounds);
newHTMLLoader.load(new air.URLRequest("notify.html"));
newHTMLLoader.stage.nativeWindow.alwaysInFront = true; //窗口始终置顶

上面这段代码会在屏幕的左上方(x:100,y:200)创建一个宽高都是100px的HTML窗口,内容是notify.html。
    其中,newHTMLLoader.window 可以访问到新建的窗口。可以预先定义一些函数,供窗口加载完后调用。比如:

newHTMLLoader.window.on_load = function()
{
     alert('loaded!');
}

然后在notify.html页面里面写上 window.onload = on_load; 就可以了。

    而控制窗口宽高、位置的对象是newHTMLLoader.stage.nativeWindow 。可以通过设置这个对象的 x,y,width,height(而不是我们通常认为的left,top,width,height)属性来改变窗口的长宽和位置。 在nofity.html里对应的对象是window.nativeWindow。

    nativeWindow貌似是ActionScript里面的比较常用的东西。不过对我们这种没有研究过AS的人来说,不容易想到控制位置是用x和y,而不是left和top。。。。。。

    下面说下开发AIR程序比开发WEB程序爽的地方:

  • 在应用程序沙箱中的代码可以任意跨域访问!而且更爽的是AIR会自动保存和处理Cookie,也就是说我可以用AJAX来模拟登录,之后可以直接用AJAX取登录后才能取得的内容而不用担心Cookie!真是太神奇了!
  • AIR采用Webkit引擎,不用担心跨操作系统的兼容性。最多是字体显示稍微不同而已。而且可以使用大部分的JS框架,比如JQuery!
  • AIR支持部分CSS3! 其中比较爽的是可以很容易的实现圆角效果,颜色可以使用RGBA(第四个参数是透明度)。好处是我们可以很容易的制作一个背景半透明,但是内容不透明的圆角提示窗口~~(例如:-webkit-border-radius:5px; background-color:rgba(20%,20%,20%,0.8); )
  • 支持JS进行文件读取等本地操作,支持本地SQL等。。

做了一个山寨的Omegle。。chendian.net

20 条评论 2009年9月30日

由于最近omegle很火。于是就想copy一个到国内。 正好我以前做过聊天室~哈哈。2天就搞定了。 先是在学校内部测试,修正了一些bug 。然后就放到外网。 因为聊天过程中会建立很多长连接。所以把服务器上的apache换成了nginx。希望能扛得住那么多的并发。

域名: http://chendian.net 沉淀时光。

网站的功能是跟一个陌生人聊天,随机配对。而且是只能2个人聊。不是传统的聊天室。

Chendian.net

Chendian.net

Flash + Javascript 让网页元素发光 的插件 glow!

9 条评论 2008年11月6日

作者:Longbill ( www.longbill.cn ) longbill.cn [@] gmail.com
现在测试通过: IE6 IE7 Firefox3 Opera Safari(Mac) Chrome
2008-11-6

    前两天突发奇想,能不能让网页上的元素很容易的发光?结果正好发现flash里面有这样的滤镜。于是就硬着头皮写了个flash,实现了发光flash的动态生成。再结合javascript实现定位,把发光的flash放到真实的dom后面。于是神奇的事情就发生了。。。

    这个插件可以很容易的实现网页元素的发光或者阴影效果!目前只支持矩形发光效果,文字发光还在探索中。。。。

    源文件下载地址:JS Flash(右键另存为)

先看效果:

继续阅读…

通用获得网页的实际大小的javascript函数

3 条评论 2008年10月16日

    在做web2.0风格的弹出窗口的时候,经常需要把背景变暗和屏蔽。这时就需要得到一个网页的宽高数据。这里就会有很多细节和兼容性问题。经过长期摸索,现提供以下函数,希望对大家有用。这个函数的具体作用是获得网页的高度和宽度,如果网页没有窗口可见区域高的时候则取窗口的可见区域高度和宽度。返回值为一个对象 ,例如 { width:123, height:345}。现在兼容几乎所有的浏览器。

javascript代码:

function get_page_size()
{
    var re = {};
    if (document.documentElement && document.documentElement.clientHeight)
    {
        var doc = document.documentElement;
        re.width = (doc.clientWidth>doc.scrollWidth)?doc.clientWidth-1:doc.scrollWidth;
        re.height = (doc.clientHeight>doc.scrollHeight)?doc.clientHeight:doc.scrollHeight;
    }
    else
    {
        var doc = document.body;
        re.width = (window.innerWidth>doc.scrollWidth)?window.innerWidth:doc.scrollWidth;
        re.height = (window.innerHeight>doc.scrollHeight)?window.innerHeight:doc.scrollHeight;
    }
    return re;
}

发布MiniAJAX聊天室程序 1.2 beta

143 条评论 2008年3月25日

Mini AJAX Chatroom By Longbill 1.02 beta

作者: Longbill  http://www.longbill.cn

longbill.cn@gmail.com

Longbill all rights reserved

2008-03-26

协议

—————————–

创作共用(Creative Commons)

你可以免费:

   * 拷贝、分发、呈现和表演当前作品

   * 制作派生作品

但是必须基于以下条款:

  * 署名。你必须明确标明作者的名字。.

  * 非商业用途。 你不可将当前作品用于商业目的。

  * 保持一致。 如果你基于当前作品更改、变换或构造新作品,你应当按照与当前协议完全相同的协议分发最终作品

  * 对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款

  * 在得到作者的明确允许下,这里的某些条款可以放弃

此约定是法律文本 (完整的协议)的简单易读概要

演示

—————————–

http://longbill.cn/down/sample/chat.php

特点

—————————–

1.小巧,整个程序只有一个20多KB的php文件

2.高效,使用ajax技术传输数据,服务器负担较小

3.保存聊天记录到php文件(不会被下载)

4.可以设置文字样式

5.显示在线用户

6.支持发送图片

7.完全支持IE6+ ,Firefox,Opera,Safari等主流浏览器

改进

—————————–

1.完全解决1.0版客户端内存泄露问题

2.大大减少了用户丢话的概率

3.优化了用户在线的判断标准

4.增加用户关闭聊天窗口的警告,防止误操作

5.增加发图片时候的url验证,防止发送恶意代码

设置

—————————–

使用文本编辑器打开程序文件进行具体设置

安装

—————————–

将这个程序传到服务器上,输入对应的url就可以了。

如果是Linux主机,请先自行建立 rooms 文件夹,并将此文件夹属性设置成0777

使用

—————————–

默认的聊天数据保存路径为 rooms/ 目录(如果没有,程序会自动创建)

调用时后加参数 room=房间名 , 比如 chat.php?room=happy,此时就程序就会自动创建 rooms/happy.php 文件来保存聊天数据。

下载

—————————–

http://longbill.cn/down/miniajaxchatroom.zip

Javascript拖动效果函数

7 条评论 2007年4月15日

自己根据网上的一些代码资料写的拖动网页元素的代码

样例:  点击这里

function drag(o,s)

{

if (typeof o == "string") o = document.getElementById(o);

o.orig_x = parseInt(o.style.left) - document.body.scrollLeft;

o.orig_y = parseInt(o.style.top) - document.body.scrollTop;

o.orig_index = o.style.zIndex;

//author: www.longbill.cn

o.onmousedown = function(a)

{

this.style.cursor = "move";

this.style.zIndex = 10000;

var d=document;

if(!a)a=window.event;

var x = a.clientX+d.body.scrollLeft-o.offsetLeft;

var y = a.clientY+d.body.scrollTop-o.offsetTop;

d.ondragstart = "return false;"

d.onselectstart = "return false;"

d.onselect = "document.selection.empty();"

if(o.setCapture)

o.setCapture();

else if(window.captureEvents)

window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);

d.onmousemove = function(a)

{

if(!a)a=window.event;

o.style.left = a.clientX+document.body.scrollLeft-x;

o.style.top = a.clientY+document.body.scrollTop-y;

o.orig_x = parseInt(o.style.left) - document.body.scrollLeft;

o.orig_y = parseInt(o.style.top) - document.body.scrollTop;

}

d.onmouseup = function()

{

if(o.releaseCapture)

o.releaseCapture();

else if(window.captureEvents)

window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);

d.onmousemove = null;

d.onmouseup = null;

d.ondragstart = null;

d.onselectstart = null;

d.onselect = null;

o.style.cursor = "normal";

o.style.zIndex = o.orig_index;

}

}

if (s)

{

var orig_scroll = window.onscroll?window.onscroll:function (){};

window.onscroll = function ()

{

orig_scroll();

o.style.left = o.orig_x + document.body.scrollLeft;

o.style.top = o.orig_y + document.body.scrollTop;

}

}

}

发布一个迷你AJAX聊天程序[聊天室]

30 条评论 2006年8月16日

新版本已经发布

http://www.longbill.cn/blog/archives/2008/03/ajaxchatroom.html

Mini AJAX Chatroom By Longbill

http://www.longbill.cn

Longbill all rights reserved

2006-08-16

演示地址: http://longbill.cn/down/sample/chat.php

打开文件进行具体设置

使用方法,将这个程序传到服务器上,运行就可以了。

默认的数据保存路径为 rooms/ 目录

调用时后加参数 room=房间名 , 比如 chat.php?room=php,此时就程序就会自动创建 rooms/php.php 文件来保存数据

如有疑问,请到 www.longbill.cn 给我留言

下载地址 http://longbill.cn/down/miniajaxchatroom.zip

[原创]XML的代替者—-JSON

11 条评论 2006年8月16日

在phpx.com上原载

我个人觉得PHP与Javascript各有长处,如果能完美的结合起来,那将创造出许许多多的奇迹! 我是初次写此类文章,Bug难免,请各位指正~

    现在AJAX应用非常流行,而在AJAX中客户端Javascript和服务端动态脚本的通信是关键。如果传输的信息比较简单,通常我们会直接采用字符串的方式,如果信息结构复杂一点,则通常用XML文档。XML文档虽然应用广泛,但是用php生成和用Javascript处理却不是一件很容易的事情。这里我推荐一种XML文档的比较好简化替代方案:JSON!

    首先我们来了解一下Javascript的基础知识。

    1.创建数组,可以用JS内建的类Array来初始化,也可以用JSON符号"[]"。下面通过两种方式创建的arr1和arr2的实质是一样的:

var arr1 = new Array();

arr1[0] = "apple";

arr1[1] = "google";

arr1[2] = "longbill";

var arr2 = ["apple","google","longbill"];

注意,数组的索引也可以是字符串,如 arr1["name"] = "longbill"; 这时的数组就相当于对象了。。。

    2.创建对象,可以用JS内建的类Object来初始化,也可以用JSON符号"{}"。下面通过两种方式创建的obj1和ob2的实质也是一样的:

var obj1 = new Object();

obj1.name = "longbill";

obj1.age = 18;

var obj2 = { name:"longbill",age:18 };

注意,这里"{"和"}"之间必须写成"键:值"的形式,而且不同的"键:值"之间要用","分割。 "键"中也可以包含空格等特殊字符,此时要用""(引号)来引用,如 "phone number":123456

    其实在JS中,数组的本质是一个对象,对象本身也是一个数组。所以, obj1.name 和 obj1["name"] 是同一个引用。

    我们还可以通过JSON符号的嵌套来定义复杂的S对象:

var people = [

    {

        name:"longbill",

        age:18

    },

    {

        name:"neal",

        age:19

    },

    {

        name:"glocklee",

        age:17

    }

];

//这个应该看的懂吧~~

大部分XML文档都可以用JSON来表达:

<?xml version="1.0"?>

<root>

  <book>

    <name>Ju love</name>

    <price>$15</price>

  </book>

  <book>

    <name>Javascrip</name>

    <price>$25</price>

  </book>

</root>

如果用JSON就可以表达为:

{

root:

[

  {

     name:"Ju love",

     price:"$15"

  },

  {

     name:"Javascript",

     price:"$25"

  }

]}

是不是简化很多?

    而且客户端JS处理起来也很简单,只要用执行字符串函数 "eval" 就可以将JSON信息提取出来,而如果是XML文档,那就不的不用大量的标准DOM操作来提取其中的数据。如:

//已经用AJAX从服务端下载了一个JSON文件(字符串),保存在变量 json 里

eval("var myvar = "+json);

//这样,JSON里的信息就表达在myvar这个变量里了。

缺点:一旦JSON的格式错误,将导致服务端JS系统错误,甚至崩溃。

   解决办法:

   最好在eval之前使用try(试探执行),如

//已经用AJAX从服务端下载了一个JSON文件(字符串),保存在变量 json 里

try {

    eval("var myvar = "+json);

} catch(e) { alert(’json syntax error!’); }

//这样,即使JSON格式错误,也只会弹出一个提示框,而不会抛出一个脚本错误!

得到元素真实的背景颜色的函数[javascript]

2 条评论 2006年8月2日

这个函数来自Rico,自己改了一下。

说明: 

    传入参数一个,为元素的id值或元素本身,返回为元素的真实背景色值(字符串)。 值得一提的是IE里面返回的是16进制的值,而Mozilla则是rgb值。

演示地址:  http://longbill.cn/down/sample/getbg.htm

function getBg(element)

{//author: Longbill (www.longbill.cn)

if (typeof element == "string") element = document.getElementById(element);

if (!element) return;

cssProperty = "backgroundColor";

mozillaEquivalentCSS = "background-color";

if (element.currentStyle)

var actualColor = element.currentStyle[cssProperty];

else

{

var cs = document.defaultView.getComputedStyle(element, null);

var actualColor = cs.getPropertyValue(mozillaEquivalentCSS);

}

if (actualColor == "transparent" && element.parentNode)

return arguments.callee(element.parentNode);

if (actualColor == null)

return "#ffffff";

else

return actualColor;

}

发布BlueShow v1.0 图片浏览器(类似lightbox)

11 条评论 2006年7月2日

好多天没有发过日志了~

最近写了一个图片浏览器,是为PHPCMS文件管理器设计的,但后来看到了Lightbox,所以就改了一下,可以给一般的网页使用。

演示及说明地址:  http://longbill.cn/down/sample/blueshow/index.htm

使用方法: 

1.下载 blueshow.js 文件,放到服务器上 (点击这里下载) 你也可以直接使用这个: http://longbill.cn/down/blog/blueshow.js



2.在你要用此程序的网页中写上这句(在和之间):

<script src=’http://yoursite/blueshow.js’></script>

 http://yoursite/blueshow.js 为你放置程序的地址

3.程序可以使用参数 比如 blueshow.js?lock=1&autorun=1

  //说明:

  //取值范围为0和1

  //lock:表示显示图片时是否锁定原网页

  //autorun: 是否自动初始化(如果你的网页含有一些比较慢的统计代码强烈建议将此值设置为0)

  //如果autorun=0那么请在网页的最后(统计代码之前)加上 

<script>BlueShow();</script>

 详情见 http://longbill.cn/down/sample/blueshow/index.htm

4.符合条件的图片包括:

  a.

<a href=’fdsfa.jpg’>链接</a>

(指向图片的链接,包括gif,jpg,png,jpeg,bmp,等,具体见blueshow.js。 如果图片是动态生成的,比如 img.php?id=3 那么在后面加上 "&.gif" 即可)

  b.

<img class=’blueshow’ src=’xxx.gif’ />

 (class名中含有 "blueshow" 字符的img,如果img本来有class属性,那么再原来的class名后加空格再加"blueshow"即可)

 
视觉系火星播报河蟹娱乐朝花夕拾牛人很牛灰太狼软白沙八月洗澡火影那些事儿热豆腐