scrollTop失效问题

最近在做京东案例:当搜索框随着滚动条的滚动产生渐变效果

/**
 * Created by Administrator on 2019/4/11.
 */
window.onload = function () {
    //:头部搜索快js的效果
    //1:获取当前banner的高度
    var banner = document.querySelector(".jd_banner");
    var bannerHeigth = banner.offsetHeight;
    //console.log(bannerHeigth);
    //获取head搜索快
    var search = document.querySelector(".jd_search");
    //2:获取banner滚动出屏幕的距离,监听屏幕滚动
    window.onscroll = function () { //页面滚动时触发
        console.log("asdfdvb");
        var banner = document.querySelector(".jd_banner");
        var offsetTop = document.documentElement.scrollTop;//被选元素的垂直滚动条位置
        console.log(offsetTop);//当滚动条位于最顶部时,位置是 0。
        //3:计算比例值,获取透明度,设置背景样式
        var opacity = 0;
        /*判断,如果当banner还没有完全 滚出屏幕,那么才有必要计算透明度和设置透明度*/
        if (offsetTop < bannerHeigth) {
            opacity = offsetTop / bannerHeigth;
            /*设置样式*/
            search.style.backgroundColor = "rgba(233,35,34," + opacity + ")";
        }
        
    }

}

scrollTop始终没有效果,最后的结果是scrollTop有兼容性

1、各浏览器下 scrollTop的差异 
IE6/7/8: 
对于没有doctype声明的页面里(混杂模式)可以使用  document.body.scrollTop 来获取 scrollTop高度 ; 
对于有doctype声明的页面(严格模式)则可以使用 document.documentElement.scrollTop; 
Safari: 
safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset ; 
Firefox: 
火狐等等相对标准些的浏览器就省心多了,直接用 document.documentElement.scrollTop ; 
2、获取scrollTop值 
完美的获取scrollTop 赋值短语 : 
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

通过这句赋值就能在任何情况下获得scrollTop 值。 
仔细观察这句赋值,你发现啥了没?? 
没错, 就是 window.pageYOffset  (Safari)   被放置在 || 的中间位置。 
因为当 数字0 与 undefine 进行 或运算时,系统默认返回最后一个值。即或运算中 0 == undefine ; 
当页面滚动条刚好在最顶端,即scrollTop值为 0 时。  IE 下 window.pageYOffset  (Safari) 返回为 undefine ,此时将window.pageYOffset  (Safari) 放在或运算最后面时, scrollTop 返回 undefine ,  undefine 用在接下去的运算就会报错咯。 
而其他浏览器 无论 scrollTop 赋值或运算顺序如何都不会返回 undefine.  可以安全使用.. 
所以说到头还是IE的问题咯. 杯具… 
精神有点恍惚,不知道有没有表达清楚。 
不过最后总结出来这句实验过OK,大家放心使用; 
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

DTD相关说明:

页面具有 DTD,或者说指定了 DOCTYPE 时,使用 document.documentElement。

页面不具有 DTD,或者说没有指定了 DOCTYPE,时,使用 document.body。

在 IE 和 Firefox 中均是如此。

为了兼容,不管有没有 DTD,可以使用如下代码:

var scrollTop = window.pageYOffset  //用于Safari
                || document.documentElement.scrollTop (严格模式)  
                || document.body.scrollTop  (混杂模式)
                || 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值