Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2019, 11:47
Новичок на форуме
Отправить личное сообщение для MiHALbI4 Посмотреть профиль Найти все сообщения от MiHALbI4
 
Регистрация: 24.12.2010
Сообщений: 7

Автоматическая смена активного класса по таймеру
Всем привет!

Есть, например, 6 блоков. Изначально активный css-класс у первого (для универсальности можно учесть любую изначальную позицию активного класса). Нужно через секунду переключить активный класс на второй, потом через секунду на третий и т.д. Как дойдет до последнего - начать сначала и так бесконечно. Но! Есть еще несколько условий:

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

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

Можно написать на чистом JS или на JQuery. Для удобства ссылка на jsfiddle: https://jsfiddle.net/3nLx5k24/

Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2019, 12:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от MiHALbI4
на JQuery
https://javascript.ru/forum/showthread.php?p=398953
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2019, 15:34
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от MiHALbI4
Можно написать на чистом JS
Не получится, так и так придётся использовать DOM API... https://jsfiddle.net/q7oram3c/
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2019, 16:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

бесконечная карусель с паузой
Сообщение от MiHALbI4
для универсальности можно учесть любую изначальную позицию активного класса
Malleys,

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title></title>
    <style>
            .item {
    display: inline-block;
    margin: 10px;
    width: 100px;
    height: 100px;
    background-color: blue;
}

.active {
    background-color: red;
}
    </style>
    <script>
addEventListener("load",function(){

class PolySwitch {
    constructor(root, delay=1000, index=0) {
    	this.root = root;
        this.delay = delay;
        this.index = index;
        this.children = [...root.children];
        this.setActiveElement(0);
        this.eventHandler = this.eventHandler.bind(this);
        this.timeout = setTimeout(this.loop.bind(this), this.delay);
        this.root.addEventListener("pointerover", this.eventHandler);
        this.root.addEventListener("pointerout", this.eventHandler);
        this.root.addEventListener("click", this.eventHandler);
    }

    loop() {
    	this.setActiveElement();
       	this.timeout = setTimeout(this.loop.bind(this), this.delay);
    }

    eventHandler(event) {
    	if(event.type === "pointerover") {
            clearTimeout(this.timeout);
        }

        if(event.type === "pointerout") {
            this.timeout = setTimeout(this.loop.bind(this), this.delay);
        }

        if(event.type === "click") {
            const target = event.target.closest(".item");
            if(target) {
               const addIndex = this.children.indexOf(target) - this.index;
               this.setActiveElement(addIndex);
            }

        }
    }

    setActiveElement(addIndex = 1) {
    	this.children[this.index].classList.remove("active");
        this.index = (this.index + addIndex +  this.children.length) % this.children.length;
 	 	this.children[this.index].classList.add("active");
    }
}

new PolySwitch(document.querySelector(".list"), 1000, 2);
//  new PolySwitch(document.querySelector(".list"));
        })

</script>

</head>
<body>
<div class="list">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
</div>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 08.04.2019, 18:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064


строка 60 смена направления setActiveElement(addIndex = -1)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена класса при скроллинге Dayros Общие вопросы Javascript 17 24.01.2017 20:32
Смена класса с запоминание joker95 Элементы интерфейса 1 11.04.2016 12:00
Смена класса одного блока при наведении курсора на другой serggrodno jQuery 2 20.01.2016 12:05
смена класса div Gwin Библиотеки/Тулкиты/Фреймворки 5 11.04.2013 16:13
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17