一,对比
1,html5中
首先看看在html5的canvas中的文字显示

var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.font = "40pt Calibri";
context.fillStyle = "#0000ff";
context.fillText("文字测试!", 50, 150);

在html中输入框就不用说了,需要用到input标签

<input type="text" id="myTextbox" />

2,在as中

//文字显示
var txt:TextField = new TextField();
txt.text = "文字测试!";
txt.x = 50;
txt.y = 50;
addChild(txt);
//输入框
var txt:TextField = new TextField();
txt.type = TextFieldType.INPUT;
txt.x = 50;
txt.y = 50;
addChild(txt);

二,编写js类库后的代码

//文字显示
var txt = new LTextField();
txt.x = 100;
txt.text = "TextField 测试";
addChild(txt);
//输入框
var txt1 = new LTextField();
txt1.x = 100;
txt1.y = 50;
txt1.setType(LTextFieldType.INPUT);
addChild(txt1);

三,实现方法
文字显示非常简单,只需要建立一个LTextField类和一个show方法就可以了function LTextField(){

var self = this;
self.objectindex = ++LGlobal.objectIndex;
self.type = "LTextField";
self.texttype = null;
self.x = 0;
self.y = 0;
self.text = "";
self.font = "utf-8";
self.size = "11";
self.color = "#000000";
self.textAlign = "left";
self.textBaseline = "middle";
self.lineWidth = 1;
self.stroke = false;
self.visible=true;
} LTextField.prototype = {
show:function (cood){
if(cood==null)cood={x:0,y:0};
var self = this;
if(!self.visible)return; LGlobal.canvas.font = self.size+"pt "+self.font;
LGlobal.canvas.textAlign = self.textAlign;
LGlobal.canvas.textBaseline = self.textBaseline;
LGlobal.canvas.lineWidth = self.lineWidth; if(self.stroke){
LGlobal.canvas.strokeStyle = self.color;
LGlobal.canvas.strokeText(self.text,parseFloat(cood.x) + parseFloat(self.x),
parseFloat(cood.y) + parseFloat(self.y) + parseFloat(self.size));
}else{
LGlobal.canvas.fillStyle = self.color;
LGlobal.canvas.fillText(self.text,parseFloat(cood.x) + parseFloat(self.x),
parseFloat(cood.y) + parseFloat(self.y) + parseFloat(self.size));
}
}
}

代码不难理解,就是调用show方法的时候,把它画在canvas上面而已,
关键是输入框,因为html中,输入框是一个标签,怎么把这个标签画到canvas上?或者说canvas可以直接现实输入框?
这个我不太清楚,如果有高手知道的话,希望能告诉偶一声,
我现在说一说我的做法,我是在textField是input的时候,先画一个矩形方框,然后利用div,把textbox直接显示在相应的位置上
我的html里一开始只有下面代码

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>仿ActionScript测试-TextField</title>
<script type="text/javascript" src="../legend/legend.js"></script>
<script type="text/javascript" src="./js/Main.js"></script>
</head>
<body>
<div id="mylegend">页面读取中……</div>
</body>
</html>

然后,利用javascript写入一个canvas和一个textbox,作为准备工作

    LGlobal.object = document.getElementById(id);
LGlobal.object.innerHTML='<div id="' + LGlobal.id + '_inittxt" style="position:absolute;margin:0px 0px 0px 0px;width:'+width+'px;height:'+height+'px;">数据读取中……</div>' +
'<div style="position:absolute;margin:0px 0px 0px 0px;z-index:0;"><canvas id="' + LGlobal.id + '_canvas">您的浏览器不支持HTML5</canvas></div>'+
'<div id="' + LGlobal.id + '_InputText" style="position:absolute;margin:0px 0px 0px 0px;z-index:10;display:none;"><input type="text" id="' + LGlobal.id + '_InputTextBox" /></div>'; LGlobal.canvasObj = document.getElementById(LGlobal.id+"_canvas");
LGlobal.inputBox = document.getElementById(LGlobal.id + '_InputText');
LGlobal.inputTextBox = document.getElementById(LGlobal.id + '_InputTextBox');
LGlobal.inputTextField = null;

一开始将textbox隐藏,然后的做法是,当点击我画的矩形方框的时候,将它显示到矩形方框上面,然后当点击其他地方的时候,把输入的内容赋值给textField后隐藏textbox
具体做法不多说了,下面是完整的LTextField代码,或者你一会儿可以直接鼠标右健看完整代码function LTextField(){

    var self = this;
self.objectindex = ++LGlobal.objectIndex;
self.type = "LTextField";
self.texttype = null;
self.x = 0;
self.y = 0;
self.text = "";
self.font = "utf-8";
self.size = "11";
self.color = "#000000";
self.textAlign = "left";
self.textBaseline = "middle";
self.lineWidth = 1;
self.stroke = false;
self.visible=true;
} LTextField.prototype = {
show:function (cood){
if(cood==null)cood={x:0,y:0};
var self = this;
if(!self.visible)return;
if(self.texttype == LTextFieldType.INPUT){
self.inputBackLayer.show({x:self.x+cood.x,y:self.y+cood.y});
if(LGlobal.inputBox.name == "input"+self.objectindex){
LGlobal.inputBox.style.marginTop = (self.y+cood.y) + "px";
LGlobal.inputBox.style.marginLeft = (self.x+cood.x) + "px";
}
}
LGlobal.canvas.font = self.size+"pt "+self.font;
LGlobal.canvas.textAlign = self.textAlign;
LGlobal.canvas.textBaseline = self.textBaseline;
LGlobal.canvas.lineWidth = self.lineWidth; if(self.stroke){
LGlobal.canvas.strokeStyle = self.color;
LGlobal.canvas.strokeText(self.text,parseFloat(cood.x) + parseFloat(self.x),
parseFloat(cood.y) + parseFloat(self.y) + parseFloat(self.size));
}else{
LGlobal.canvas.fillStyle = self.color;
LGlobal.canvas.fillText(self.text,parseFloat(cood.x) + parseFloat(self.x),
parseFloat(cood.y) + parseFloat(self.y) + parseFloat(self.size));
}
},
setType:function(type){
var self = this;
if(self.texttype != type && type == LTextFieldType.INPUT){
self.inputBackLayer = new LSprite();
self.inputBackLayer.graphics.drawRect(1,"black",[0, 0, 150, 20],true,"#cccccc");
self.inputBackLayer.addEventListener(LMouseEvent.MOUSE_DOWN, function(){
if(self.texttype != LTextFieldType.INPUT)return;
LGlobal.inputBox.style.display = "";
LGlobal.inputBox.name = "input"+self.objectindex;
LGlobal.inputTextField = self;
LGlobal.inputTextBox.value = self.text;
});
}else{
self.inputBackLayer = null;
}
self.texttype = type;
},
mouseEvent:function (event,type,cood){
if(cood==null)cood={x:0,y:0};
var self = this;
if(self.inputBackLayer == null)return;
self.inputBackLayer.mouseEvent(event,type,{x:self.x+cood.x,y:self.y+cood.y}); }
}

看一下成果吧,看不到效果的请下载支持html5的浏览器
http://fsanguo.comoj.com/html5/jstoas05/index.html
点击输入框,textbox会自动显示,输入后点击其他地方,textbox自动消失

用仿ActionScript的语法来编写html5——第六篇,TextField与输入框的更多相关文章

  1. 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图

    用仿ActionScript的语法来编写html5——第五篇,Graphics绘图 canvas本身就是一个Graphics,可以直接进行绘图在actionscript里面,每个Sprite都有一个G ...

  2. 用仿ActionScript的语法来编写html5——第八篇,图片处理+粒子效果

    用仿ActionScript的语法来编写html5系列开发到现在,应该可以做出一些东西了,下面先来研究下图片的各种效果预览各种效果看下图效果和代码看这里,看不到效果的请下载支持html5的浏览器 ht ...

  3. 用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动

    第三篇,鼠标事件与游戏人物移动 一,假设假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用.这样的话,添加鼠标事件,其实只需要给canv ...

  4. 用仿ActionScript的语法来编写html5——第七篇,自定义按钮

    第七篇,自定义按钮这次弄个简单点的,自定义按钮.其实,有了前面所定义的LSprite,LBitmap等类,定义按钮就很方便了.下面是添加按钮的代码, function gameInit(event){ ...

  5. 用仿ActionScript的语法来编写html5——第四篇,继承与简单的rpg

    第四篇,继承与简单的rpg 这次用继承自LSprite的类来实现简单的rpg的demo先看一下最后的代码与as的相似度 var backLayer; //地图 var mapimg; //人物 var ...

  6. 用仿ActionScript的语法来编写html5——终篇,LegendForHtml5Programming1.0开源库件

    一,LegendForHtml5Programming1.0库件是什么?它是一个javascript库,它模仿了ActionScript的语法,用于html5的开发,目前实现的功能相对较少,还不能称之 ...

  7. 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

    第九篇,仿URLLoader读取文件 先看看最后的代码 function readFile(){ urlloader = new LURLLoader(); urlloader.addEventLis ...

  8. 用仿ActionScript的语法来编写html5——第二篇,利用Sprite来实现动画

    上一篇,我已经模仿as,加入了LBitmap和LBitmapData类,并且用它们实现了静态图片的显示.这次用Sprite来动态显示图片.依然遵循上一篇对显示对象的处理的思路,添加LSprite类,并 ...

  9. 用仿ActionScript的语法来编写html5——第一篇,显示一张图片

    第一篇,显示一张图片 一,代码对比 as代码: public var loader:Loader; public function loadimg():void{ loader = new Loade ...

随机推荐

  1. Bootstrap学习笔记(1)栅格系统

    栅格系统: .row 1行12列 .col-md-3 占3列,一行就是4个 <!DOCTYPE html> <html lang="en"> <hea ...

  2. extjs,ComboReturn

    package cn.edu.hbcf.common.vo; import java.io.Serializable; public class ComboReturn implements Seri ...

  3. HTML5 的位置

    HTML5 的位置 在HTML5COL学院的前面几个章节中我们已经对HTML5 Geolocation API有了一定认识,接下来我们要对位置做些更有意思的处理:看看你与我们HTML5COL学院的办公 ...

  4. linux grub 使用

    linux kernel 格式之 vmlinux.zImage.bzImage.vmlinuz.uImage vmlinux     是编译出来的未经压缩的原始内核文件,是linux接受的可执行文件格 ...

  5. java请求POST发送json格式请求

    public static String upload(String url){ try { HttpClient httpclient = new DefaultHttpClient(); Http ...

  6. Docker是用来干什么的?【快速入门】

    Docker从去年开始不仅能在Linux下运行 ,还支持windows.osX等主流系统. 下面的例子我自己经常使用,当然你有更好的案例也可以分享给我. 尝试新软件 对开发者而言,每天会催生出的各式各 ...

  7. PHP上传类 图片上传 upload class实现image crop resize 缩略图

    manage uploaded files, and manipulate images in many ways through an HTML form, a Flash uploader, XM ...

  8. jquery获取checkbox状态

    $("#id").is(":checked"); 返回true false

  9. (转)Java锁、自旋锁、CAS机制

    转自:http://www.jb51.net/article/55381.htm 转自:http://blog.csdn.net/aesop_wubo/article/details/7537278 ...

  10. 第10步:DBCA创建实例

    注意,创建磁盘组时需要以oracle用户身份执行,在那之前可能需要以root身份执行xhost+,即命令: 代码1 [root@sgdb1~]# xhost+ [root@sgdb1~]# su - ...