关于textarea的相关实践

本文介绍了一个移动端的自适应文本输入框实现方法,包括宽度限制、高度自适应及文字内容处理,并实现了文本框随手指移动的功能。

日前在web移动端书写一个高宽自适应的文本输入框,并且具有跟随手指移动而移动。

问题:宽度自适应实现不了。

上代码:

<textarea class="u_editArea" placeholder=""  autoHeight="true" cols="19"></textarea>

相关css为:

display: block;
max-width:12rem;
max-height: 12.5rem;
text-align: left;
background-color: inherit;
font-size: 0.85rem;
line-height: 1.2;
padding: 0.5rem;
border: 1px solid #48be93;
overflow:hidden;
outline: none;
font-weight: normal;
word-wrap: break-word; 
word-break: break-all;

文本框的宽度限死为最多10个汉字 20个英文;

高度自适应的做法为:

$.fn.autoHeight = function(){
function autoHeight(elem){
elem.style.height = 'auto';
elem.scrollTop = 0; //防抖动
elem.style.height = elem.scrollHeight + 'px';
}
this.each(function(){
autoHeight(this);
$(this).on('keyup', function(){
autoHeight(this);
});
});
}
$('.u_editArea[autoHeight]').autoHeight();

在键盘事件中也是如此调用;达到最大框就终止;

前端获取文本框中的文字内容返回给后端,所取的文字自动换行时,需要给相应位置加上换行符;此时前端的JS做法为:

定义2个函数:

//计算中英文字符长度
function fucCheckLength(strTemp) { 
 var i,sum;
 sum=0;
 for(i=0;i<strTemp.length;i++) { 
   if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255)) {
     sum=sum+1;
   }else {
     sum=sum+2;
   }
 }
 return sum; 
}
//返回等于20个字符的下标
function xiabiao(str){
var length=fucCheckLength(str);
// var beishu=parseInt(length/20,10);
if(length>20){
 var i,sum;
 sum=0;
 for(i=0;i<str.length;i++) { 
   if ((str.charCodeAt(i)>=0) && (str.charCodeAt(i)<=255)) {
     sum=sum+1;
     if(sum==20){
      return i;
     }
   }else {
     sum=sum+2;
     if(sum==20){
      return i;
     }
   }
 }
}else{
return 0;
}
}

然后在提交数据时,获取到textarea中的值之后,做相应的处理;处理步骤为:

1、先判断是否有手动的换行

var editext=$(".u_editArea").val();
var indexOF=editext.indexOf("\n");

2、若存在,对值进行切割处理:

var newText=editext.split("\n");

然后遍历每个值:

for(var k=0;k<newText.length;k++){
var u_index=xiabiao(newText[k]);   //返回这个数据到达20个字符的元素下标
if(u_index==0){//若该截字符串没有达到20个字符,则直接加
if(k==0){
text+=newText[k];//K==0代表是第一行,则前面无需换行符
}else{
text+="\r\n"+newText[k];
}
}else{
var length=fucCheckLength(newText[k]);  //首先获取这截字符串的总字符数
var beishu=parseInt(length/20,10);//得到20的倍数
var begin=0;
var first=u_index;
var newPage=begin+first;
for(var p=0;p<beishu;p++){
var text00=newText[k].substring(begin,newPage+1); //截取字符串
text+=text00+"\r\n";//添加至文本
var text01=newText[k].substring(newPage+1,newText[k].length);
var second= xiabiao(text01);
if(second==0){
text=text+text01+"\r\n";
}else{
begin=newPage+1;
newPage=second+newPage+1;
}
}
}
}

关于移动跟随事件,原理是,在touchstart时,记录这个文本框的left top的位置,和手指的x y的位置;

然后在touchmove时,计算touchmove相对于touchstart时的位移差,然后文本域的位置加上这个差就是要移动的距离。

//移动字体框
var _x0='',_y0='',cssTop='',cssLeft='';
$(".m-editText").on("touchstart",function(e){
_x0=e.touches[0].clientX;
_y0=e.touches[0].clientY;
cssTop=$(".m-editText").css("top");
cssLeft=$(".m-editText").css("left");
});
$(".m-editText").on("touchmove",function(e){
e.preventDefault();
var abs=document.documentElement.clientWidth;
var _x1=e.touches[0].clientX;
var _y1=e.touches[0].clientY;
var xx=parseFloat((_x1-_x0)/20).toFixed(2);
var yy=parseFloat((_y1-_y0)/20).toFixed(2);
var dd=parseFloat(cssTop)+parseFloat(yy);
var cc=parseFloat(cssLeft)+parseFloat(xx);
$(".m-editText").css({"top":dd+"rem","left":cc+"rem"})
});

【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)》的技术文档,核心内容是基于IEEE 14节点电力系统模型,利用Matlab实现碳排放流的精确计算方法。该方法通过建立电力系统中各节点的功率流动与碳排放之间的映射关系,实现对电能传输过程中碳足迹的追踪与量化分析,属于电力系统低碳调度与碳流管理领域的关键技术。文中强调“顶级EI完美复现”,表明其算法和仿真结果具有较高的学术严谨性和可重复性,适用于科研验证与教学演示。; 适合人群:电力系统、能源与动力工程、电气工程及其自动化等相关专业的研究生、科研人员以及从事电力系统低碳化、碳排放核算工作的技术人员。; 使用场景及目标:①用于电力系统碳排放流理论的学习与仿真验证;②支撑含新能源接入的电力系统低碳调度、碳交易、绿色电力溯源等课题的研究;③为撰写高水平学术论文(如EI/SCI期刊)提供可靠的代码基础和技术参考。; 阅读建议:读者应具备电力系统分析、Matlab编程的基础知识,建议结合电力系统潮流计算、节点导纳矩阵等前置知识进行学习,并通过调整系统参数和运行方式,深入理解碳排放流的分布规律与影响因素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值