资讯专栏INFORMATION COLUMN

textarea 自动高度

vboy1010 / 2244人阅读

textarea 自动撑开高度
var textAreaArr = document.querySelectorAll(".textarea");
    for (var i = 0; i < textAreaArr.length; i++) {
    autoTextarea(textAreaArr[i]);
}
function autoTextarea(elem, extra, maxHeight) {
        extra = extra || 0;
        var isFirefox = !!document.getBoxObjectFor || "mozInnerScreenX" in window,
        isOpera = !!window.opera && !!window.opera.toString().indexOf("Opera"),
        addEvent = function (type, callback) {
                elem.addEventListener ?
                        elem.addEventListener(type, callback, false) :
                        elem.attachEvent("on" + type, callback);
        },
        getStyle = elem.currentStyle ? function (name) {
                var val = elem.currentStyle[name];

                if (name === "height" && val.search(/px/i) !== 1) {
                        var rect = elem.getBoundingClientRect();
                        return rect.bottom - rect.top -
                                parseFloat(getStyle("paddingTop")) -
                                parseFloat(getStyle("paddingBottom")) + "px";

                }
            return val;
        } : function (name) {
                        return getComputedStyle(elem, null)[name];
        },
        minHeight = parseFloat(getStyle("height"));
 
        elem.style.resize = "none";
 
        var change = function () {
                var scrollTop, height,
                        padding = 0,
                        style = elem.style;
 
                if (elem._length === elem.value.length) return;
                elem._length = elem.value.length;
 
                if (!isFirefox && !isOpera) {
                        padding = parseInt(getStyle("paddingTop")) + parseInt(getStyle("paddingBottom"));
                }
            scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
 
                elem.style.height = minHeight + "px";
                if (elem.scrollHeight > minHeight) {
                        if (maxHeight && elem.scrollHeight > maxHeight) {
                                height = maxHeight - padding;
                                style.overflowY = "auto";
                        } else {
                                height = elem.scrollHeight - padding;
                                style.overflowY = "hidden";
                        }
                    style.height = height + extra + "px";
                        scrollTop += parseInt(style.height) - elem.currHeight;
                        document.body.scrollTop = scrollTop;
                        document.documentElement.scrollTop = scrollTop;
                        elem.currHeight = parseInt(style.height);
                }
        };
 
        addEvent("propertychange", change);
        addEvent("input", change);
        addEvent("focus", change);
        change();
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/51860.html

相关文章

  • 封装一个自动resize的textarea(Angular)

    摘要:将的高度和设置为仅能输入一行,这么做是为了用元素的表示其内容的高度。在模块内新建一个组件。输出属性将会在用户输入的数据变化时发出数据。让的高度始终等于的这里是直接操作,建议最好使用进行的修改。 showImg(https://segmentfault.com/img/bVbjsjA?w=223&h=233); >> 前往stackblitz编辑代码 核心思路 showImg(https...

    xiaolinbang 评论0 收藏0
  • textarea 自动高度

    textarea 自动撑开高度 var textAreaArr = document.querySelectorAll(.textarea); for (var i = 0; i < textAreaArr.length; i++) { autoTextarea(textAreaArr[i]); } function autoTextarea(elem, extra, maxHei...

    zebrayoung 评论0 收藏0
  • textarea文域高度自适应

    摘要:高度自适应文本域高度随内容自动变化,不会出现滚动条,可以有多种方法,除了用动态设置它的高度值以外还有其它更简单的方法。还有一种方法,利用兄弟节点撑开父级高度,设置高度为即可。 textarea高度自适应 文本域高度随内容自动变化,不会出现滚动条,可以有多种方法,除了用js动态设置它的高度值以外还有其它更简单的方法。 可以用div标签模拟textarea,将div的contentedit...

    hzx 评论0 收藏0
  • 第八集: 从零开始实现一套pc端vue的ui组件库(input, textarea组件)

    摘要:第八集从零开始实现输入框组件本集定位组件是交互的一大利器他与用户的交流最为密切所以奠定了他在组件界的重要地位也算是一种如果可以的话本集也会一起说完毕竟是一个类型的一起学完收获会很大古人云组件不封输入框,一到面试就发慌一简介大家如果对这个 第八集: 从零开始实现(输入框input,textarea组件) 本集定位: input组件是交互的一大利器, 他与用户的交流最为密切, 所以奠...

    binaryTree 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<