用仿ActionScript的语法来编写html5——第六篇,TextField与输入框
一,对比
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与输入框的更多相关文章
- 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图
用仿ActionScript的语法来编写html5——第五篇,Graphics绘图 canvas本身就是一个Graphics,可以直接进行绘图在actionscript里面,每个Sprite都有一个G ...
- 用仿ActionScript的语法来编写html5——第八篇,图片处理+粒子效果
用仿ActionScript的语法来编写html5系列开发到现在,应该可以做出一些东西了,下面先来研究下图片的各种效果预览各种效果看下图效果和代码看这里,看不到效果的请下载支持html5的浏览器 ht ...
- 用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动
第三篇,鼠标事件与游戏人物移动 一,假设假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用.这样的话,添加鼠标事件,其实只需要给canv ...
- 用仿ActionScript的语法来编写html5——第七篇,自定义按钮
第七篇,自定义按钮这次弄个简单点的,自定义按钮.其实,有了前面所定义的LSprite,LBitmap等类,定义按钮就很方便了.下面是添加按钮的代码, function gameInit(event){ ...
- 用仿ActionScript的语法来编写html5——第四篇,继承与简单的rpg
第四篇,继承与简单的rpg 这次用继承自LSprite的类来实现简单的rpg的demo先看一下最后的代码与as的相似度 var backLayer; //地图 var mapimg; //人物 var ...
- 用仿ActionScript的语法来编写html5——终篇,LegendForHtml5Programming1.0开源库件
一,LegendForHtml5Programming1.0库件是什么?它是一个javascript库,它模仿了ActionScript的语法,用于html5的开发,目前实现的功能相对较少,还不能称之 ...
- 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件
第九篇,仿URLLoader读取文件 先看看最后的代码 function readFile(){ urlloader = new LURLLoader(); urlloader.addEventLis ...
- 用仿ActionScript的语法来编写html5——第二篇,利用Sprite来实现动画
上一篇,我已经模仿as,加入了LBitmap和LBitmapData类,并且用它们实现了静态图片的显示.这次用Sprite来动态显示图片.依然遵循上一篇对显示对象的处理的思路,添加LSprite类,并 ...
- 用仿ActionScript的语法来编写html5——第一篇,显示一张图片
第一篇,显示一张图片 一,代码对比 as代码: public var loader:Loader; public function loadimg():void{ loader = new Loade ...
随机推荐
- SOCK_RAW编程
TCP(SOCK_STREAM)和UDP套接口(SOCK_DGRAM)可以满足大部分需求,但要获取底层协议内容就需要原始套接字.相比前两者,SOCK_RAW具有如下优点: 1)使用原始套接字可以读写I ...
- flask 邮箱配置
http://blog.csdn.net/stan_pcf/article/details/51098126 先进入邮箱设置 POP3/SMTP/IMAP 下面代码来自知乎 https://www.z ...
- ubuntu14.04安装pycurl
一. 安装依赖项 sudo apt-get install libcurl4-gnutls-dev 二. 安装pycurl pip install pycurl 三. 检验是否安装成功 进入pytho ...
- jsp有哪些内置对象?作用分别是什么?(至少三个)
jsp有哪些内置对象?作用分别是什么?(至少三个) 解答: 1)request表示HttpServletRequest对象.它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, head ...
- uva 10494 - If We Were a Child Again 大数除法和取余
uva 10494 - If We Were a Child Again If We Were a Child Again Input: standard inputOutput: standard ...
- 数据库设计——E-R图
一,复习下基础 1.弱实体 这样的实体须要依赖还有一个实体.若还有一个实体不存在了.它也随之消失.相对而言,它依赖的那个实体成为强实体. 2,特殊化 在数据库设计的过程中,我们会发现.一个实体能够依照 ...
- iOS开发之--storyboary下,拖拽一个tableview/collectionView/view 等,顶端下沉64个像素的处理方法
大家可能会发现,在sb或者xib里面拖拽一个tableview/collectionview/view的,顶端会自动下沉64个像素,也就是说,运行在模拟器上去,自导航下面又自动下沉了64个像素, 那是 ...
- std::function(3)
#include <functional> #include <string> #include <iostream> using namespace std; v ...
- bat脚本中timeStamp解决方案
之前做了个工具包,用了timeStamp做文件名. 一般来说最简单的代码类似于: set timeStamp=%date:/=-%_%time% echo %timeStamp% >2018-0 ...
- LINQPad_批量修改图片名称
用到这个工具是在后台批量修改图片名称的时候 下载并安装LINQPad. 这里要注意:在复制path路径的时候C:\xampp\htdocs\day01\angularjs_day01_am\angul ...