记录--谁还没个靠bug才能正常运行的程序

这篇具有很好参考价值的文章主要介绍了记录--谁还没个靠bug才能正常运行的程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--谁还没个靠bug才能正常运行的程序

最近遇到一个问题,计算滚动距离,滚动比例达到某界定值时,显示mask,很常见吧^ _ ^

这里讲的不是这个需求的实现,是其中遇到了一个比较有意思的bug,靠这个bug才达到了正确效果,以及这个bug是如何暴露的(很重要)。

下面是演示代码和动图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container {
            width: 300px;
            max-height: 300px;
            background-color: black;
            position: absolute;
            top: 60px;
            left: 50%;
            transform: translateX(-50%);
            overflow-y: auto;
        }
        .child {
            width: 260px;
            height: 600px;
            margin: 0px 20px;
            background-color: pink;
            position: relative;
        }
        .flag {
            position: absolute;
            width: 100%;
            height: 25px;
            background-color: blueviolet;
            color: aliceblue;
            text-align: center;
            line-height: 25px;
            font-size: 14px;
            left: 0;
            right: 0;
        }
        .top {
            top: 0;
        }
        .bottom {
            bottom: 0px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="child">
            <div class="flag top">top</div>
            <div class="flag bottom">bottom</div>
        </div>
    </div>
</body>
</html>

记录--谁还没个靠bug才能正常运行的程序

开始计算啦,公式:滚动比例 = 滚动距离 / 可滚动距离

滚动距离: $0.scrollTop

可滚动距离: $0.scrollHeight - $0.offsetHeight

即:scrollRatio = scrollTop / (scrollHeight - offsetHeight)

滚动到底部,计算结果是 300 / (600 - 300) = 1

记录--谁还没个靠bug才能正常运行的程序

我们需要拿scrollRatio某界定值(比如0.1)作大小的比较,计算是true还是false(用isShow = scrollRatio < 某界定值来保存)。

这里一切正常。


不正常的情况出现了

就是没有出现滚动条的情况,即.child的高度没有超过.container的高度时,把.child的高度设成.containermax-height,就没有滚动条了(下面讲的情景也都是没有滚动条的情况)。

记录--谁还没个靠bug才能正常运行的程序

 这个时候再去计算,得到了NaN,以至于 NaN < 0.1 = false

记录--谁还没个靠bug才能正常运行的程序

因为isShow的预期就是false,所以一直都没有发现这个bug。


那么它是如何暴露的呢?

后来新的需求给.container加了border。演示一下加border,然后再去计算:

记录--谁还没个靠bug才能正常运行的程序

发现没,这时候$0.offsetHeight的高度把border的高度也算进去了,结果就成了true,这不是想要的结果 ❌。


然后就是一番查验

offsetHeight是一个元素的总高度,包括可见内容的高度、内边距(padding)、滚动条的高度(如果存在)以及边框(border)的高度。

而我们这里只需要可见的高度,就可以用到另一个属性了clientHeight

clientHeight是指元素的可见内容区域的高度,不包括滚动条的高度和边框的高度。它仅包括元素的内部空间,即内容加上内边距。

记录--谁还没个靠bug才能正常运行的程序

当然这也只是继续使除数为0,然后得到结果为NaN,不过bug已经暴露出来了,后面就是一些其他的优化啦~


总结 + 复习(盒模型 box-sizing)

发现没有,offsetHeightclientHeight的区别,就像盒模型中的标准盒模型怪异盒模型的区别:

box-sizing: content-box(默认,标准盒模型):宽度和高度的计算值都 不包含 内容的边框(border)和内边距(padding)。添加padding和border时, 使整个div的宽高变大。

box-sizing: border-box(怪异盒模型):宽度和高度的计算值都 包含 内容的边框(border)和内边距(padding)。添加padding和border时, 不会 使整个div的宽高变大。

本文转载于:

https://juejin.cn/post/7283087306603823116

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--谁还没个靠bug才能正常运行的程序文章来源地址https://www.toymoban.com/news/detail-710912.html

到了这里,关于记录--谁还没个靠bug才能正常运行的程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BUG:vue表单验证校验不报错,必填都有信息,就是不能正常往下进行

    UI:element-UI 前端:vue2 正常表单里面,有的信息要求必填或者加了一些限制,作为校验验证,只有走到校验才会执行其他行为,比如调用保存接口。 而我遇到的问题是,无论怎么点保存都不会正常往下走,校验状态始终为false,也就是说校验这块有问题。 可是程序页面都没报

    2024年04月12日
    浏览(31)
  • 微信小程序-开了调试Vconsole能正常运行,不开调试不能正常运行

    这个微信小程序太奇怪了,做了一点小改动要上线,在本地连接真机调试好好的,上到体验环境手机打开就不行了。 而且奇怪,体验版打开调试后又正常了,加载页面的时候报了一个错 \\\"(in promise) MiniProgramErrornInvalid attempt to spread non-iterable instance.nIn order to be iterable, non-arra

    2024年02月11日
    浏览(36)
  • IE浏览器只能以管理员身份才能运行,如何恢复?

    突然发现IE浏览器打不开,右击以管理员模式倒是可以打开,尝试了网上好多方法,还是没用,最后找到IE浏览器的安装目录: C:Program Files (x86)Internet Explorer 发现使用管理员身份可以打开,权限问题,现在我们来将此权限恢复 1、WIN+R打开运行框; 2、输入regedit,打开注册表

    2024年02月13日
    浏览(43)
  • 网络正常运行时间监控工具

    正常运行时间是衡量系统可靠性的指标,表示为机器工作和可用时间的百分比。当提到 IT 网络时,正常运行时间是衡量网络设备、网站和其他服务的可用性的指标。网络正常运行时间通常以百分位数来衡量,例如“五个 9”,这意味着系统在 99.999% 的时间内正常运行。网络正

    2024年01月21日
    浏览(63)
  • vue 运行时正常,打包却报错

     解决方法:删除 vue-cli  自带的压缩  plugin:OptimizeCssnanoPlugin 具体操作:找到vue.config.再添加如下删除配置  

    2024年02月13日
    浏览(36)
  • 判断 Mac显卡 mps 是否可以正常运行

    使用 Apple 的 Metal Performance Shaders (MPS) 作为 PyTorch 的后端来启用加速 GPU 训练。 MPS 后端扩展了 PyTorch 框架,提供了在 Mac 上设置和运行操作的脚本和功能。 MPS 使用针对每个 Metal GPU 系列的独特特性进行微调的内核来优化计算性能。 新设备将机器学习计算图和基元映射到 MPS 提

    2024年02月15日
    浏览(33)
  • vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常[已解决]

    vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常,在网上寻找很久说是keepAlive的原因,后来看了看我的代码~ 原来的代码: 改后的代码: 由此可见,根元素一定要由一个div去包裹住! template必须有且只能有一个div 在这样才会正常显示~ 原理: 这里我们要先

    2023年04月27日
    浏览(41)
  • CCS:驱动设备运行正常,Test Connection失败

    1. CCS Test Connection失败: -----[An error has occurred and this utility has aborted]-------------------- This error is generated by TI’s USCIF driver or utilities. The value is ‘-250’ (0xffffff06). The title is ‘SC_ERR_ECOM_EMUNAME’. The explanation is: An attempt to access the named emulator via USCIF ECOM has failed. [End] 2. 检查设备管理

    2024年02月09日
    浏览(45)
  • qt软件正常运行的崩溃了定位行号方法

    软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。因此,软件崩掉,我们需要能给出信息才行,指导我们修改源码。解

    2024年02月07日
    浏览(26)
  • VScode运行python时pygame无法正常导入

    用vscode运行python代码,需要pygame包,但是pygame下面有波浪线,提示无法正常导入。 以下为导入方法。 https://www.pygame.org/download.shtml 我直接下载了箭头指示的这个包,解压到python目录里即可。3113和3810是下载的两个python版本,我将tar包解压到了python的大文件目录里。 /https://ww

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包