欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过上两版 我又进行了优化[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()在把这些事件全部取消掉
是不是多了一层保障!