Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 5

Перезапись переменной в setInterval

23.03.2017, 15:39. Показов 3814. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Только-только начал изучать js. Поэтому, Уважаемые форумяне, просьба не бросаться помидорами, а просьба помочь...

Перед мной задача пушить показы баннеров из исходного html кода, записывая в переменную значение аттрибута name активного баннера. Активный баннер имеет class="flex-active-slide", интервал между сменой баннеров 5 секунд
Исходный код имеет вид
<ul class="slides">
<li class="flex-active-slide">
<a name="1">
<li>
<a name="2">
<li>
<a name="3">
</ul>

Для этой задачи использую setInterval в виде

<script>
var timerId = setInterval(function() {
var a = $('.flex-active-slide a').attr('name').length
if (a > 0){
clearTimeout(timerId);
console.log( $('.flex-active-slide a').attr('name') );
}
}, 1000);
</script>

Но в этом случае setInterval отрабатывает только один раз и все... Если убираю clearTimeout, то пушится 5 раз один и тот же баннер за время отработки setInterval (время то смены баннеров 5 сек). Изменять время setInterval не вариант поскольку возможна ручная прокрутка баннеров.

Помогите ПЖ со скриптом!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2017, 15:39
Ответы с готовыми решениями:

setInterval() выдаёт другое значение переменной
Получилась такая проблема что перед вызовом функции setInterval() значение переменной одно, ну а вот в самой функции оно меняеться. С чем...

Перезапись переменной
Собственно по задачке нужно вывести лучших учеников из классов и паралелей, все вроде бы работает кроме (как я думал) самого такого что...

Перезапись значения в переменной
SET @changed = ''; if (@changed='') SET @changed = now(); end if; SELECT @changed; Выдаёт ошибку Чего ему не нравится?

8
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
23.03.2017, 16:02
Цитата Сообщение от uvexx Посмотреть сообщение
clearTimeout
Здесь же нет setTimeout что бы использовать clearTimeout.
Для setInterval есть clearInterval

Добавлено через 5 минут
Цитата Сообщение от uvexx Посмотреть сообщение
Изменять время setInterval не вариант поскольку возможна ручная прокрутка баннеров.
А в чём собственно проблема ?
0
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 5
23.03.2017, 16:13  [ТС]
Проблема в том, что я скрипт отдает за время работы setInterval 5 раз одно и тоже значение прежде чем произошла смена баннера, а должен только один раз отдать значение для каждого баннера

Убрал, к примеру, setTimeout. В html 3-и тега a. Смена активного тега а на другой происходит через 5 секунд. За это время setInterval логирует 5 раз тег а1, потом 5 раз а2 и т.д.

Мне нужно чтобы он логировал только по одному разу. При этом изменить время отрaботки setInterval не могу поскольку есть возможность ручного пролистывания

<script>
var timerId = setInterval(function() {
console.log( $('.flex-active-slide a').attr('name') );
}
}, 1000);
</script>
0
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
24.03.2017, 02:57
Цитата Сообщение от uvexx Посмотреть сообщение
Перед мной задача пушить показы баннеров из исходного html кода
Это не описание задачи, а конкретные инструкции. Для постановки задачи нужно опираться на пользовательский опыт. Например:
"нажали на картинку левой кнопкой мыши -> предыдущая картинка исчезла, на ее месте появилась следующая"
в таком духе.
0
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 5
24.03.2017, 11:14  [ТС]
Господа, я не прошу сделать поставленную за меня задачу... Я старался максимально подробно описать задачу...
Просьба просто подсказать, намекнуть... Может я вообще не правильно подошел к задаче, может setInterval это не лучший способ решения...

Но поскольку опыта нет, то я счел setInterval оптимальным вариантом для пуша показов баннеров в слайдере. Но сделать чтобы на пуш активного баннера не не имел влияния интервал генерации setInterval не могу...

Теоретически, думаю нужно заводить if else с проверкой условий и перезаписью переменных, типа вот этого

var timerId = setInterval(function() {
var a = $('.flex-active-slide a').attr('name')
var b

if (a == b) {console.log( 'повтор setInterval' );}
else
if (a != b && b == 'undefined' )
{console.log( a );
b = a;}
else
if (a != b && b != 'underfined')
{console.log( a );
b = a;}

}, 1000);

Но почему-то все равно активный баннер выводится в консоль 5 раз вместо 1-го раза

Что я делаю не так?
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
24.03.2017, 12:32
uvexx, вам надо хранить состояние и в зависимости от него выполнять некие действия. Например, сохранить значение последнего слайда. И с интервалом проверять его на соответсвие показываемому. Если совпадает, то ничего не делать, иначе "пушить показы баннеров" (что бы это ни значило).
Навскидку:
JavaScript
1
2
3
4
5
6
7
8
var currentSlide;
setInterval(function () {
  var newSlide = $('.flex-active-slide a').prop('name');
  if (currentSlide == newSlide) return;
 
  currentSlide = newSlide;
  console.log(currentSlide);
}, 1000);
1
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
24.03.2017, 13:05
Цитата Сообщение от j2FunOnly Посмотреть сообщение
"пушить показы баннеров" (что бы это ни значило)

0
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 5
24.03.2017, 13:18  [ТС]
Цитата Сообщение от Padimanskas Посмотреть сообщение

Пушить в моем случае потребуется потом в gtm (вместо консоли будет dl)

Добавлено через 1 минуту
Цитата Сообщение от j2FunOnly Посмотреть сообщение
uvexx, вам надо хранить состояние и в зависимости от него выполнять некие действия. Например, сохранить значение последнего слайда. И с интервалом проверять его на соответсвие показываемому. Если совпадает, то ничего не делать, иначе "пушить показы баннеров" (что бы это ни значило).
Навскидку:
JavaScript
1
2
3
4
5
6
7
8
var currentSlide;
setInterval(function () {
  var newSlide = $('.flex-active-slide a').prop('name');
  if (currentSlide == newSlide) return;
 
  currentSlide = newSlide;
  console.log(currentSlide);
}, 1000);
Круто!!! Спасибо!!!

Работает!!!
0
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 5
09.11.2017, 10:28  [ТС]
Господа добрый день!

Ранее вы помогли с реализацией функции setInterfal.

var currentSlide;
setInterval(function () {
var newSlide = $('.flex-active-slide a').prop('name');
if (currentSlide == newSlide) return;

currentSlide = newSlide;
console.log(currentSlide);
}, 1000);

Помогите ПЖ еще раз с ней же...

Прошлая задача усложнилась тем, что в новом ul слайдера в тегах li нет класса вообще, но есть аттрибут aria-hidden со значение true - это пассивный баннер и false - это активный баннер

пытаюсь запустить прошлый скрипт с циклом for, но в консоле молчание
есть подозрение, что цикл for не работает в setInterval, но как тогда записать этот обработчик?

Вот как я пытаюсь это сделать:
var currentSlide;
setInterval(function () {

var ul = $('ul.bxslider li') // все составляющие слайдера
for ( q = 0; q < ul.length; q++) { // начинаем переборку li и ищем аттрибут со значение false
if ($(ul[q]).attr('aria-hidden') == 'false') // если равенство, то записываем значение alt тега img в переменную newSlide

var newSlide = $(ul[q].firstChild.firstChild).attr('alt'); //структура такая <ul><li>-><a>-><img><li>... поэтому использую 2-а раза firstChild

var newSlide = $('.flex-active-slide a').prop('name');
if (currentSlide == newSlide) return;

currentSlide = newSlide;
console.log(currentSlide);
}
}, 1000);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2017, 10:28
Помогаю со студенческими работами здесь

Перезапись переменной в $_GET
Добрый день! Проблема в следующем. Есть страница, на которую выводятся результаты поиска по базе данных по 4 критериям. Выглядит...

Перезапись статичной переменной родителя
Можете пояснить логику, почему переменная не перезаписывается? &lt;? class foo{ protected static $defaults = array( 1,2,3 ...

setInterval
Добрый вечер! помогите разобраться function func_isl(one){ var perem1 = one; $.post('isled.php', {x0:perem1}, function(data){ ...

Оптимизация setInterval()
В данном коде слишком много setInterval(). Вопрос и проблема в том как оптимизировать так чтобы было n-ое количество setInterval -ов ...

setInterval не работает
Ну почему этот маленький зелёненький квадратик не хочет опускаться в низ? Я уже головой об стенку начинаю биться. &lt;div...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru