Переместить изображение с помощью события touchmove на iPad

#javascript #jquery #iphone #ipad

#javascript #jquery #iPhone #iPad

Вопрос:

У меня есть веб-сайт с фиксированным фоновым изображением, которое я пытаюсь адаптировать для iPhone и iPad, поскольку изображение не остается статичным. Я пробовал различные оболочки, но безуспешно; либо я не могу прокручивать в одну сторону, либо сайт прокручивается неправильно (из-за использования динамического ajax). Итак, я начал искать, есть ли способ переместить фон изображения с помощью прокрутки страницы, и я использовал следующее:

 $(document).bind('touchmove',function(e){
    $('.background_image').css({top: $(document).scrollTop()});
$('.background_image img').css({top: $(document).scrollTop()});
console.log($('.background_image img').css('top'));
});

$(document).bind('scroll', function() {
    $('.background_image').css({top: $(document).scrollTop()});
    $('.background_image img').css({top: $(document).scrollTop()});
});
  

Кажется, это работает при первом «касании», но фон при этом не перемещается постоянно. Когда я прекращаю перемещение, запускается привязка ‘scroll’ и перемещает изображение в нужное место.
Возможно ли это, или я пытаюсь достичь невозможного здесь? Регистрация выходных данных показывает, что css действительно изменяется, но экран не обновляется с его помощью.

Обновить

Я не знаю, помогает ли это, но вот HTML / CSS, которые я использую в настоящее время:

 <div class="background_image">
    <img src="image.jpg" />
</div>

.background_image {
position: fixed;
left: 0px;
top: 0px;
overflow: hidden;
z-index: -1;
}

.background_image img {
position: fixed;
overflow: hidden;
top: 0px;
left: 0px;
background: white;  
}
  

Я также изменил свой код на что-то немного более простое.

Приветствия,

Dan

Комментарии:

1. вы пробовали сделать изображение реальным фоновым изображением и просто обновить src этого изображения? (т. Е. используя background-image:url('image.jpg'); background-position:top center; background-repeat:no-repeat; )? Помните, position:fixed не работает на устройствах iOS (потому что они прокручивают область просмотра, а не документ).

2. @ampersand — Я пытался использовать только тег background-image, но изображение просто остается в том же месте при прокрутке, а не в пределах области просмотра, которая в идеале является тем, что мне нужно. Также я изменяю фон при каждом изменении страницы, так что это не идеальное решение (хотя, если бы это сработало, я был бы рад оставить все как есть)

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

Ответ №1:

Кажется, это работает при первом «касании», но фон при этом не перемещается постоянно. Когда я прекращаю перемещение, запускается привязка ‘scroll’ и перемещает изображение в нужное место. Возможно ли это, или я пытаюсь достичь невозможного здесь? Регистрация выходных данных показывает, что css действительно изменяется, но экран не обновляется с его помощью.

К сожалению, на данный момент это невозможно на устройствах iOS. Я уже некоторое время использую jQuery Mobile для сайтов, оптимизированных для iOS, и это один из больших недостатков. Команда jQuery Mobile описывает проблему следующим образом (смотрите здесь.):

Обратите внимание, что устройства iOS замораживают манипуляции с DOM во время прокрутки, ставя их в очередь для применения по завершении прокрутки.

Это причина поведения, которое вы наблюдаете. События ставятся в очередь и обновляют изображение bg после завершения прокрутки. Скорее всего, вы смогли бы устранить эту проблему, используя iScroll, который полностью заменяет собственный обработчик прокрутки в контейнере по вашему выбору, хотя я не уверен, стоит ли оно того для задачи, которую вы пытаетесь выполнить.

Комментарии:

1. Да, я думал, что, возможно, так и было… Я пытался использовать iScroll, YUI Scroll и некоторые другие, однако функциональность сайта, похоже, сильно страдает, когда я пытаюсь обернуть сайт (исключая раздел фонового изображения div) в них.

2. это именно то, чего я ожидал. Эти инструменты довольно крутые, но не совсем без своих собственных проблем. Боюсь, ответ заключается в том, что вы не сможете этого сделать по причине, которую я опубликовал выше.

Ответ №2:

Мы решили пойти с обходным решением и реализовать изображения для iPhone, которые исчезают внизу до определенного цвета фона.