[Javascript]鼠标事件

mikel阅读(548)

事件 浏览器支持 描述
onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击
onDblClick IE4|N4|O 鼠标双击事件
onMouseDown IE4|N4|O 鼠标上的按钮被按下了
onMouseUp IE4|N4|O 鼠标按下后,松开时激发的事件
onMouSEOver IE3|N2|O3 当鼠标移动到某对象范围的上方时触发的事件
onMouseMove IE4|N4|O 鼠标移动时触发的事件
onMouSEOut IE4|N3|O3 当鼠标离开某对象范围时触发的事件
onKeyPress IE4|N4|O 当键盘上的某个键被按下并且释放时触发的事件.[注意:页面内必须有被聚焦的对象]
onKeyDown IE4|N4|O 当键盘上某个按键被按下时触发的事件[注意:页面内必须有被聚焦的对象]
onKeyUp IE4|N4|O 当键盘上某个按键被按放开时触发的事件[注意:页面内必须有被聚焦的对象]
页面相关事件
事件 浏览器支持 描述
onAbort IE4|N3|O 图片在下载时被用户中断
onBeforeUnload IE4|N|O 当前页面的内容将要被改变时触发的事件
onError IE4|N3|O 捕抓当前页面因为某种原因而出现的错误,如脚本错误与外部数据引用的错误
onLoad IE3|N2|O3 页面内空完成传送到浏览器时触发的事件,包括外部文件引入完成
onMove IE|N4|O 浏览器的窗口被移动时触发的事件
onResize IE4|N4|O 当浏览器的窗口大小被改变时触发的事件
onScroll IE4|N|O 浏览器的滚动条位置发生变化时触发的事件
onStop IE5|N|O 浏览器的停止按钮被按下时触发的事件或者正在下载的文件被中断
onUnload IE3|N2|O3 当前页面将被改变时触发的事件
表单相关事件
事件 浏览器支持 描述
onBlur IE3|N2|O3 当前元素失去焦点时触发的事件 [鼠标与键盘的触发均可]
onChange IE3|N2|O3 当前元素失去焦点并且元素的内容发生改变而触发的事件 [鼠标与键盘的触发均可]
onFocus IE3|N2|O3 当某个元素获得焦点时触发的事件
onReset IE4|N3|O3 当表单中RESET的属性被激发时触发的事件
onSubmit IE3|N2|O3 一个表单被递交时触发的事件
滚动字幕事件
事件 浏览器支持 描述
onBounce IE4|N|O 在Marquee内的内容移动至Marquee显示范围之外时触发的事件
onFinish IE4|N|O 当Marquee元素完成需要显示的内容后触发的事件
onStart IE4|N|O 当Marquee元素开始显示内容时触发的事件
编辑事件
事件 浏览器支持 描述
onBeforeCopy IE5|N|O 当页面当前的被选择内容将要复制到浏览者系统的剪贴板前触发的事件
onBeforeCut IE5|N|O 当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发的事件
onBeforeEditFocus IE5|N|O 当前元素将要进入编辑状态
onBeforePaste IE5|N|O 内容将要从浏览者的系统剪贴板传送[粘贴]到页面中时触发的事件
onBeforeUpdate IE5|N|O 当浏览者粘贴系统剪贴板中的内容时通知目标对象
onContextMenu IE5|N|O 当浏览者按下鼠标右键出现菜单时或者通过键盘的按键触发页面菜单时触发的事件 [试试在页面中的<body>中加入onContentMenu="return false"就可禁止使用鼠标右键了]
onCopy IE5|N|O 当页面当前的被选择内容被复制后触发的事件
onCut IE5|N|O 当页面当前的被选择内容被剪切时触发的事件
onDrag IE5|N|O 当某个对象被拖动时触发的事件 [活动事件]
onDragDrop IE|N4|O 一个外部对象被鼠标拖进当前窗口或者帧
onDragEnd IE5|N|O 当鼠标拖动结束时触发的事件,即鼠标的按钮被释放了
onDragEnter IE5|N|O 当对象被鼠标拖动的对象进入其容器范围内时触发的事件
onDragLeave IE5|N|O 当对象被鼠标拖动的对象离开其容器范围内时触发的事件
onDragOver IE5|N|O 当某被拖动的对象在另一对象容器范围内拖动时触发的事件
onDragStart IE4|N|O 当某对象将被拖动时触发的事件
onDrop IE5|N|O 在一个拖动过程中,释放鼠标键时触发的事件
onLoseCapture IE5|N|O 当元素失去鼠标移动所形成的选择焦点时触发的事件
onPaste IE5|N|O 当内容被粘贴时触发的事件
onSelect IE4|N|O 当文本内容被选择时的事件
onSelectStart IE4|N|O 当文本内容选择将开始发生时触发的事件
数据绑定
事件 浏览器支持 描述
onAfterUpdate IE4|N|O 当数据完成由数据源到对象的传送时触发的事件
onCellChange IE5|N|O 当数据来源发生变化时
onDataAvailable IE4|N|O 当数据接收完成时触发事件
onDatasetChanged IE4|N|O 数据在数据源发生变化时触发的事件
onDatasetComplete IE4|N|O 当来子数据源的全部有效数据读取完毕时触发的事件
onErrorUpdate IE4|N|O 当使用onBeforeUpdate事件触发取消了数据传送时,代替onAfterUpdate事件
onRowEnter IE5|N|O 当前数据源的数据发生变化并且有新的有效数据时触发的事件
onRowExit IE5|N|O 当前数据源的数据将要发生变化时触发的事件
onRowsDelete IE5|N|O 当前数据记录将被删除时触发的事件
onRowsInserted IE5|N|O 当前数据源将要插入新数据记录时触发的事件
数据绑定
事件 浏览器支持 描述
onAfterPrint IE5|N|O 当文档被打印后触发的事件
onBeforePrint IE5|N|O 当文档即将打印时触发的事件
onFilterChange IE4|N|O 当某个对象的滤镜效果发生变化时触发的事件
onHelp IE4|N|O 当浏览者按下F1或者浏览器的帮助选择时触发的事件
onPropertyChange IE5|N|O 当对象的属性之一发生变化时触发的事件
onReadyStateChange IE4|N|O 当对象的初始化属性值发生变化时触发的事件

[PHP]让PBDigg和UCenter通信成功

mikel阅读(1012)

这个是我在内网搭的,看到pb出2.0正式版啦,就来看下

其实很简单,你可以先安装好PB,然后修改根目录下data\SQL.inc.php文件,只要在最下边的“?>”之前,添加如下代码:

/*===============UCenter======================*/

define(’UC_CONNECT’, ‘mySQL’);

define(’UC_DBHOST’, ‘localhost’);

define(’UC_DBUSER’, ‘数据库用户名’);

define(’UC_DBPW’, ‘数据库密码’);

define(’UC_DBNAME’, ‘数据库名’);

define(’UC_DBCHARSET’, ‘utf8′); /*编码*/

define(’UC_DBTABLEPRE’, ‘`test`.uc_’);/*数据库表名前缀,uc的*/

define(’UC_DBCONNECT’, ‘0′);

define(’UC_KEY’, ‘f5J0Y525Ca9bk1CfP0u2BcdcZ4Y0d0B6c6B9H8Wa02Je8fRc1ej2yc61s897Jf22′);/*key 你可以在这里边随便改个地方然后拿来用就可以啦*/

define(’UC_API’, ‘http://bb.clin003.com/u/c’);/*这个是uc的路径url*/

define(’UC_CHARSET’, ‘utf-8′);

define(’UC_IP’, ‘192.168.1.96′);/*uc的所在ip*/

define(’UC_APPID’, ‘2′);

define(’UC_PPP’, ‘20′);

这个是我参考uchome文件修改来的。

然后到PB后台:系统设置 » 功能设置 开启UC整合,确定就可以啦,

然后再到uc后台编辑pb的应用设置

应用名称:随便

接口 URL:http://bb.clin003.com/pb (你的pb所用的url)

应用 IP:可以不填

通信密钥:上边的,让你修改几个地方的那串字符

是否开启同步登录:是

标签单条显示模板:

<a href=”{url}” target=”_blank”>{subject}</a>

标签模板标记说明:可以没有

应用类型:其他

是否接受通知:是

然后提交,就看到通信成功

, ,

转载原创文章请注明,转载自:Lin’s空间|Only[http://clin003.com]

[Flash]视频照相系列教程之三

mikel阅读(804)

到了这一步,基本上算是差不多了,在大体的框架上,就剩下预览与保存的做法了。
       第一步:预览
       在我们已经把视频,TileList组装完成后,就需要实现一个功能,就是我们需要重新预览下以前拍的照片,那么由此所引申出来的动作必然就是我们需要点 击在TileList里的小图,这一步很简单,我们先来玩一个TileList点击的小代码,后面就套一下,就很容易了。
      按照第二部分,认识TileList刚开始的那段小代码,新的代码如下:

import fl.events.ListEvent;
var i:uint;
for(i=0;i<10;i++){
  var tempMc:Object= new Object();
  tempMc.label = "PIC"+i;
  tempMc.source = new mc();
  lists.addItem(tempMc);
  
}
lists.addEventListener(ListEvent.ITEM_CLICK,thumbClick);
function thumbClick(event:ListEvent):void{
  trace(event.item.label);
}

  
      从上面简单的代码,就能知道在TileList里单击其中的图标,该怎么去实现。


      好,那么重新我们回到原来的例子上,我们已经知道TileList点击怎么实现,那么我们需要在舞台上放一个空的实例,用于加载点击图标后,传输过来的具体内容,我们这里只需要图,别的不需要。当然你可以同样传送其他信息。
      我的打算是新的预览实例放在X轴为340,Y轴为0,同时在舞台上再放一个BUTTON,实例名:down_btn,用于保存事件的触发
      预览的做法也是跟截图的做法一样,用Bitmap,和BitmapData,在前面的教程代码上继续加代码:

import fl.events.ListEvent;
var review:Sprite;
function thumbClick(event:ListEvent):void {
  var bmd:BitmapData=new BitmapData(320,240);
  bmd.draw(event.item.source);
  var bit:Bitmap=new Bitmap(bmd);
  review = new Sprite();
  addChild(review);
  review.x = 340;
  review.addChild(bit);
  //用于下载当前的图片
  //down_btn.addEventListener(MouseEvent.CLICK,downJpg);
}

       这样,这部分的功能算是完成了,也不难。下一部分的内容在于把当前的图保存到本地上,这个有很多方法,我说的是其中一种,但是大体的思路都是一样的。我先说下我的思路。
      还记得我以前写的Flash简易聊天室教程里的三板斧教程吗? 这个主要讲的是FLASH里的数据传输到外部服务器的,这里我要保存图片,那么也是把当前的图片数据传输出去,那么我们就需要CORDLIB里的一个 类:JPGEncoder类,把当前的图片数据转化成ByteArray,传输出去,如果你像我用的是PHP的话,就可以用PHP把ByteArray写 到本地上,变回原来的图片。


  
       第二步:保存
       首先我们要去http://code.google.com/p/as3corelib/把JPGEncoder类下下来。
       然后下一步就是继续完成down_btn按钮触发的下载事件构造函数:downJpg  
      

import flash.utils.ByteArray;
import com.adobe.encoding.JPEGEncoder;
function downJpg(event:MouseEvent):void {
  //?name=@@@@@@就是设置下载下来的图片名字,这个可以根据你自己想要的来修改。
  var url:String="http://localhost/downjpg.php?name=testJpg.jpg";
  var bmd:BitmapData = new BitmapData(320,240);
  bmd.draw(review);
  //下载截图质量设置
  var jpgEncoder:JPEGEncoder=new JPEGEncoder(100);
  var myByteArray:ByteArray=jpgEncoder.encode(bmd);
  
  //发送数据到PHP服务器端,然后自动弹出,我下面会提供一个PHP文件,供你测试,反正
  //根据我以前的做的很多东西来看,方法有N多。这是其中之一
  var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
  var request:URLRequest=new URLRequest(url);
  request.requestHeaders.push(header);  
  request.method=URLRequestMethod.POST;
  request.data=myByteArray;
  
  var loader:URLLoader = new URLLoader();
  navigateToURL(request, "_blank");
}

PHP端的代码:

<?php
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
  $im = $GLOBALS["HTTP_RAW_POST_DATA"];
  header('Content-Type: image/jpeg');
  header("Content-Disposition: attachment; filename=".$_GET['name']);
  echo $im;  
}  else echo 'An error occured.';
?>

      你能测试出来吗?如果在下载弹出有错误的时候,你可以按F12发布,在网页上直接来试试。基本上,我这里是测试成功了。



      这个系列的教程算是圆满结束了,大体的框架我已经算是讲完了,当然小细节还有很多要做,这个就需要你去努力了。因为我最近时间不多,写的可能比较匆忙,有什么地方不对,或者你看不懂,你可以发E-MAIL给我,注意是E-MAIL。

[Flash]视频照相系列教程之二

mikel阅读(1100)

这部分,主要讲截图和TileList的应用。
  
       拍照,拍照,当然要拍很多张,然后放在一起,让自己去挑一些好的,然后再保存到电脑上。
       所以,我们需要想个办法,把当前的样子拍下来,这就是截图。
       第一步:截图
       那怎么截图呢?也很简单,用BitmapData就可以搞定。首先在舞台上加个Button,实例命名为:btn,作为截图触发按钮。代码如下:

var cameraVideo:Video = new Video();
addChild(cameraVideo);
cameraVideo.width =320;
cameraVideo.height =240;
var myCamera:Camera=Camera.getCamera();
if (myCamera==null) {
  //trace("你还没安装视频头,或者视频头未连接");
} else {
  cameraVideo.attachCamera(myCamera);
  btn.addEventListener(MouseEvent.CLICK,beginSnap);
}
//main做为测试截图容器,只是测试用,下一步就不需要这个了。
var main:Sprite = new Sprite();
main.y=260;
addChild(main);
function beginSnap(event:MouseEvent):void {
  //trace(cameraVideo.width);
  var bitmapdata:BitmapData=new BitmapData(320,240);
  bitmapdata.draw(cameraVideo);
  var bitmap:Bitmap=new Bitmap(bitmapdata);
  main.addChild(bitmap);
}

      如果你测试成功的话,应该就是可以看到点击按钮后,截图自然会出现在下方,当然目前只是在测试,只是让你明白每一步的做法。
    
      


      完 成截图后,我们需要停下来想一下。想象一下:我们拍了很多照片,然后把拍的无论是好的坏的,都扔到一个篮子里,然后我们再从里面挑选出好的,去打印成大照 片。思路很清晰,那么我们需要做的,就是这个篮子问题。FLASH的魅力就是在这个篮子上的表现上,我们可以把照片横着排,竖着排,甚至是:一会儿排成人字形,一会儿排成大字形。我想这就是FLASH的乐趣,当然,这里我只说其中一种,最工业化的一种,直接放到FLASH自带的TileList组件上。
      第二步:感受下TileList组件
      如何使用TileList组件呢,其实帮助里说的很清楚,而且这里也非常详细的说明了使用方法,如果你愿意认真的看下,后面的教程就很简单了。不过我这里还是放一个比较贴近的小教程,这样下一步,我就不用解释的那么费劲了。
      新建一个FLA文件,然后在舞台上,随意画一个圆形,或者方形,然后选择按F8转化为实例,命名:mc,然后选择:Export for Actionscript,在Class里也命名为:mc,这样就方便在代码里调用这个图。
      好,接着从组件里把TileList组件拉到舞台,长度设置为400,其他暂时默认,命名为:lists。
      开始在新的时间轴上加代码:
    

var i:uint;
for(i=0;i<10;i++){
  var tempMc:Object= new Object();
  tempMc.label = "PIC"+i;
  tempMc.source = new mc();
  lists.addItem(tempMc);
}

  
      运 行下看看,你所画的小图,有10张出现在这个组件上,而且有标签名字,别忘了Object我还可以加很多乱七八糟的自定义属性,比如toolTip这种, 意思就是移动到图片上自动出现提示标签,这个都是题外话,你感觉一下上面的代码,应该对titleList组件有点感觉了吧。
       那么好,我们回到视频照相程序上,我们要做的就是把每次截图都放到这个LIST上,但是我们目前截图是320*240的,好象太大了吧,不过你不要担心,放在LIST上的话,一切都会以LIST定义的高宽为主,意思就是:你想让截图以多大的大小放在tileList上,是要在tileList组件上设置的。  
       那么怎么设置tileList呢,这个就简单了,点击下这个组件,然后按SHIFT+F7,就会出现组件检查器,随便你怎么设置。
       第三步:组装
       这步就是把说过的东西给组装起来,拍照,截图,把图放到tileList上。代码如下:
  

//只要加一句,然后修改beginSnap构造函数就可以
//先建立一个数组,用来放截图数据
var contents:Array = new Array();
function beginSnap(event:MouseEvent):void {
  var bitmapdata:BitmapData=new BitmapData(320,240);
  bitmapdata.draw(cameraVideo);
  var bitmap:Bitmap=new Bitmap(bitmapdata);
  addChild(bitmap);
  contents.push(bitmap);
  var i:uint;
  for (i=0; i<contents.length; i++) {
    var tempObj:Object = new Object();
    tempObj.source=contents[i];
    tempObj.label="image"+[i];
  }
               //lists就是tileList的实例名,我把里面的columnWidth设置为120;rowHeight设置为90
  lists.addItemAt(tempObj,0);
}

  
      运行下看看,基本没什么大的问题,当然那个标签比较麻烦,这个没关系,你要也好,不要也好,做法有很多。这只是基础。

[Flash]视频照相系列教程之一

mikel阅读(905)

   这是我去年做的一个小作品,现在我把他写成一个系列教程,给大家练练手。其中包含了截图的用法,时间事件,TileList组件的应用等等,综合起来还算不错。
       第一步:让舞台能够显示连接的视频,让你的光辉形象显示出来
       这一步很简单,你首先建立一个FLA文档后,按F11,让库面版显示出来,然后在面版的下部,右键-新建VIDEO,命名随意,完成后,把这个视频从库拖到舞台上,由于初始大小为:160*120,你可以按照你的喜欢,设置为任何大小,我这里就设置为:320*240。并且命名此VIDEO的实例名为:cameraVideo
       接着在时间面版上,新建一个时间轴,并且命名为:action,按F9,开始写代码(后面的代码全都写在里面)。
      

//这是定义个新的相机视频,然后从当前的视频头取得内容。
var myCamera:Camera =Camera.getCamera();
//这个就比较简单了,把定义的相机视频绑定到放置的VIDEO上就可以了
cameraVideo.attachCamera(myCamera);
    

      测试下,看看,是否你的光辉形象出现了。注意:在测试的时候,跳出的设置,你应该选择:允许

      第二步:事情没那么简单,我们需要填坑
        
       ok,视频是出来了,但是事情还没那么简单,因为你需要考虑万一没装视频头怎么办?总需要来个提示吧。所以我们要把刚才的代码进行完善,弄个辨别语句。
    

var myCamera:Camera=Camera.getCamera();
if (myCamera==null) {
  //意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。
  trace("你还没安装视频头,或者视频头未连接");
} else {
  //这是检测成功了
  cameraVideo.attachCamera(myCamera);
    trace("视频头检测成功");
}

    上 面的测试是有一点小问题的,因为刚才已经测试成功过有视频头了,现在虽然拔掉视频头,但是他还是会显示连接正确,为啥呢,因为刚才的连接数据他还是存在了 本地上。你可以关掉FLASH,然后再重新测试下看看。这个没关系,因为,一般而言在网页上这个错误倒不会出现了。
    
    第三步:换种做法
    其实,我写这部分,还是有原因的,因为如果按照刚才的从库里拉VIDEO,后面截图会有点小问题,为了方便讲解,再来另一种方法,首先把舞台上的VIDEO删除掉,然后代码如下:

var cameraVideo:Video = new Video();
addChild(cameraVideo);
cameraVideo.width =320;
cameraVideo.height =240;
var myCamera:Camera=Camera.getCamera();
if (myCamera==null) {
  //意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。
  //trace("你还没安装视频头,或者视频头未连接");
} else {
  //这是检测成功了  
  cameraVideo.attachCamera(myCamera);
  //trace("视频头检测成功");
  }

     可以注意到,这里是用代码去直接召唤VIDEO了,这样更符合代码写作。
    很简单吧,非常简单。第一部分算完成了,下一部分就是专门讲tileList这个组件,和截图。

[C#]NVelocity First Steps

mikel阅读(1143)

NVelocity is a port of the excellent Apache Jakarta Velocity project. It is a very simple, easy to learn and extensible template engine.

Due to the lack of releases, support and bug fixes on the original port, the Castle Team decided to fork the project, bringing it to our code repository, fixing the bugs and improving it with more features.

First steps

The first thing you need to read about NVelocity is not even on this web site. You can find on the original Velocity web site.

Content

The following pages explain more about NVelocity, the bugs fixed and improvements made.

[Flex]使用Swiz Framework进行Flex开发

mikel阅读(828)

作者 Jon Rose 译者 张龙

Adobe Flex和AIR社区在不断延续着早期Java社区的趋势,很多人都在开发新的框架来简化或是改进Flex开发。本文将介绍Swiz Framework,它模仿了Java中的Spring Framework。Swiz Framework由Chris Scott开发,基于Apache License 2.0。

Adobe技术布道者Christophe Coenraets最近的一篇博文中讨论了Swiz Framework及其使用细节。他将Swiz Framework描述为:

Swiz的核心是个简单的控制反转框架。借助于IoC框架,应用组件(例如视图)无需实例化其依赖(所用的对象),甚至都不用查 找。在组件创建时框架会注入这些依赖(因此术语“依赖注入”也用来表示这种行为)并产生松耦合且可重用性更好的组件。Swiz IoC Framework所管理的组件叫做bean。

在Christophe给出的示例应用中,他介绍了如何使用类似于Spring的语法进行注入:

Swiz使用[Autowire]客户化元数据将bean注入到其他bean和view中。
在inSync中,contactService RemoteObject被注入到ContactController中,如下所示:
1
2
[Autowire(bean="contactService")]
public var contactService:RemoteObject;
… contactController又被注入到了View中,参见ContactForm.mxml:
 
1
2
[Autowire(bean="contactController")]
public var controller:IContactController;

Tony Hillerson还讨论了Swiz Framework的自动装配特性:

可能你没注意到,Autowire可是个好东西。我们不用管模型来自何处,它是否为单态的,只要知道需要一个模型,而且框架会给我们一个就行了。注意一点:属性需要为public的,否则Swiz无法为其赋值。

Tony和Christophe都觉得Swiz是个易于使用的框架,Christophe说到

Swiz是个易于使用且让人享受的框架。它具有非侵入的特性并引入了一些有趣的想法。

请查看项目指南来了解关于Swiz及其特性的更多信息。

查看英文原文:Flex Development with the Swiz Framework