【问题标题】:jQuery's animate() scrollTop property doesn't work on iPad SafarijQuery animate() scrollTop 属性在 iPad Safari 上不起作用
【发布时间】:2015-07-10 19:09:09
【问题描述】:

我有一个 div,如果它变长了会显示一个滚动条。它的 css 是

top: 35px;
overflow: hidden;
position: absolute;
width: 100%;
height: 100%;
bottom: 0px;
overflow-x: hidden;
display: block;

不知何故,当我使用 jQuery (v1.7.1) 滚动这个 div 时,它在 iPad (iOS 8.3) Safari 上不起作用,但它在所有桌面浏览器上都能完美运行。这是代码

$('#myDivId').animate({ scrollTop: 100 });

这个纯 JS 代码在 iPad safari 上也不起作用,但在桌面浏览器上可以正常工作

var myDiv = document.getElementById('myDivId');
myDiv.scrollTop = 100;

有人知道为什么吗?

【问题讨论】:

  • 你发现了吗?我有同样的问题,虽然每次点击锚链接时它都会滚动一小部分,然后它会滚动,因此目标位于屏幕的中心。很奇怪。

标签: jquery ios css safari scrolltop


【解决方案1】:

不久前我遇到了同样的问题。我不记得确切的原因,但似乎 jQuery animate 不适用于这些设备。这对我有用:

var scrollOffset = $('#myDivId').offset().top;

if (navigator.userAgent.match(/iPad|iPhone|iPod|Android|Windows Phone/i)) {  

            function customScrollTo(to, duration) {
                var start = 0,
                    change = to - start,
                    currentTime = 0,
                    increment = 20;

                var animateScroll = function(){        
                    currentTime += increment;
                    var val = Math.easeInOutQuad(currentTime, start, change, duration);                        
                    window.scrollTo(0,val);

                    if(currentTime < duration) {
                        setTimeout(animateScroll, increment);
                    }
                };
                animateScroll();
            }

            Math.easeInOutQuad = function (t, b, c, d) {
                t /= d/2;
                if (t < 1) return c/2*t*t + b;
                t--;
                return -c/2 * (t*(t-2) - 1) + b;
            };

            customScrollTo(scrollOffset, 1000);
}else{
            $('#myDivId').animate({
                scrollTop: scrollOffset
            }, 1000, function(){
                $('#myDivId').clearQueue();
            });
}

它对普通浏览器使用 jQuery animate,但对移动设备使用自定义滚动脚本。向原作者道歉,我不记得剧本来自哪里。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多