//textarea根据文本域内容自动调整高度
//用法在textarea中直接添加data-adaptheight属性即可

(function() {
    function adjustHeight(textareaElement, minHeight) {
        // compute the height difference which is caused by border and outline
        // 计算因边框和轮廓产生的高度差异
        var outerHeight = parseInt(window.getComputedStyle(el).height, 10);
        var diff = outerHeight - el.clientHeight;

        // set the height to 0 in case of it has to be shrinked
        // 设置高度为0以防需要收缩（高度）
        el.style.height = 0;

        // set the correct height
        // el.scrollHeight is the full height of the content, not just the visible part
        // 设置正确的高度
        // el.scrollHeight 是文本内容的全部高度，而不仅仅是可见部分的。
        el.style.height = Math.max(minHeight, el.scrollHeight + diff) + 'px';
    }

    // we use the "data-adaptheight" attribute as a marker
    // 我们使用"data-adaptheight"属性作为一个标记
    var textAreas = document.querySelectorAll('textarea[data-adaptheight]');

    // iterate through all the textareas on the page
    // 迭代本页所有的文本域
    for (var i = 0, l = textAreas.length; i < l; i++) {
        var el = textAreas[i];

        // we need box-sizing: border-box, if the textarea has padding
        // 如果文本域有边距，我们需要设置box-sizing: border-box
        el.style.boxSizing = el.style.mozBoxSizing = 'border-box';

        // we don't need any scrollbars, do we? :)
        // 我们不需要滚动条，不是么？ :)
        //el.style.overflowY = 'hidden';

        // the minimum height initiated through the "rows" attribute
        // 通过"rows"属性初始化的最小高度
        var minHeight = el.scrollHeight;

        el.addEventListener('input', function() {
            adjustHeight(el, minHeight);
        });

        // we have to readjust when window size changes (e.g. orientation change)
        // 当窗口大小改变时，我们需要重新调整高度（例如方向变化）
        window.addEventListener('resize', function() {
            adjustHeight(el, minHeight);
        });

        // we adjust height to the initial content
        // 我们调整初始内容的高度
        adjustHeight(el, minHeight);
    }
}());