javascript - 移动端scroll事件延迟怎么解决
黄舟
黄舟 2017-04-11 12:53:09
[JavaScript讨论组]

移动端在监听scroll时候总是会出现延迟,例如在页面滚动到一定位置后给某个p添加类名,但是在移动端中总是在页面停止滚动后才会触发onscroll事件,请问这个怎么解决?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
大家讲道理

1、这个问题有不少人遇到,SegmentFault搜索:微信 scroll、百度搜索:微信 scroll,原生的浏览器就支持。

2、查阅了几十个相关网页,找了一个 页面在微信上滑动时要手指松开才会触发scroll事件怎么办 的代码,测试确实可用,没看明白怎么实现的。

3、坐等大神解答。


估计你的代码有问题,实测(iPhone+Android)滚动中也可以触发。

问题中提到,给p添加类名,滚动停止才触发。
demo的代码修改为 给dom添加类名。

重新调整代码。
滚动中,如果滚动到当前位置,当前位置的元素背景变为淡红色。

可以测试下,http://www.shuodahua.com/othe...
已经 安卓(MX4一加1) + iPhone(iPhone6iPhone6P) 真机测试 。

<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8"/>
<style>
body{
    margin:0;
}
nav{
    position:fixed;
    top:200px;
    left:30%;
    right:30%;
    z-index:999;
}
nav textarea{
    width:100%;
    background:#EEE;
}
p{
    margin:0;
    background:#FFE;
    height:30px;
    text-align:center;
    font-size:8px;
    color:#CCC;
}
p:after{
    content:'还没到我这里,我没有变色';
    position:absolute;
    line-height:30px;
}
p.active{
    background:#FEE;
    color:#C99;
}
p.active:after{
    content:'已经到达我这里了,我为红色';
    position:absolute;
    line-height:30px;
}
</style>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, maximum-scale=1.0, minimal-ui">
</head>
<body>
<nav>
  <textarea id="result"></textarea>
</nav>
<script>
var pTop = [];
var pCount = 500;
for( var i = 0 ; i < pCount ; i++ ){
    document.writeln('<p id="dom_' + i + '"></p>');
    pTop.push({
        dom : document.getElementById('dom_' + i),
        top : document.getElementById('dom_' + i).offsetTop,
        active : false
    });
}
document.onscroll = function(){
    var top = document.body.scrollTop;
    document.getElementById('result').value = top;
    top += 200;
    for( var i = 0 ; i < pCount ; i++ ){
        if ( pTop[i].top < top ){
            if( pTop[i].active == false ){
                pTop[i].active = true;
                pTop[i].dom.className = "active";
            }
        } else {
            if( pTop[i].active == true ){
                pTop[i].active = false;
                pTop[i].dom.className = "";
            }
        }
    }
}
</script>
</body>
</html>
PHP中文网

ios的webview在弹性滚动的时候会阻止事件响应和Dom改变带来的页面渲染变化。
要解决的话用iScroll.js或者自己实现滚动

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号