jQuery的animate()scrollTop属性在iPad Safari上不起作用

时间:2015-04-30 22:02:47

标签: jquery ios css safari scrolltop

我有一个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;

任何人对于为什么有任何想法?

1 个答案:

答案 0 :(得分:4)

我有一段时间遇到同样的问题。我不记得究竟为什么,但似乎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动画,但为移动设备使用自定义滚动脚本。向原作者道歉,我不记得剧本的来源。希望这会有所帮助。