Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Прервать функцию (https://javascript.ru/forum/dom-window/80116-prervat-funkciyu.html)

Сергей Ракипов 29.04.2020 08:36

Прервать функцию
 
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 при клике

не могу сообразить как

рони 29.04.2020 09:03

Цитата:

Сообщение от Сергей Ракипов
мне нужно прервать функцию nextSlide при клике

чем вас не устраивает строка 56?

Сергей Ракипов 29.04.2020 09:58

Цитата:

Сообщение от рони (Сообщение 523552)
чем вас не устраивает строка 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);

рони 29.04.2020 10:31

Сергей Ракипов,
попробуйте написать функцию, которая будет менять индекс, и вторую которая будет показывать картинку согласно этого индекса.
http://javascript.ru/forum/misc/7820...e-galerei.html
http://javascript.ru/forum/dom-windo...slajjdere.html

Сергей Ракипов 29.04.2020 11:02

Цитата:

Сообщение от рони (Сообщение 523557)
Сергей Ракипов,
попробуйте написать функцию, которая будет менять индекс, и вторую которая будет показывать картинку согласно этого индекса.
http://javascript.ru/forum/misc/7820...e-galerei.html
http://javascript.ru/forum/dom-windo...slajjdere.html

Попробую, но открвенно говоря не понимаю причем тут это, мне просто нужно остановить сетинтервал если был клик по какой либо из кнопок

Сергей Ракипов 29.04.2020 13:24

рони,
я что то все перепробовал вплоть до абсурда, не выходит
почему просто нельзя по клику на кнопку остановить этот
let interval = setInterval(nextSlide, 1000);

Сергей Ракипов 29.04.2020 13:35

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

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


ведь это же нормальное решение? или корявое

voraa 29.04.2020 13:51

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

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);

Сергей Ракипов 29.04.2020 14:33

БЛАГОДАРЮ


Часовой пояс GMT +3, время: 17:42.