Я ищу какое-то направление в этой части jQuery. Вероятно, есть лучший способ сделать это, но в основном я пытаюсь отправить переменную dataLayer, когда пользователь доходит до 50% прокрутки страницы, и отправлять другую, когда они достигают 75% страницы.
$(window).on('scroll', function(){
var s = $(window).scrollTop(),
d = $(document).height(),
c = $(window).height();
var scrollPercent = (s / (d - c)) * 100;
if (scrollPercent > 74 && scrollPercent < 76) {
dataLayer.push({'Project Profile':'75% Scrolled'})
};
if (scrollPercent > 49 && scrollPercent < 51) {
dataLayer.push({'Project Profile':'50% Scrolled'})
};
})
Поскольку числа могут быть 74,23413424, 74,3495490 и т. д. Он срабатывает множество раз между мин. 74 и макс. 76.
Есть лучший способ это сделать? Есть ли способ отправить только один dataLayer.push? Я предполагаю, что ответ на оба вопроса - да. Я просто не знаю как! Заранее спасибо за помощь.
Брайан



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, попробуйте определить, когда он входит в этот диапазон и срабатывает, когда он выходит из этого диапазона.
var inRange = false;
var inRange2 = false;
$(window).on('scroll', function(){
var s = $(window).scrollTop(),
d = $(document).height(),
c = $(window).height();
var scrollPercent = Math.round((s / (d - c)) * 100);
if (scrollPercent > 74 && scrollPercent < 76 && !inRange) {
inRange = true;
};
if (scrollPercent < 75 && scrollPercent > 75 && inRange) {
inRange = false;
dataLayer.push({'Project Profile':'75% Scrolled'});
};
if (scrollPercent > 49 && scrollPercent < 51 && !inRange2) {
inRange2 = true;
};
if (scrollPercent > 50 && scrollPercent < 50 && inRange2) {
inRange2 = false;
dataLayer.push({'Project Profile':'50% Scrolled'});
};
})
let flag1 = false;
let flag2 = false;
$(window).on('scroll', function(){
var s = $(window).scrollTop(),
d = $(document).height(),
c = $(window).height();
var scrollPercent = (s / (d - c)) * 100;
if (scrollPercent > 74 && !flag1) {
dataLayer.push({'Project Profile':'75% Scrolled'});
flag1 = true;
};
if (scrollPercent > 49 && !flag2) {
dataLayer.push({'Project Profile':'50% Scrolled'});
flag2 = true;
};
})Это мне очень помогло! Он не только показал мне, как написать что-то подобное в jQuery, но и показал мне очень простой способ сделать это в GTM ... И я нашел отличный блог, в котором есть другие трюки с GTM!
Спасибо за участие! По какой-то причине это не сработало для меня. Но кто-то другой ответил сработавшим методом. Спасибо!