<script>
document.body.onload = tt;
function tt()
{
alert('dddddddd');
}
var b;
function te() //onselect事件
{
b=1;
}
function a() //onmouseup事件
{
if (b==1){
alert(document.selection.createRange().text);
b=0;
}
}
</script>
<body onselect ="JavaScript:te();" onmouseup ="JavaScript:a();">
onselectstart ="alert('开始');"
onmouseup="alert(document.selection.createRange().text);"
//firefox使用 window.getSelection()
网页测试测试测试才儿时才扼杀
<br>
dddddddddddddddd
<SCRIPT LANGUAGE="JavaScript">
function SelText(){
document.selection.createRange();
document.all.TestText.value = unescape(document.selection.createRange().text);
alert("选区左侧宽度:"+ document.selection.createRange().boundingLeft);
alert("选区上方高度:" + document.selection.createRange().boundingTop);
alert("选区高度:" + document.selection.createRange().boundingHeight);
alert("选区宽度:" + document.selection.createRange().boundingWidth);
}
</script>
<input type="text" id="TestText" name="TestText" value="" accesskey="A">
<input type="button" name="btnTest" value="Test" onclick="SelText()">
<hr>
对象: document.selection.createRange(); 返回TextRange 对象<br>
TextRange 属性<br>
boundingHeight 获取绑定 TextRange 对象的矩形的高度。 <br>
boundingLeft 获取绑定 TextRange 对象的矩形左边缘和包含 TextRange 对象的左侧之间的距离。 <br>
boundingTop 获取绑定 TextRange 对象的上边缘和包含 TextRange 对象的顶边之间的距离。 <br>
boundingWidth Retrieves the width of the rectangle that bounds the TextRange object. <br>
htmlText 获取绑定 TextRange 对象的矩形的宽度。 <br>
offsetLeft 获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置。<br>
offsetTop 获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置。 <br>
text 设置或获取范围内包含的文本。 <br>
</body>
[Javascript]Js划词搜索实现
网上流传的Js版划词搜索代码浏览器兼容上有问题,经过两天的改写终于做出可兼容非IE的版本.
JS代码
默认搜索引擎为:google
转自: js中国 http://www.javascriptcn.cn
http://JavaScriptxml.5d6d.com/thread-2-1-1.html
if (navigator.appName=="Microsoft Internet Explorer") {
document.body.onload=adddiv;
document.onmousedown=recordobj;
document.ondblclick=dbclick;
document.onmouseup=showselect;
} else
{
//firefox
window.onload=adddiv();
window.onmousedown=recordobj;
window.ondblclick=dbclick();
window.onmouseup=showselect;
}
///////////////////////////////////////////////////////////////////////////////////
var starobj,
isdb=false,
allow=true;
///////////////////////////////////////////////////////////////////////////////////
function isallow()
{
if(allow){
allow=false;
alert('is closed');
}
else{
allow=true;
alert('is opend');
}
}
////////////////////////////////////////////////////////////////////////////////////
function dbclick()
{
isdb=true;
}
/////////////////////////////////////////////////////////////////////////////////////
//function recordobj(evt)
//{
//starobj=event.srcElement; //IE
//starobj=evt.target
//}
function recordobj(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "")
if (evt) {
starobj = (evt.target) ? evt.target : evt.srcElement
}
//starobj=evt.srcElement;
}
////////////////////////////////////////////////////////////////////////////////////////
function showselect(evt) {
//test
var obj;
var strlen;
evt = (evt) ? evt : ((window.event) ? window.event : "")
if (evt) {
if (evt.target)
{
obj = evt.target;
strlen = window.getSelection().toString();
}
else
{
obj = event.srcElement;
strlen = document.selection.createRange().text;
}
}
//test
var str="";
if(obj.tagName!="A"&&obj.tagName!="INPUT"&&obj==starobj&&!isdb&&allow)
{
//var oText=document.selection.createRange(); //IE
//alert(window.getSelection());
//alert(window.getSelection().toString().length);
//if(window.getSelection().length>0) //错误写法
////////////
//if(window.getSelection().toString().length>0)
if(strlen.length>0)
{
//alert("ddd"+window.getSelection().boundingWidth());
//alert("dddddddddddddddddddd000");
str=strlen;
//oText.text="BuB"+oText.text+"EuE";
}
//oText.select();
//window.getSelection.select()
}
//alert("自负" + str);
searchgoogle(str,evt);
isdb=false;
}
//////////////////////////////////////////////////////////////////////////////////////////
function searchgoogle(str,evt)
{
var obj=document.getElementById("searchgoogle");
//alert("长度"+str.toString().length);
if(str.toString().length>0)
{
//alert("tongguo");
//alert(obj);
obj.style.display="block";
obj.style.position="absolute";
obj.style.zindex=999;
//alert("y" + evt.clientY + "X" + evt.clientX);
//
//alert(document.body.scrollTop.toString());
//alert("new" + document.documentElement.scrollTop.toString());
//
if(navigator.appName=="Microsoft Internet Explorer")
{
obj.style.widht=80;
obj.style.posTop=document.body.scrollTop+event.y–25;
obj.style.posLeft=document.body.scrollLeft+event.x+5;
}
else
{
obj.style.width = "100px";
obj.style.top=evt.pageY–25;
obj.style.left=evt.pageX+5;
}
obj.innerHTML="<a target=_blank href=http://www.google.com/search?ie=UTF-8&oe=UTF-8&q="+encodeURI(str)+" style='BORDER- RIGHT: royalblue thin solid; BORDER-TOP: royalblue thin solid; FONT- WEIGHT: bold; BORDER- LEFT: royalblue thin solid; CLIP: rect(auto auto auto auto); COLOR: #ffffff; BORDER- BOTTOM: royalblue thin solid; BACKGROUND-COLOR: inactivecaption; TEXT- DECORATION: none'>Search It!</a>";
}
else
{
obj.style.display="none";
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
function adddiv()
{
var mobj = document.createElement("div");
mobj.id="searchgoogle";
document.body.appendChild(mobj);
}
//–>
直接在html页面中调用即可实现网页划词搜索功能.
[JQuery]jQuery插件---Clipboard Copy(复制)。
这个插件是用来把页面的内容复制到剪贴板的插件,使用起来很简单。
$.copy("字符串") // 把字符串复制到剪贴板
$.copy(varStr) // 把变量varStr的值复制到剪贴板
$("#elmID").copy() // 复制id为elmID的节点里的文字
$("#elmID input").copy() // 复制id为elmID的节点下所有input的值
$("#elmID input").copy("|") // 复制id为elmID的节点下所有input的值,并以“|”隔开
好了,看看演示的效果吧!
值得注意的是:
$("#elmID").copy() 只id为elmID的节点里的文字,而不复制elmID的子节点的文字
("#elmID *").copy() 只复制elmID的子节点的文字,而不复制id为elmID的节点里的文字
我测试的时候是这样的,整理的时候没那么仔细,大家也测试看看是不是这样。
转:http://www.94this.com.cn/article/247.htm
本篇文章来源于 cssrain.cn 原文链接:http://www.cssrain.cn/article.asp?id=1157
[Javascript]鼠标事件
| 事件 | 浏览器支持 | 描述 |
| 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通信成功
这个是我在内网搭的,看到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>
标签模板标记说明:可以没有
应用类型:其他
是否接受通知:是
然后提交,就看到通信成功啦
[UI]Apple网站Web可用性设计分析
第 1 页 Apple网站Web可用性设计分析 [1]
第 2 页 Apple网站Web可用性设计分析 [2]
第 3 页 Apple网站Web可用性设计分析 [3]
[Flex]RIAMeeting第九次会议现场纪实及资料下载
PPT和源码,还有相关技术资料,在这里下载:
2.示例文件(源码)
4.现场视频1
5.现场视频2
注:第三个文档来自Adobe Developers Center,感谢孙泉同学的翻译
参考:http://www.adobe.com/devnet/flex/articles/dependency_injection.html
[Flash]视频照相系列教程之三
到了这一步,基本上算是差不多了,在大体的框架上,就剩下预览与保存的做法了。
第一步:预览
在我们已经把视频,TileList组装完成后,就需要实现一个功能,就是我们需要重新预览下以前拍的照片,那么由此所引申出来的动作必然就是我们需要点 击在TileList里的小图,这一步很简单,我们先来玩一个TileList点击的小代码,后面就套一下,就很容易了。
按照第二部分,认识TileList刚开始的那段小代码,新的代码如下:
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,在前面的教程代码上继续加代码:
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 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端的代码:
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]视频照相系列教程之二
这部分,主要讲截图和TileList的应用。
拍照,拍照,当然要拍很多张,然后放在一起,让自己去挑一些好的,然后再保存到电脑上。
所以,我们需要想个办法,把当前的样子拍下来,这就是截图。
第一步:截图
那怎么截图呢?也很简单,用BitmapData就可以搞定。首先在舞台上加个Button,实例命名为:btn,作为截图触发按钮。代码如下:
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。
开始在新的时间轴上加代码:
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上。代码如下:
//先建立一个数组,用来放截图数据
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]视频照相系列教程之一
这是我去年做的一个小作品,现在我把他写成一个系列教程,给大家练练手。其中包含了截图的用法,时间事件,TileList组件的应用等等,综合起来还算不错。
第一步:让舞台能够显示连接的视频,让你的光辉形象显示出来。
这一步很简单,你首先建立一个FLA文档后,按F11,让库面版显示出来,然后在面版的下部,右键-新建VIDEO,命名随意,完成后,把这个视频从库拖到舞台上,由于初始大小为:160*120,你可以按照你的喜欢,设置为任何大小,我这里就设置为:320*240。并且命名此VIDEO的实例名为:cameraVideo
接着在时间面版上,新建一个时间轴,并且命名为:action,按F9,开始写代码(后面的代码全都写在里面)。
var myCamera:Camera =Camera.getCamera();
//这个就比较简单了,把定义的相机视频绑定到放置的VIDEO上就可以了
cameraVideo.attachCamera(myCamera);
测试下,看看,是否你的光辉形象出现了。注意:在测试的时候,跳出的设置,你应该选择:允许
第二步:事情没那么简单,我们需要填坑。
ok,视频是出来了,但是事情还没那么简单,因为你需要考虑万一没装视频头怎么办?总需要来个提示吧。所以我们要把刚才的代码进行完善,弄个辨别语句。
if (myCamera==null) {
//意思就是,未检测到视频头,然后该干嘛,当然你想干嘛就干嘛。
trace("你还没安装视频头,或者视频头未连接");
} else {
//这是检测成功了
cameraVideo.attachCamera(myCamera);
trace("视频头检测成功");
}
上 面的测试是有一点小问题的,因为刚才已经测试成功过有视频头了,现在虽然拔掉视频头,但是他还是会显示连接正确,为啥呢,因为刚才的连接数据他还是存在了 本地上。你可以关掉FLASH,然后再重新测试下看看。这个没关系,因为,一般而言在网页上这个错误倒不会出现了。
第三步:换种做法。
其实,我写这部分,还是有原因的,因为如果按照刚才的从库里拉VIDEO,后面截图会有点小问题,为了方便讲解,再来另一种方法,首先把舞台上的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这个组件,和截图。
Mikel


