Подтвердить что ты не робот

Как программно прокручивать окно на iPad?

Мое приложение включает в себя несколько функций, которые программно прокручиваются до определенных элементов на странице. К сожалению, он не работает на Safari/iPad. Я пробовал следующие методы прокрутки:

window.scroll(0, y);

window.scrollTo(0, y);

$(window).scrollTop(y);

$('html, body').animate({
    scrollTop: y
});

Невозможно ли программно прокручивать окно на Safari/iPad, или я просто делаю это неправильно? Все эти методы работали для всех браузеров, которые я тестировал на ПК.

4b9b3361

Ответ 1

Я не нашел способ программно прокручивать окно на iPad. Один из возможных способов обхода - обернуть содержимое страницы в фиксированном контейнере div и прокрутить ее, изменив свойство div scrollTop. Вы можете увидеть этот метод в этот код. Я тестировал его на iPad с Safari и Chrome, а также в Windows с Firefox, Chrome и IE11.

HTML

<div id="container">
    <div class="div1"></div>
    <div class="div2"></div>
    <div class="div3"></div>
    ...
</div>

CSS

div#container {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    overflow-y: auto;
}
div {
    height: 100px;
}
.div1 {
    background-color: red;
}
.div2 {
    background-color: green;
}
.div3 {
    background-color: yellow;
}

Javascript

var container = document.getElementById("container");
setInterval(function() {
    container.scrollTop += 1;
}, 20);

Ответ 2

Пробовали ли вы какие-нибудь библиотеки? http://iscrolljs.com/ выглядит многообещающим, но я не могу проверить (нет устройства iOS).

  • Гранулированное управление положением прокрутки, даже во время импульса. Вы всегда можете получить и установить координаты x, y скроллера.
  • Поддержка многоплатформенной поддержки. От старых устройств Android до новейшего iPhone от Chrome до Internet Explorer.

Ответ 3

Он работает отлично для меня на сафари и iPad:

$('html, body').animate({
        scrollTop: 0
 }, 1000);

Не уверен, но вы можете попробовать его, указав некоторые временные интервалы анимации прокрутки в миллисекундах.

Ответ 4

Я использую плагин GreenSock ScrollTo, который творит чудеса. Вы можете захватить его из их веб-сайт

Преимущество заключается в том, что он имеет варианты облегчения и работает на любой платформе и т.д.

$("button").each(function(index, element){
  $(this).click(function(){
    TweenLite.to(window, 1, {scrollTo:{y:"#section" + (index+1),   offsetY:70}});
  })
}) 

Ответ 5

Я использую следующий код jquery, и он работает для каждого браузера (i dont user IE:))

  $("html,body").animate({
    scrollTop: 0
}, "slow");

Перекрестный браузер переместится вверх:

    if($('body').scrollTop()>0){
        $('body').scrollTop(0);         //Chrome,Safari
    }else{
        if($('html').scrollTop()>0){    //IE, FF
            $('html').scrollTop(0);
        }
    } 

Кросс-браузер div с id = test_id:

    if($('body').scrollTop()>$('#test_id').offset().top){
        $('body').scrollTop($('#test_id').offset().top);         //Chrome,Safari
    }else{
        if($('html').scrollTop()>$('#test_id').offset().top){    //IE, FF
            $('html').scrollTop($('#test_id').offset().top);
        }
    } 

Ответ 6

Кажется, сафари вообще не нравится "HTML", в то время как другим не нравится "тело". И ('html, body') тоже не будет сокращать это. Таким образом, простое решение может быть;

function example() {
if($.browser.safari) scrollentity = $("body"); 
else scrollentity = $("html");
scrollentity .animate({scrollTop: $("#target").offset().top}, 1500, 'swing')
}