当前位置: 首页 > 科技观察

OpenHarmonyJSUI小系统自定义控件之四——Textarea多行输入

时间:2023-03-12 21:07:51 科技观察

更多内容请访问:51CTO与华为官方共建鸿蒙技术社区https://ost.51cto.com1.目标使用OpenHarmony小系统支持的基本控件,实现一个类似于textarea的多行文本输入框。输入的文字可以控制动画的播放时间。2.背景OpenHarmony标准体系提供了基本组件:textarea是用于多行文本输入的文本框。但是,小系统中并没有类似的组件。目前小系统中需要实现输入框的功能,支持类似软键盘输入,显示相关信息,同时可以缓存输入信息,用于操作其他业务。数据。3、环境设备:君正x2000开发板。系统:OpenHarmony3.0.0.0(LTS)。4.效果4.1视频效果请移步:小系统textarea多行文本输入框视频效果。4.2效果截图五、实现思路从效果图中我们可以看出textarea多行文本输入文本框可以有以下特点:1.在输入框中,可以通过输入单行或多行数据自定义软键盘。2、输入框有两种状态,正常状态和点击状态。正常状态:未获得焦点,不显示软键盘,无法通过软键盘输入。输入框的背景是透明的,边框是白色的。点击状态:获取焦点,显示软键盘,支持软键盘输入,输入框背景为灰色,边框为红色。3、点击软键盘的非完成按钮,在输入框中显示相关文字;4、点击软键盘完成按钮,清除输入框中的内容,在结果框中显示用户输入的数据,输入框恢复正常。结合帧动画的操作1、在输入框中输入一个数字,点击完成,帧动画根据用户输入的数据设置动画播放的时长;分析:在小系统支持的基础容器中。1.使用text组件实现文本输入框,使用onclick监听点击事件,修改输入框状态,动态设置其属性:background-color,border-color实现中的背景和边框颜色单击状态;2、使用inputtype='button'实现软键盘中的按键,使用onclick监听点击事件,根据监听到的不同按键进行不同的操作。帧动画的实现1、使用image-animator组件加载帧动画,使用其属性duration设置单个动画播放时长。备注:如果对上面提到的容器API不熟悉,可以参考如下:inputAPItextAPIimage-animatorAPI缺点:1.没有光标,无法指定Insert位置后的数据。目前只能从最后一个位置插入数据。当然,删除的数据只能从最后一个位置往前删除;2、软键盘需要按需实现;3.输入框的内容超出高度限制无法显示Partialcontentexceeded。6、完整代码说明:组件代码包括html、css、js三部分。因为代码比较简单,就不写注释了。如果有什么不懂的可以留言。动画需要的资源在文末附件中下载。

动画单次播放时间长{{animatorDuration}}{{curText}}
您输入的内容:{{resultText}}
/*textView.css*/.container{display:flex;flex-direction:column;width:100%;height:100%;background-color:black;}.title-content{width:100%;height:220px;border-宽度:1px;填充:10px;边距底部:10px;对齐内容:flex-start;对齐项目:flex-start;文本对齐:左;}.title{字体大小:30px;宽度:95%;height:220px;}.result{font-size:22px;width:100%;height:220px;text-align:left;align-items:flex-start;border-width:1px;border-color:white;padding:10px;}.btn-content{flex-direction:row;width:100%;height:80px;margin-top:5px;justify-content:space-between;}.num-btn{width:19%;文本对齐:居中;颜色:黑色;字体大小:25px;border-ra直径:5px;背景色:白色;margin:02px;}.key-code{display:flex;弹性方向:列;证明内容:空格之间;宽度:100%;高度:180px;对齐项目:居中;margin-top:10px;}.back-img{width:40px;高度:40px;边界半径:20px;边距:20px;}.animator_box{宽度:100%;高度:240px;调整内容:居中;}.animator{宽度:100%;height:240px;}.animator-title{字体大小:30px;宽度:95%;高度:40px;color:white;}//textView.jsimportrouterfrom'@system.router';constTEXT_COLOR={NORMAL:'#000',CLICK:'#88666666'};constBORDER_COLOR={NORMAL:'#fff',CLICK:'#c00000'};导出默认值{data:{title:'World',bg_c??olor:TEXT_COLOR.NORMAL,isFocus:false,curText:'',resultText:'',isShowKeyCode:false,border_color:BORDER_COLOR.NORMAL,animatorDuration:'1s',图片:[{src:"/common/images/1.png",},{src:"/common/images/2.png",},{src:"/common/images/3.png",},{src:"/common/images/4.png",},{src:"/common/images/5.png",},{src:"/common/images/6.png",},{src:"/common/images/7.png",},{src:"/common/images/8.png",},{src:"/common/images/9.png",},{src:"/common/images/10.png",},{src:"/common/images/11.png",},{src:"/common/images/12.png",},{src:"/公共/图像/13.png",},{src:"/common/images/14.png",},{src:"/common/images/15.png",},{src:"/common/images/16.png",},{src:"/common/images/17.png",},{src:"/common/images/18.png",},{src:"/common/images/19.png",},{src:"/common/images/20.png",},{src:"/common/images/21.png",},{src:"/common/images/22.png",},{src:"/common/images/23.png",},{src:"/common/images/24.png",},{src:"/common/images/25.png",},{src:"/common/images/26.png",},{src:"/common/images/27.png",}],},onText(){this.bg_color=TEXT_COLOR.CLICK;this.border_color=BORDER_COLOR.CLICK;this.isFocus=true;this.isShowKeyCode=true;this.resultText='';},onNumOne(){if(!this.isFocus){return;}this.curText+='1';},onNumTwo(){if(!this.isFocus){return;}this.curText+='2';},onNumThree(){if(!this.isFocus){return;}this.curText+='3';},onEnChar(){if(!this.isFocus){return;}this.curText+='O';},onSpecialSymbol1(){if(!this.isFocus){return;}this.curText+='#';},onSpecialSymbol2(){if(!this.isFocus){return;}这个。curText+='@';},onZhChar1(){if(!this.isFocus){返回;}this.curText+='洪';},onZhChar2(){如果(!this.isFocus){返回;}this.curText+='蒙古';},onFinish(){this.resultText=this.curText;this.animatorDuration=this.curText+'s';这个。重置();},/***每次点击都会删除最后一个字节*/onDelete(){if(!this.isFocus){return;}constlen=this.curText.length;如果(len>=1){this.curText=this.curText.substring(0,len-1);}},reset(){this.isFocus=false;this.curText='';this.bg_color=TEXT_COLOR.NORMAL;this.border_color=BORDER_COLOR.NORMAL;this.isShowKeyCode=false;},onBack(){router.replace({uri:'pages/index/index'});},onDestroy(){this.reset();}}更多信息请访问:51CTO与华为官方共同打造的鸿蒙科技社区https://ost.51cto.com