Переход на несколько элементов одновременно с помощью JavaScript

Ваше здоровье! У меня возникла проблема с отладкой определенного поведения, которое происходит в основном в браузере Chrome. Вот упрощенный пример: https://jsfiddle.net/pd3xb2uo/

Цель состоит в том, чтобы одновременно передавать несколько элементов с помощью кода JS. В примере, когда вы нажимаете на кнопку, элементы перемещаются влево с помощью translate3d, добавленного через JS. Работает нормально, но есть нюансы:

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

Вот скриншоты обоих случаев:

Переход на несколько элементов одновременно с помощью JavaScript

Переход на несколько элементов одновременно с помощью JavaScript

Любая помощь или идеи о том, почему это происходит, будут высоко оценены :) Похоже, что есть задержка в несколько миллисекунд, прежде чем атрибут стиля будет обновлен для определенных элементов, но я понятия не имею, почему:/

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема возникает из-за одновременного перехода 100 элементов и из-за переходов в полпикселя.

Если вы знаете, какой ширины и сколько у вас элементов, то вы можете сделать это так:

 const container = document.querySelector('.container-inner');
 for (let i = 1; i < 100; i++) {
   const div = document.createElement('div');
   div.classList.add('element');
   div.textContent = `Element ${i}`;
   container.appendChild(div);
 }
 let transition = 0;
 document.querySelector('button').addEventListener('click', () => {
   transition -= 100;
   container.style.transform = `translateX(${transition}px)`;
 });
.container{
  width: 100%;
  overflow: hidden;
}
.container-inner{
  display: flex;
  flex-direction: row;
  transition: transform .3s;
}
.element {
  width: 100px;
  box-sizing: border-box;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 2rem;
  text-align: center;
  transition: transform .3s;
  background-color: #A67583;
}
<button>Move</button>
<div class = "container">
  <div class = "container-inner"></div>
</div>

Теперь только один элемент получает переход, и он работает без сбоев.

Ваше здоровье! Спасибо за объяснение и пример! Заценил!

Astaz3l 25.03.2022 09:04

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