通过上两版 我又进行了优化[jquery中textarea自适应高度并且在一定高度的时候出现滚动条,当我第二次操作这个textarea,她不会去进行自适应]
程序员文章站
2022-03-11 16:40:43
...
//文本域高度计算
function textareaAutoHeight(queryTxt, minHeight,maxHight,manual) {
if (!queryTxt) {
return;
}
var $textarea = $('.textarea_auto_height');
if ($textarea.length === 0) {
$textarea = $('<textarea class="textarea_auto_height"></textarea>');
$('body').append($textarea);
}
$('body').on('input change', queryTxt, onInput);
function onInput() {
var $this = $(this);
var val = $this.val();
var width = $this.width();
$textarea.width(width);
$textarea.val(val);
var height = $textarea[0].scrollHeight;
if (height < minHeight) {
height = minHeight;
}else if(height > maxHight){
height = maxHight;
}
$this.innerHeight(height);
}
if(manual){
var oldHight;
var oldWidth;
var $curtextarea;
$('body').on('mousedown', queryTxt, onMousedown);
function onMousedown(e){
$curtextarea = $(this);
e = e || window.event;
var clientrect = $curtextarea[0].getBoundingClientRect();
var rectRight =clientrect.right;
var rectBottom = clientrect.bottom;
if(rectRight - e.clientX >= 15 || rectBottom- e.clientY >= 15){
return;
}
oldHight = $curtextarea.height();
oldWidth = $curtextarea.width();
$('body').off('mousemove',onMousemove).on('mousemove',onMousemove);
$('body').off('mouseup',onMouseup).on('mouseup',onMouseup);
}
function onMousemove(){
var newHight = $curtextarea.height();
var newWidth = $curtextarea.width();
if(newHight != oldHight || newWidth !=oldWidth){
$curtextarea.attr("manual","1");
$('body').off('mousemove',onMousemove);
$('body').off('mouseup',onMouseup);
}
}
function onMouseup(){
$('body').off('mousemove',onMousemove);
$('body').off('mouseup',onMouseup);
}
}
$(queryTxt).trigger('input');
}
$(function(){
textareaAutoHeight('.ticket_field_li[istype="3"] textarea:not([manual="1"])',80,160,true);
})
我写这个代码的意思
上一篇跟大家讲过一部分 ,今天我又多传了一个参数manual,这个就是说当我是true的时候去走这个操作,我肯定要获取到鼠标点击的坐标 以及这个文本域的坐标 getBoundingClientRect()可以去看一下这个方法 咋们现在要做的事 是看他拖动的位置是不是在右下角,因为mousemove,mouseup, mousedown 这三个事件 如果我不去判断他这个拖动是不是在右下角的话 假如在我们想选中删除的时候是不是也是走的这三个事件 所以要特别区分开!onMousemove()事件的时候去加上一个属性属性值
去通过这个去进行一个判断!onMouseup()在把这些事件全部取消掉
是不是多了一层保障!
上一篇: 最近接触到的mui弹出框
下一篇: ai怎么将文字变成手写字体效果?