【JavaScript】如何根据长度并计算渲染px width宽度

需求

公司项目需求是要做动态响应式表头,因此就要动态渲染表格表头宽度在一定范围内(100px-200px)。
完整实现图:image

实现过程

这里就不讲css自动超出省略了,主要是然后根据后台返回的字符串计算实际渲染字符宽度,并设置给 element 表头的 min-width

:min-width="calcMinWidth(item.displayName)"

核心函数代码:

calcMinWidth(displayName) {
      // 100 - 200
      // console.log(displayName.length)
      console.log(displayName)
      // 计算文本在页面所占px宽度 -- 扩展String原型方法pxWidth
      String.prototype.pxWidth = function(font) {
        const canvas =
          String.prototype.pxWidth.canvas ||
          (String.prototype.pxWidth.canvas = document.createElement('canvas'))
        const context = canvas.getContext('2d')
        font && (context.font = font)
        const metrics = context.measureText(this)
        return metrics.width
      }
      // 根据需求范围返回
      const width = displayName.pxWidth('bold 18px Lato') + 30
      if (width <= 100) {
        return '100'
      } else if (width >= 200) {
        return '200'
      } else {
        return width + ''
      }
    },

因为我这个是英文项目,没有考虑中文字符,如果存在中文字符还需要特别处理,更多请参考下面的文章。

参考链接

js获取字符长度并计算px宽度

### 实现 UniApp 中根据文本内容动态调整元素宽度 在 UniApp 开发过程中,为了使元素能够根据其内部文本的内容自动调整宽度,可以利用 CSS 的 `inline-block` 显示模式以及 JavaScript计算应用合适的宽度。 #### 使用 inline-block 和 white-space 属性 通过设置容器的 display 为 `inline-block` 可以让该容器依据子元素(即文本)的实际尺寸收缩或扩展。同时,对于单行显示且超出部分隐藏的需求,可以通过组合使用 `white-space`, `overflow`, 和 `text-overflow` 属性达成[^1]: ```css .text-container { display: inline-block; white-space: nowrap; /* 防止文字换行 */ overflow: hidden; /* 超出的部分不可见 */ text-overflow: ellipsis; /* 当对象内溢出时使用省略号表示 */ } ``` #### 利用 Vue.js 数据绑定与方法更新样式 如果需要更精确控制,则可以在组件中定义一个方法用于测量文本渲染后的实际宽度据此修改对应样式的 width 值。此过程通常涉及 DOM 操作,在 mounted 生命周期钩子函数里执行较为合适[^3]: ```javascript export default { data() { return { contentWidth: 'auto' // 初始化宽度为 auto } }, methods: { adjustElementWidth(el) { this.$nextTick(() => { // 确保DOM已经更新完毕再获取真实宽高 const rect = el.getBoundingClientRect(); this.contentWidth = `${rect.width}px`; }); } }, mounted() { let element = document.querySelector('.dynamic-text'); if (element !== null){ this.adjustElementWidth(element); } } }; ``` 上述代码片段展示了如何在一个 Vue 组件中创建一个名为 `adjustElementWidth()` 的方法来实时监测指定 HTML 元素 `.dynamic-text` 渲染完成之后的确切宽度将其赋值给 `contentWidth` 这一数据属性以便后续作为 style binding 的一部分应用于视图层。 最后,在模板文件中的相应位置添加 v-bind 或者 :style="..." 表达式即可实现基于文本长度变化而改变 div 宽度的效果: ```html <div class="text-container" :style="{width: contentWidth}"> {{ yourTextVariable }} </div> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值