Utilisez la syntaxe de type ActionScript pour écrire du HTML5 - Partie 6, TextField et zone de saisie
1, comparaison
1, en html5
Regardez d'abord le texte dans le canevas de html5 Inutile de disons, affichez
var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); context.font = "40pt Calibri"; context.fillStyle = "#0000ff"; context.fillText("文字测试!", 50, 150);
dans la zone de saisie en html, vous devez utiliser la balise d'entrée
<input type="text" id="myTextbox" />
2, en tant que
//文字显示 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);
2, Code après avoir écrit la bibliothèque de classes 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);
Troisièmement, méthode d'implémentation
L'affichage du texte est très simple, il vous suffit de créer une classe LTextField et une fonction de méthode show 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)); } } }
Le code n'est pas difficile à comprendre. Lorsque la méthode show est appelée, elle est simplement dessinée sur le canevas.
La clé est la zone de saisie, car en HTML, la zone de saisie est une étiquette. dessiner cette étiquette sur la toile supérieure ? Ou Canvas peut-il afficher directement la zone de saisie ?
Je ne sais pas grand-chose à ce sujet. S'il y a un expert qui le sait, j'espère que vous pourrez me le dire
Je vais parler de ma méthode maintenant Lorsque le champ de texte est saisi, je dessine d'abord une boîte rectangulaire. , puis Utilisez div pour afficher la zone de texte directement à la position correspondante
Mon HTML n'a initialement que le code suivant
<!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>
Ensuite, utilisez javascript pour écrire un canevas et une zone de texte comme travail de préparation
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;
Cachez d'abord la zone de texte. Ensuite, lorsque vous cliquez sur la boîte rectangulaire que j'ai dessinée, elle sera affichée au-dessus de la boîte rectangulaire, puis lorsque vous cliquez ailleurs, le contenu saisi sera affiché. Je n'entrerai pas dans les détails sur la façon de masquer la zone de texte
après l'avoir attribuée à textField. Ce qui suit est le code complet de LTextField, ou vous pouvez cliquer avec le bouton droit pour voir le code complet plus tard, fonction 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}); } }
C'est tout. Utilisez une syntaxe de type ActionScript pour écrire du HTML5 - Partie 6, le contenu de TextField et la zone de saisie. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !