遇到某些无法在浏览器中查看元素的bug应该如何排查(实例)

5 篇文章 0 订阅

通常,我们遇到bug时,总是F12去看相关的位置,看dom,数据,CSS是否有问题。这是前端检查bug的常用手段。那么,不知道你有没有遇到那种特殊情况,就是我根本没法在浏览器中查看某一项操作具体情况,这种时候我们应该怎样排查问题呢?下面,我就用我实际遇到的情况来说一说解决的思路,主要学习思路哈。

一、问题情况

同事跑来找我帮忙,说有个bug解决不了,具体内容是:el-tree组件节点拖拽时,定位线位置不正确。如图
在这里插入图片描述
拖动工商管理,定位线却在mimi那一行上边

二、问题分析

这里的问题是出现在拖拽上边,元素检查就没用了,因为我们没办法在拖拽的同时进行元素检查,那么久只能从代码层面来解决了,其实这种一般都是样式问题,但是既然是思路说明,就按正常步骤来了。

三、解决问题

1、去除无关影响

这一步就是将跟这里不相关的东西全部注释掉,防止污染,万一是污染的问题,这里就再次操作你就会发现正常了,然后一步步放开注释部分,什么时候出问题了,就是哪里的错误。

2、html部分

<el-tree
        ref="tree"
        style="margin-top: 10px"
        :data="data"
        node-key="id"
        default-expand-all
        highlight-current
        draggable
        :filter-node-method="filterNode"
        :expand-on-click-node="false"
        :allow-drop="allowDrop"
        :allow-drag="allowDrag"
        @node-click="handleNodeClick"
        @node-drop="handleDrop"
      >
        <span slot-scope="{ data, node }" class="custom-tree-node">
          <span class="tree-node-name"
            ><i class="el-icon-folder" style="margin-right: 8px; margin-top: 2px"></i
            ><Tooltip :tips-text="data.name" :row-text-num="5" :row="1"></Tooltip
          ></span>
          <span>
            <template v-if="node.level < 4">
              <el-button
                size="mini"
                type="text"
                icon="el-icon-circle-plus-outline"
                @click="() => handleAdd(data, 'add')"
              ></el-button>
            </template>
            <template v-if="node.level !== 1">
              <el-button
                size="mini"
                type="text"
                icon="el-icon-edit-outline"
                @click="() => handleAdd(data, 'edit')"
              ></el-button>
              <el-button
                size="mini"
                type="text"
                icon="el-icon-delete"
                @click="() => remove(data)"
              ></el-button>
            </template>
          </span>
        </span>
      </el-tree>

可以发现这个树状组件有插槽什么的,排查这里将所有插槽部分注释掉,查看是否是插槽中代码问题。
注释后发现问题依然存在,所以非此处问题

3、js部分

既然不是html问题,那么接下来检查js,先将组件相关方法全部注释或删除只留基础无影响属性,如下

<el-tree
        ref="tree"
        style="margin-top: 10px"
        :data="data"
        node-key="id"
        default-expand-all
        highlight-current
        draggable
        :expand-on-click-node="false"
        :allow-drop="allowDrop"
        :allow-drag="allowDrag"
      >
      </el-tree>

操作后发现问题还是存在。那么进行第三步

3、css部分

将相关的css全部注释,只留官方默认样式,就下面这一坨全部注释

::v-deep .el-tree {
  max-height: 70vh;
  overflow-y: auto;
  ::-webkit-scrollbar {
    height: 8px;
  }

  &::-webkit-scrollbar-thumb {
    border-radius: 10px;
    background: #cccccc;
    border-radius: 4px;
  }
}
::v-deep .is-current > .el-tree-node__content > .custom-tree-node > .tree-node-name {
  color: #4974f5;
}
::v-deep .el-card__header {
  font-weight: bold;
  padding: 12px 20px !important;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  word-break: break-all;
}
.tree-node-name {
  max-width: 145px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  display: flex;
  align-items: center;
}
.custom-tree-node {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 14px;
  padding-right: 8px;
}

测试后我发现,问题消失,定位正确了。

4、缩小范围

既然定位到问题所在了,接下来就是一层层的放开注释,查看什么时候问题再次存在,当再次出现的时候再一层层放,什么时候定位具体问题在哪,什么时候结束。

当我放开下面这一段时,发现问题再次出现,那么问题就出现在这里,这几个样式可能会影响位置的就只有max-height了,我试验注释,发现问题果然不见了,接下来就是问题分析了

::v-deep .el-tree {
  max-height: 70vh;
  overflow-y: auto;
  ::-webkit-scrollbar {
    height: 8px;
  }

5、问题分析

问题出现原因是,最大高度限制在了70vh,当不限制高度时问题消失,那么说明这个线的定位其实是跟整个el-tree高度有关,应该是根据高度来计算偏移距离,那么应该是节点越多偏移量越大,进行试验后发现猜想成立,那么最后就是解决问题了

6、解决问题

原因是高度不能给限制了,那么久很简单了,将el-tree再包一层,外边再放个盒子限制高度就好,el-tree就不给他限制高度了,实际操作后问题解决。

注:这里只是提了一个不算难的示例,重要的是这种排除法的解决思路,而不是这个例子

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值