Извините за плохой английский.
связь на сайт.
Моя задача - создать сайт без прокрутки. Когда пользователь нажимает на правую часть экрана, автомобиль начинает двигаться вперед. Когда он достигает середины экрана - машина останавливается и неподвижный контент-блок начинает двигаться в противоположном направлении. если пользователь перемещает курсор в левую часть экрана (удерживая нажатой кнопку мыши), автомобиль должен двигаться назад.
Настольная версия работает как положено. Но мобильная версия тормозит. (это не совсем медленно, я думаю, это не так гладко, как рабочий стол)
Что я могу сделать, чтобы решить эту проблему?
Мероприятия:
$(document).on('mousedown touchstart', '.mouse-click', function(event){
clicking = true;
mousePos = event.pageX;
if ( event.target.className == 'helper' ) {
showModal();
} else {
moveStuff = setInterval(mouseMove, 1);
}
});
$(document).on('mouseup touchend', function(){
clicking = false;
carLights.removeClass('blink');
clearInterval(moveStuff);
})
$(document).on('mousemove touchmove', '.mouse-click', function(event){
if (clicking == false) {
return;
} else {
mousePos = event.pageX;
}
});
функция:
function mouseMove() {
let offset = parseInt( mainContent.css('left') );
let offsetCar = parseInt( car.css('left') );
if ( mousePos > middleScreen ) {
carLights.removeClass('blink');
if ( offset < - ( contentWidth ) ) {
return;
} else {
rotateWheelsForward();
if ( offsetCar < middleScreen ) {
car.css('left', (offsetCar + mouseSpeed) + 'px');
} else {
mainContent.css('left', (offset - mouseSpeed) + 'px');
}
}
} else if ( mousePos < middleScreen ) {
carLights.addClass('blink');
if ( offset > 0 ) {
carLights.removeClass('blink');
return;
} else {
rotateWheelsBackward();
if ( offsetCar > minCarLeft ) {
car.css('left', (offsetCar - mouseSpeed) + 'px');
} else {
mainContent.css('left', (offset + mouseSpeed) + 'px');
}
}
}
}
Итак, как я могу сделать движение более плавным в мобильном телефоне? (я пользуюсь сафари на айфоне 5s, но тестил на айфоне 6, все равно работает плохо)
Какие изменения я должен внести в этот код?
Я предлагаю использовать преобразование, а не положение, например: слева, сверху, потому что это действительно влияет на перерисовку-перерисовку слоя. Используйте requestAnimationFrame (с умом) для выполнения плавной анимации событий, таких как прокрутка, движение мыши или любое другое событие.
Затем используйте will-change: transform;
для элемента, который будет «трансформироваться» в будущем. Это создаст новый слой и подготовит его к изменениям элементов позже.
В моем случае относительное положение влияет на оплавление или зеленую вспышку на хроме инструмента рендеринга. Поэтому я предпочитаю использовать фиксированную/абсолютную позицию, чтобы предотвратить это.
Вот отличная статья о том, как получить Простенькая, злая, быстрая анимация с requestAnimationFrame и как для достижения анимации 60 кадров в секунду с помощью css
Надеюсь, это поможет ;)
Я внес некоторые изменения. Забавный факт: на моем телефоне (iphone 5s) все еще не так плавно, как должно быть, но на более современных iphone и android работает плавно (я отправил ссылку друзьям с другими телефонами). Я думаю, мне нужно внести больше изменений, чтобы сделать его более плавным на старых телефонах, но это работает, так что спасибо)
Спасибо, я буду читать статьи и пытаться переписать код. Если это поможет, я вернусь позже и отмечу ваш пост как ответ