Проблема, с которой вы столкнулись, может возникать из-за различных причин, связанных с расчетом значений scrollHeight, scrollTop и clientHeight. Разница в 1 пиксель может быть вызвана приведением значений к целым числам, округлением в браузере или даже не всегда видимыми элементах для прокрутки (например, границы или полосы прокрутки). Вот несколько способов, как можно исправить вашу проверку:
1. **Используйте `Math.abs` для проверки**: Вместо проверки на точное равенство, проверьте, близки ли значения:
```javascript
if (Math.abs((this.scrollHeight - this.scrollTop) - this.clientHeight) < 1 && wrapper.dataset.loading === 'true') {
// AJAX - подгружает следующий блок контента
}
```
2. **Добавьте небольшой порог**: Установите небольшой порог, чтобы учитывать возможные неясности в вычислениях. Например, можно сравнить с небольшим значением, как показано выше.
3. **Используйте `Math.floor` или `Math.ceil`**: Если вам нужно работать с целыми значениями, попробуйте округлить значения перед сравнением:
```javascript
if (Math.floor(this.scrollHeight - this.scrollTop) === Math.floor(this.clientHeight) && wrapper.dataset.loading === 'true') {
// AJAX - подгружает следующий блок контента
}
```
4. **Проверьте размер полосы прокрутки**: Убедитесь, что размер полосы прокрутки не вызывает проблем (например, браузеры могут по-разному учитывать ширину полосы прокрутки). Вы можете убрать обычные отступы или попробовать использовать CSS для корректного отображения списка:
```css
overflow: auto;
```
5. **Отладка в реальном времени**: Добавьте логи для отслеживания значений `scrollHeight`, `scrollTop` и `clientHeight`, чтобы лучше понять, почему они могут не совпадать.
```javascript
console.log('scrollHeight:', this.scrollHeight);
console.log('scrollTop:', this.scrollTop);
console.log('clientHeight:', this.clientHeight);
```
Если ни один из предложенных методов не помогает, возможно, проблема более глубока и связана с конкретным стилем или структурой вашего HTML. Постарайтесь проверить, правильно ли указаны размеры контейнера и самого контента.