Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.04.2020, 08:36
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Прервать функцию
let prev = document.querySelector(".btn_prev");
let next = document.querySelector(".btn_next");
let slides = document.querySelectorAll(".slides");
let dot = document.querySelectorAll(".dot");
let slideWraper = document.querySelector(".slider_wraper");

let index = 0;

let activeSlide = function(activ){
	for(let i=0; i<slides.length; i++){
		slides[i].classList.remove("active");
	}
	slides[activ].classList.add("active");
}
let activedots = function(activ){
	for(let i=0; i<dot.length; i++){
		dot[i].classList.remove("active");
	}
	dot[activ].classList.add("active");
}

let nextSlide = function(){
	if (index == slides.length - 1){
		index = 0;
		activeSlide(index);
		activedots(index);
	}
	else{
		index++;
		activeSlide(index);
		activedots(index);
	}
}
next.addEventListener("click", nextSlide);

let prevSlide = function(){
	if (index == 0){
		index = slides.length -1;
		activeSlide(index);
		activedots(index);
	}
	else{
		index--;
		activeSlide(index);
		activedots(index);
	}
}
prev.addEventListener("click", prevSlide);


dot.forEach( function (item, indexDot){
    item.addEventListener("click", function(){
        index = indexDot;
        activeSlide(index);
        activedots(index);
		clearInterval(interval);
    })
})

let interval = setInterval(nextSlide, 1000);


мне нужно прервать функцию nextSlide при клике

не могу сообразить как
Ответить с цитированием
  #2 (permalink)  
Старый 29.04.2020, 09:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Сергей Ракипов
мне нужно прервать функцию nextSlide при клике
чем вас не устраивает строка 56?
Ответить с цитированием
  #3 (permalink)  
Старый 29.04.2020, 09:58
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Сообщение от рони Посмотреть сообщение
чем вас не устраивает строка 56?
Потому что я ее могу вставить вот сюда

let prevSlide = function(){

    if (index == 0){

        index = slides.length -1;

        activeSlide(index);

        activedots(index);

    }

    else{

        index--;

        activeSlide(index);

        activedots(index);

    }

}

prev.addEventListener("click", prevSlide);


и она тоже сработает

но вот тут будет конфликт

let nextSlide = function(){

    if (index == slides.length - 1){

        index = 0;

        activeSlide(index);

        activedots(index);

    }

    else{

        index++;

        activeSlide(index);

        activedots(index);

    }

}

next.addEventListener("click", nextSlide);
Ответить с цитированием
  #4 (permalink)  
Старый 29.04.2020, 10:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сергей Ракипов,
попробуйте написать функцию, которая будет менять индекс, и вторую которая будет показывать картинку согласно этого индекса.
Доработка логики в готовом коде "Галереи"
Ошибка в слайдере
Ответить с цитированием
  #5 (permalink)  
Старый 29.04.2020, 11:02
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Сообщение от рони Посмотреть сообщение
Сергей Ракипов,
попробуйте написать функцию, которая будет менять индекс, и вторую которая будет показывать картинку согласно этого индекса.
Доработка логики в готовом коде "Галереи"
Ошибка в слайдере
Попробую, но открвенно говоря не понимаю причем тут это, мне просто нужно остановить сетинтервал если был клик по какой либо из кнопок
Ответить с цитированием
  #6 (permalink)  
Старый 29.04.2020, 13:24
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
я что то все перепробовал вплоть до абсурда, не выходит
почему просто нельзя по клику на кнопку остановить этот
let interval = setInterval(nextSlide, 1000);
Ответить с цитированием
  #7 (permalink)  
Старый 29.04.2020, 13:35
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

я первое что сделал это вот это, но оно почему то в первый раз не сработало, и я стал перебирать множество вариантов, потом решил повторить и оно сработало.

function stopInterval(){
clearInterval(interval);
}
prev.onclick = stopInterval;
next.onclick = stopInterval;


ведь это же нормальное решение? или корявое
Ответить с цитированием
  #8 (permalink)  
Старый 29.04.2020, 13:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Нормальное
Но можно было и так

let nextSlide = function(){
    if (index == slides.length - 1){
        index = 0;
        activeSlide(index);
        activedots(index);
    }
    else{
        index++;
        activeSlide(index);
        activedots(index);
    }
	clearInterval(interval);
}
next.addEventListener("click", nextSlide);
 
let prevSlide = function(){
    if (index == 0){
        index = slides.length -1;
        activeSlide(index);
        activedots(index);
    }
    else{
        index--;
        activeSlide(index);
        activedots(index);
    }
	clearInterval(interval);
}
prev.addEventListener("click", prevSlide);
Ответить с цитированием
  #9 (permalink)  
Старый 29.04.2020, 14:33
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

БЛАГОДАРЮ
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить имя функции внутри функции не используя callee drwhite Общие вопросы Javascript 39 12.02.2020 22:48
Расширение для Safari. Как вызвать функцию из popover в global page? housewm Opera, Safari и др. 0 21.12.2013 06:07
передать анонимную функцию, вызывающую другую функцию с нужными параметрами Ваяс Общие вопросы Javascript 5 21.02.2013 20:12
Как прервать функцию ? Илья 06 Events/DOM/Window 2 20.11.2012 11:41
checkbox включен запускаем одну функцию выключен другую Sadist_dead Элементы интерфейса 11 27.09.2011 10:46