实用小工具不定期合集(textarea 高度自适应自动计算Y轴刻度json转table)

Posted cheaptrick

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实用小工具不定期合集(textarea 高度自适应自动计算Y轴刻度json转table)相关的知识,希望对你有一定的参考价值。

1.textarea高度自适应

这个非常有用,但是网上的解决方案都不尽人意,话不多说,上代码。

function auto (elem) {
  var minHeight = 30
  var change = function () {
     elem.style.height = minHeight + ‘px‘
     elem.style.overflowY = ‘hidden‘
     if (elem.scrollHeight > minHeight) {      
        elem.style.height = elem.scrollHeight + ‘px‘
     }
  }
  elem.addEventListener("input", change, false)
  elem.addEventListener("focus", change, false)
  elem.addEventListener("propertychange", change, false)
  change()
}

思路很简单,根据内容高度不断重置textarea高度,绑定input, focus, propertychange事件

2.自动计算Y轴高度,先放算法参考链接:https://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axis

意思就是给定几个数值,要能在y轴上较好的展示(算出上下限和区间值)

function scaleNumber (max, min, i) {
  let unround = (max - min) / i   // 等分刻度
  let x = Math.ceil(Math.log10(unround))
  let pow10x = Math.pow(10, x)
  let arr = [0.1, 0.2, 0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.75, 0.8, 0.9, 1]
  for (let item of arr) {
    if (unround / pow10x <= item) {
      var range = item * pow10x
      break
    }
  }
  console.log(range)
  min = range * Math.floor(min / range)
  max = range * Math.ceil(max / range)
  return [max, min]
}

参数i表示需要分几段

3.json转table,这个比较简单但是也比较实用,就记录下来:

    function json2html (str) {
      var reg = /[{2}((?!]]).)+]{2}/g
      var jsonstrarr = []
      var htmlstrarr = []
      var result

      while((result = reg.exec(str)) !== null) {
        // console.log(result)
        jsonstrarr.push(result[0])
      }
      console.log(jsonstrarr)
      for (let item of jsonstrarr) {
        let obj = JSON.parse(item)
        let htmlstr = `<table cellpadding="0" border="1">`
        for (let i of obj) {
          htmlstr += ‘<tr>‘
          for (let j of i) {
            htmlstr += `<td colspan="${j.col}" rowspan="${j.row}">${j.value}</td>`
          }
          htmlstr += ‘</tr>‘
        }
        htmlstr += ‘</table>‘
        htmlstrarr.push(htmlstr)
      }
      let newstr = str
      for (let index in jsonstrarr) {
        newstr = newstr.replace(jsonstrarr[index], htmlstrarr[index])
      }
      return newstr
    }

 

以上是关于实用小工具不定期合集(textarea 高度自适应自动计算Y轴刻度json转table)的主要内容,如果未能解决你的问题,请参考以下文章

textarea高度自适应问题

微信小程序textArea输入框随着输入字数自适应高度

div模拟textarea自适应高度

textarea高度自适应

如何让textarea的高度自适应

textarea的高度自适应