Случайная подмена блоков 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> Помогите пожалуйста ! |
К сожалению на новичек в js (
|
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'); } |
Да вы правы ! Именно так , но я не вижу куда вставить в 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(); }); |
т.е я вставляю в в 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 и не работает( |
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,
может так? .eq(Math.floor(Math.random()*slides.length) |
j0hnik, может быть.
|
Посмотрите пожалуйста , вставил ,
Не знаю работает или нет, но вообщем кнопка 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(); }); |
Ребят скажите скайп свой пожалуйста , просто дело срочное (
|
Часовой пояс GMT +3, время: 14:14. |