当给盒子设置transform: scale()缩放样式时,通过offsetTop获取元素距离文档顶部的高度时,存在的浏览器兼容bug。

导读:本篇文章讲解 当给盒子设置transform: scale()缩放样式时,通过offsetTop获取元素距离文档顶部的高度时,存在的浏览器兼容bug。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

由于不同浏览器内核不同,对代码解析可能不一致,所以出现兼容问题。

chrome浏览器中,当给<div>盒子设置了transform: scale()缩放样式后,通过offsetTop获取该div盒子中某元素(<p>)到浏览器顶部高度时,不能获取到实际高度,得到的实际是(<p>)元素到<div>之间的高度。

但在Safari浏览器中,盒子设置transform: scale()缩放样式,通过offsetTop获取某一元素到浏览器顶部高度不会存在差别化,都能得到实际到浏览器文档顶部的实际高度。

如:当不给div设置transform: scale()缩放样式时:

html:

<body>
    <div>
        <p id="pH">获取到顶部高度高度</p>
    </div>
<div>


css:

body{
    padding-top:300px;
}

div{
    padding-top:150px;
}


js:

console.log(document.getElementById("pH").offsetTop);  //在chrome和Safari打印结果都为 450

当不给div设置transform: scale()缩放样式时:

html:

<body>
    <div>
        <p id="pH">获取到顶部高度高度</p>
    </div>
<div>


css:

body{
    padding-top:300px;
}

div{
    padding-top:150px;
    transform: scale(1);   //设置了缩放样式
}


js:

console.log(document.getElementById("pH").offsetTop);   //在chrome打印为150,在Safari打印结果都为450

但一般使用到transform: scale()都是给某元素设置动画,要解决这个获取offsetTop的问题,可以用以下方式处理。以背景图为例:

可以通过background的系列属性,设置初始盒子动画样式,不使用transform.scale(1),因为transform.scale(1)设置的就是原始缩放;   动画结束阶段,再添加transform.scale()样式。   这样在执行transform.scale()之前都可以拿到元素到文档顶部的高度,执行后也没有必要拿元素高度了(一般都是滚动条滚动到可视区域,执行动画)。

如果执行后还需要高度,可以尝试使用元素盒子之间距离加减计算得到。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66308.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!