vue获取宽度不准确

发布于 2022-09-06 11:53:24 字数 1297 浏览 13 评论 0

每个li元素都是动态创建的,宽度会根据每个li的文字多少决定,因为要横向滚动,所以要获取每个li的宽度来给ul赋值,我用的是better-scroll,现在获取宽度的时候比实际宽度少了3个像素,但是我把li里面的i标签拿掉以后就是正常,以下是我的代码。

<template>
    <div>
      <div class="nav" ref="wrapper">
        <ul class="content clearfix ">
          <router-link  v-for="(item,index) in getView" :to='{path:item.path}' :key="index" tag="li" >
              {{item.name}}<i v-if='index !== 0' class="el-icon-error" @click.prevent='_removeView(item.path,index)'></i>
          </router-link>
        </ul>
      </div>
    </div>
  </template>

<script>
export default {
return {
    getView:[
        {
            "name":"首页",
            "path":"/index"
        },
        {
            "name":"系统管理",
            "path":"/xtgl"
        }
    ]
  },
  methods:{
    setWidth:function(){
        this.$nextTick(() => {
            var content = this.$refs.content;
            var li = content.children;
            var width = 0;
            for( let i=0;i<li.length;i++)
            {
                width += li[i].clientWidth;
                console.log(li[i].clientWidth)
            }
            content.style.width = width +'px'; 
            
        });
    },
  }
}
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

明明#如月 2022-09-13 11:53:24

谢邀!
本来打算直接运行一下你那个代码的,不过看起来似乎不行。
除了clientWidth获取可视区域宽度以外,还有几个获取宽度的属性,例如offsetWidth,可以都试一试。

还有一个问题就是你提到了去掉里面的i标签获取的宽度就正常了,那么有没有对所有标签的默认样式进行统一的处理,因为很多标签都是有默认样式的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文