Javascript.RU

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

Случайная подмена блоков div
Ребят SOS! Нужна помощь!
Вот смотрите у меня есть слайдер :

<div class="slide active" data-order="1" data-color="#blue" data name="23">
        <div class="slide-content ">
          <div class="clip-svg">
          <a href="#30"> <img class="" src="sl1.jpg" alt="" /> </a>
              <div class="title-wrapper"> 
                 <h2>ТЕКСТ</h2>
                  <img id="waves" src="w1.jpg" alt="" />
  <h1></h1>
         
              </div>
          </div>
        </div>
      </div>



 <div class="slide " data-order="20" data-color="#f59600" data-name="Далее">
        <div class="slide-content ">
          <div class="clip-svg">
                    <img class="" src="sl2.jpg" alt="" />
              <div class="title-wrapper bigger">
                  <h2>ТЕКСТ</h2>
                   <img id="waves" src="w1.jpg" alt="" />
  <h1>Серфер ответит</h1>
          
              </div>
          </div>
        </div>
      </div>


 <div class="slide " data-order="2" data-color="#f59600" data-name="Далее">
        <div class="slide-content ">
          <div class="clip-svg">
                    <img class="" src="sl2.jpg" alt="" />
              <div class="title-wrapper bigger">
                  <h2>ТЕКСТ</h2>
                   <img id="waves" src="w1.jpg" alt="" />
  <h1>Серфер ответит</h1>
          
              </div>
          </div>
        </div>
      </div>





Мне нужно чтобы эти блоки кроме активного ( менялись active случайно
Как такое реализовать ?



Нашел на просторах код
<script>
       window.onload = function ()
{
     function mix(b) {
     for (var c = document.createElement("<div"), d = 0; d < b.length; d++) {
         var a = Math.floor(Math.random() * b.length),
             e = b[d],
             f = e.parentNode,
             a = b[a],
             g = a.parentNode;
         f.insertBefore(c, e);
         g.insertBefore(e, a);
         f.insertBefore(a, c)
     }
     c.parentNode.removeChild(c)
 };
  mix(document.getElementsByTagName("<div>"))
}
  </script>



Но как указать чтобы целый блок:
<div class="slide">
</div>


Помогите пожалуйста !
Ответить с цитированием
  #2 (permalink)  
Старый 18.08.2017, 12:14
Новичок на форуме
Отправить личное сообщение для StaticArt Посмотреть профиль Найти все сообщения от StaticArt
 
Регистрация: 18.08.2017
Сообщений: 8

К сожалению на новичек в js (
Ответить с цитированием
  #3 (permalink)  
Старый 18.08.2017, 12:38
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

StaticArt, не понял, что значит "кроме активного".
Сделать так, чтобы класс «active» единоразово перешел от одного эл-та к другому можно так ( не тестировал):
var slides=document.getElementsByClassName('.slide'),
	rand=(Math.floor(Math.random()*(slides.length-1+1))+1)-1;
	
for(var i=0;i<slides.length;i++){
	var item=slides[i].classList;
	item.remove('active');
	if(i==rand)
		item.add('active');
}
Ответить с цитированием
  #4 (permalink)  
Старый 18.08.2017, 12:52
Новичок на форуме
Отправить личное сообщение для StaticArt Посмотреть профиль Найти все сообщения от StaticArt
 
Регистрация: 18.08.2017
Сообщений: 8

Да вы правы ! Именно так , но я не вижу куда вставить в JS



var mySlider = {
  
  config : {
    
    slider : '.slider-content',
    activeSlide : '.slide.active',
    button: '.next-button',
    transition: 500,
    delay: function() {return this.transition;},
    navigation : '.control-nav'
    
  },
  
  init : function(config) {
        this.createNav();
        $(mySlider.config.button).
            click(function() {
                mySlider.animateSlide($(this));
            });
    },
  
  getActiveSlide : function() {
    
    return $(mySlider.config.activeSlide);   
       
  },
  
  getNextSlide : function() {
     
     var nextSlide = mySlider.getActiveSlide().next();
      
     if ( nextSlide.length === 0 ){
      
       nextSlide = $(mySlider.config.slider).find('.slide').eq(0);   
     } 
    
    return nextSlide;
    
  },
  
  getNextSlideColorAndName : function() {
    
    var colorAndName = {};
    var nextSlidenext = mySlider.getNextSlide().next();
    var nextSlideColor = nextSlidenext.data('color');
    var nextSlideName = nextSlidenext.data('name');
    
    colorAndName.color = nextSlideColor;
    colorAndName.name = nextSlideName;
    
    if ( nextSlidenext.length === 0 ) {
      nextSlidenext = $(mySlider.config.slider).find('.slide').eq(0);  
      nextSlideColor = nextSlidenext.data('color');
      nextSlideName = nextSlidenext.data('name');
      
      colorAndName.color = nextSlideColor;
      colorAndName.name = nextSlideName;
    }
    
    return colorAndName;
  }, 
  
  createNav : function() {
    
    var totalSlides = $(mySlider.config.slider).find('.slide').length;
    var controlNav = $(mySlider.config.navigation).find('ul');
    var nav;
                        
    for( var i=0; i < totalSlides; i++ ){
        
        var active = "";
        if(i === 0){
          active = 'active';
        }
        
        controlNav.append('<li class="slider-nav nav-'+i+' '+active+' "></li>')

    }                      
                        
  },
  
  animateNav : function() {
    
    var activeNav  = $('li.active');
    var nextNav = activeNav.next();
    
    if(nextNav.length === 0){
      nextNav = $('.control-nav li').eq(0);
    }
    
    activeNav.removeClass('active');
    nextNav.addClass('active');
  },
  
  animateSlide : function(button) {
    
    var activeSlide  = mySlider.getActiveSlide();
    var nextSlide = mySlider.getNextSlide();
    var delay = mySlider.config.delay(); 
    var clipPath = $('.clip-svg');
    
    clipPath.css('transition-duration', mySlider.config.transition+'ms');
    button.css('pointer-events', 'none');
    nextSlide.css('z-index',10);
    button.css('background', mySlider.getNextSlideColorAndName().color);
    button.prev().find('.color').html(mySlider.getNextSlideColorAndName().name);
    nextSlide.addClass('active').css('opacity', 1); 
    
    setTimeout(function() {
      activeSlide.removeClass('active').css('opacity', 0);
    }, delay);
    
    setTimeout(function() {
      nextSlide.css('z-index','');
      button.css('pointer-events', 'auto');
    }, delay + 300);
    
    mySlider.animateNav();
    
  }
  
} 


$(document).ready(function() { mySlider.init(); });
Ответить с цитированием
  #5 (permalink)  
Старый 18.08.2017, 12:57
Новичок на форуме
Отправить личное сообщение для StaticArt Посмотреть профиль Найти все сообщения от StaticArt
 
Регистрация: 18.08.2017
Сообщений: 8

т.е я вставляю в в 72 строчке



for(var i=0;i<slides.length;i++){
	var item=slides[i].classList;
	item.remove('active');
	if(i==rand)
		item.add('active');
}



заменив код с 72-75 и не работает(
Ответить с цитированием
  #6 (permalink)  
Старый 18.08.2017, 13:12
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

StaticArt,
в строку 94 затолкайте это:
activateRandSlide:function(){
	$('.slide').removeClass('active').eq((Math.floor(Math.random()*(slides.length-1+1))+1)-1).addClass('active');
	
	return this;
},

Между строками 19 и 20 вставьте это:
var self=this;
this.config.cycle_stopped=false;
this.config.__cycle_timeout=false;
this.startCycle=function(triggered){
	if(!triggered)
		self.config.cycle_stopped=false;
	
	if(self.config.__cycle_timeout)
		clearTimeout(__cycle_timeout);
	
	if(!self.config.cycle_stopped)
		return;
	
	self.config.__cycle_timeout=setTimeout(function(){
		self.activateRandSlide();
		self.startCycle(true);
	},self.config.transition)
	
	return self;
}
this.stopCycle=function(){
	self.config.cycle_stopped=true;
	
	return self;
}

this.startCycle();

Последний раз редактировалось Nexus, 18.08.2017 в 13:37. Причина: Bugfix
Ответить с цитированием
  #7 (permalink)  
Старый 18.08.2017, 13:26
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Nexus,
может так?
.eq(Math.floor(Math.random()*slides.length)
Ответить с цитированием
  #8 (permalink)  
Старый 18.08.2017, 13:36
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

j0hnik, может быть.
Ответить с цитированием
  #9 (permalink)  
Старый 18.08.2017, 13:41
Новичок на форуме
Отправить личное сообщение для StaticArt Посмотреть профиль Найти все сообщения от StaticArt
 
Регистрация: 18.08.2017
Сообщений: 8

Посмотрите пожалуйста , вставил ,
Не знаю работает или нет, но вообщем кнопка next теперь не работает ((( что делать ?



var mySlider = {
  
  config : {
    
    slider : '.slider-content',
    activeSlide : '.slide.active',
    button: '.next-button',
    transition: 500,
    delay: function() {return this.transition;},
    navigation : '.control-nav'
    
  },
  
  init : function(config) {
        this.createNav();
        $(mySlider.config.button).
            click(function() {
                mySlider.animateSlide($(this));
            });
  
var self=this;
this.config.cycle_stopped=false;
this.config.__cycle_timeout=false;
this.startCycle=function(triggered){
	if(!triggered)
		self.config.cycle_stopped=false;
	
	if(self.config.__cycle_timeout)
		clearTimeout(__cycle_timeout);
	
	if(!self.config.cycle_stopped)
		return;
	
	self.config.__cycle_timeout=setTimeout(function(){
		self.startCycle(true);
	},self.config.transition)
	
	return self;
}
this.stopCycle=function(){
	self.config.cycle_stopped=true;
	
	return self;
}

this.startCycle();

         
    },
  
  getActiveSlide : function() {
    
    return $(mySlider.config.activeSlide);   
       
  },
  
  getNextSlide : function() {
     
     
     
     
     
     var nextSlide = mySlider.getActiveSlide().next();
      
     if ( nextSlide.length === 0 ){
      
       nextSlide = $(mySlider.config.slider).find('.slide').eq(0);   
     } 
    

    return nextSlide;
    
  },
  
  getNextSlideColorAndName : function() {
    
    var colorAndName = {};
    var nextSlidenext = mySlider.getNextSlide().next();
    var nextSlideColor = nextSlidenext.data('color');
    var nextSlideName = nextSlidenext.data('name');
    
    colorAndName.color = nextSlideColor;
    colorAndName.name = nextSlideName;
    
    if ( nextSlidenext.length === 0 ) {
      nextSlidenext = $(mySlider.config.slider).find('.slide').eq(0);  
      nextSlideColor = nextSlidenext.data('color');
      nextSlideName = nextSlidenext.data('name');
      
      colorAndName.color = nextSlideColor;
      colorAndName.name = nextSlideName;
    }
    
    return colorAndName;
  }, 
  
  createNav : function() {
    
    var totalSlides = $(mySlider.config.slider).find('.slide').length;
    var controlNav = $(mySlider.config.navigation).find('ul');
    var nav;
                        
    for( var i=0; i < totalSlides; i++ ){
        
        var active = "";
        if(i === 0){
          active = 'active';
        }
        
        controlNav.append('<li class="slider-nav nav-'+i+' '+active+' "></li>')

    }                      
                        
  },
  
  animateNav : function() {
    
    var activeNav  = $('li.active');
    var nextNav = activeNav.next();
    
    if(nextNav.length === 0){
      nextNav = $('.control-nav li').eq(0);
    }
    
    
    
 activateRandSlide:function(){
	$('.slide').removeClass('active').eq((Math.floor(Math.random()*(slides.length-1+1))+1)-1).addClass('active');
	
	return this;
}

    
    
    
    
    
    activeNav.removeClass('active');
    nextNav.addClass('active');
  },
  
  animateSlide : function(button) {
    
    var activeSlide  = mySlider.getActiveSlide();
    var nextSlide = mySlider.getNextSlide();
    var delay = mySlider.config.delay(); 
    var clipPath = $('.clip-svg');
    
    clipPath.css('transition-duration', mySlider.config.transition+'ms');
    button.css('pointer-events', 'none');
    nextSlide.css('z-index',10);
    button.css('background', mySlider.getNextSlideColorAndName().color);
    button.prev().find('.color').html(mySlider.getNextSlideColorAndName().name);
    nextSlide.addClass('active').css('opacity', 1); 
    
    setTimeout(function() {
      activeSlide.removeClass('active').css('opacity', 0);
    }, delay);
    
    setTimeout(function() {
      nextSlide.css('z-index','');
      button.css('pointer-events', 'auto');
    }, delay + 300);
    
    mySlider.animateNav();
    
  }
  
} 


$(document).ready(function() { mySlider.init(); });
Ответить с цитированием
  #10 (permalink)  
Старый 18.08.2017, 13:42
Новичок на форуме
Отправить личное сообщение для StaticArt Посмотреть профиль Найти все сообщения от StaticArt
 
Регистрация: 18.08.2017
Сообщений: 8

Ребят скажите скайп свой пожалуйста , просто дело срочное (
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматический старт при при горизонтальной прокрутке div блоков admin'ko Элементы интерфейса 3 13.02.2015 09:40
Сортировка блоков div CRYSIS_STALKER Events/DOM/Window 2 11.07.2014 14:18
нужен скрипт ротатора DIV блоков при перезагрузке страницы - 10$ wlad2 Работа 21 25.02.2014 12:49
Несколько div блоков. Переключение по нажатии на соответствующую ссылку. Help$ Элементы интерфейса 4 25.09.2010 00:01
Появление блоков div в зависимости от radio Oracool Events/DOM/Window 1 04.12.2009 18:39