Как сделать движение jquery setinterval в мобильном более плавным?

Извините за плохой английский.
связь на сайт.
Моя задача - создать сайт без прокрутки. Когда пользователь нажимает на правую часть экрана, автомобиль начинает двигаться вперед. Когда он достигает середины экрана - машина останавливается и неподвижный контент-блок начинает двигаться в противоположном направлении. если пользователь перемещает курсор в левую часть экрана (удерживая нажатой кнопку мыши), автомобиль должен двигаться назад.
Настольная версия работает как положено. Но мобильная версия тормозит. (это не совсем медленно, я думаю, это не так гладко, как рабочий стол)
Что я могу сделать, чтобы решить эту проблему?

  1. В событии touchstart я получаю значение event.pageX, чтобы проверить, какую часть экрана коснулся пользователь. (чтобы я знал, в каком направлении должна двигаться машина) и сохранить это значение в переменной «mousePos». Затем я вызываю setInterval с функцией движения
  2. По событию касания я очищаю интервал, чтобы машина не двигалась.
  3. При касании я перепишу переменную «mousePos» с новым значением event.pageX. Например: пользователь щелкнул, машина начинает двигаться, если пользователь переместил курсор влево, я буду использовать эту переменную, чтобы проверить направление и повернуть машину назад.
  4. В функции mouseMove я проверю положение автомобиля и решу, какое действие следует выполнить - либо переместить автомобиль, либо переместить фон, и я проверю, достиг ли он начала конечных точек.

Мероприятия:

    $(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, все равно работает плохо)
Какие изменения я должен внести в этот код?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
137
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предлагаю использовать преобразование, а не положение, например: слева, сверху, потому что это действительно влияет на перерисовку-перерисовку слоя. Используйте requestAnimationFrame (с умом) для выполнения плавной анимации событий, таких как прокрутка, движение мыши или любое другое событие.

Затем используйте will-change: transform; для элемента, который будет «трансформироваться» в будущем. Это создаст новый слой и подготовит его к изменениям элементов позже.

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

Вот отличная статья о том, как получить Простенькая, злая, быстрая анимация с requestAnimationFrame и как для достижения анимации 60 кадров в секунду с помощью css

Надеюсь, это поможет ;)

Спасибо, я буду читать статьи и пытаться переписать код. Если это поможет, я вернусь позже и отмечу ваш пост как ответ

neku894 08.04.2019 22:46

Я внес некоторые изменения. Забавный факт: на моем телефоне (iphone 5s) все еще не так плавно, как должно быть, но на более современных iphone и android работает плавно (я отправил ссылку друзьям с другими телефонами). Я думаю, мне нужно внести больше изменений, чтобы сделать его более плавным на старых телефонах, но это работает, так что спасибо)

neku894 09.04.2019 11:33

Другие вопросы по теме