onscroll和fixed定位的问题

关于为什么会出现,窗口滚动条监控事件没起作用的问题:

1.问题在于这里没被触发:

window.onscroll=()=>{
           let htmlscroheight= document.documentElement.scrollHeight;
           let htmlscrolltop= document.documentElement.scrollTop;
           let htmlclientheight= document.documentElement.clientHeight;
            
            let sum=Math.floor(htmlscrolltop+htmlclientheight);
            console.log(htmlscroheight,htmlscrolltop,htmlclientheight,sum);
            if(htmlscroheight==sum){
                this.geturl();
            }
        }

2.相关组件







3.APP主入口组件


4.index.hmtl



  
    
    
    
    
    yujingxiacai
    
  
  
    
    

5.思考问题:

这里首先我们是在vue声明周期的挂载处mounted(){ }绑定没错,但是就是不起作 用,但是呢,如果你再控制台手动敲window.onscroll监控事件却是好使的。因
问题很混乱,其实很自然。

6.找问题

js的写法没错,测试,发现当前监控的文档元素是整个html,怎么动都没用,scrolltop永远是0。这时就因该考虑考虑样式的问题了。

我们知道我们的被滚动对象应该是我们的ul,但是此时此刻我们发现我们的ul是固定定位的,所以当然滚动事件是无法启动的,后来发现去掉了,但是还是不行,这就很懵逼了,
这里由于我们的结构是ul渲染在app里面,而此时app是fixed定位的,这下去掉app的fixed定位,刚刚好使!!!

7.总结

对于window.onscorll监听事件
当页面的滚动条滚动时,就会执行监听事件里面的事件

所以前提是保证页面能滚动,我们fixe定位会使我们的滚动失效,当我们fixed定位后的元素里面嵌套的子元素也会被fixed定位了,当有fixed定位时不要用嵌套的思想做,而是用脱离文档流的原理,让应该fixed定位的元素不内含其他不需要fixed定位的元素,而是并列关系 或 其他组合关系。

8.剩余问题

还有一个问题就是上线后的手机端无法向下滚动,在pc Browser端是可以的,而且pc端的浏览器用移动端调试模式也是可以滚动的。
问题真的是解决不完,估计是手机端禁用了滚动事件,但是之前好使啊。。。~. ~
这里估计怕不是是要为手机端加一个overflow-Y:scroll;

你可能感兴趣的:(前端,dom,js,window事件)