javascript - Slick slider - Adding active class to first < a > in currently open foundation tab -
trying add active class first tag within selected tab.
my code adding active class first element in slide 1 , doing want within slider 1 when change tabs still adding active class navigation on first slider not slider 2 in view.
js
$(document).ready(function(){ var $slideshow = $(".slider").slick({ dots: false, infinite: true, speed: 300, slidestoshow: 1, adaptiveheight: true, swipetoslide: true, touchthreshold: 3, arrows: false }); $('.links').on('click', 'a', function( e ) { var slideindex = $(this).closest('li').index(); $slideshow.slick( 'slickgoto', parseint( slideindex ) ); $('.links li a').removeclass('slick-current'); $(this).addclass('slick-current'); e.preventdefault(); }); //re draw slider when data tabs change $('[data-tabs]').on('change.zf.tabs', function() { $('.slider').slick("setposition", 0); $('.slider').slick("slickgoto", 0); }); $('.slider').on('afterchange', function(event,slick,i){ $('.links li a').removeclass('slick-current'); $('.links li a').eq(i).addclass('slick-current'); }); // document ready $('.links li a').eq(0).addclass('slick-current'); }); html
<div class="sidebar-nav"> <ul class="tabs vertical" id="example-vert-tabs" data-tabs> <li class="tabs-title is-active"><a href="#panel1v" aria-selected="true">tab 1</a></li> <li class="tabs-title"><a href="#panel2v">tab2</a></li> </ul> </div> <div class="tabs-panel is-active" id="panel1v"> <div class="large-12 columns"> <div class="large-3 columns page-content-left"> <ul class="links"> <li><a href="#">slide1</a></li> <li><a href="#">slide2</a></li> <li><a href="#">slide3</a></li> </ul> </div> <div id="" class="large-9 columns page-content-right"> <section class="slider" id="slider1"> <div class="slide"> </div> <div class="slide"> </div> <div class="slide"> </div> </section> </div> </div> </div> <div class="tabs-panel" id="panel2v"> <div class="large-12 columns"> <div class="large-3 columns page-content-left"> <ul class="links"> <li><a href="#">slide1</a></li> <li><a href="#">slide2</a></li> <li><a href="#">slide3</a></li> </ul> </div> <div id="" class="large-9 columns page-content-right"> <section class="slider" id="slider2"> <div class="slide"> </div> <div class="slide"> </div> <div class="slide"> </div> </section> </div> </div> </div>
your problem listeners set both sliders. have create each slider individually. i'd simplest solution create jquery function handles that.
so html, code necessary (it's not optimized easy read)
// create new jquery function $.fn.extend({ createtabslider: function() { var $self = $(this) // $self tab, element dont use $('something') // use $self.find("something") var $slideshow = $self.find(".slider").slick({ dots: false, infinite: true, speed: 300, slidestoshow: 1, adaptiveheight: true, swipetoslide: true, touchthreshold: 3, arrows: false }) $self.find(".links").on("click", "a", function(e) { var slideindex = $(this).closest("li").index() $slideshow.slick("slickgoto", slideindex) }) $slideshow.on("afterchange", function(event, slick, i) { $self.find(".links li a").removeclass("slick-current") $self.find(".links li a").eq(i).addclass("slick-current") }) $self.find(".links li a").eq(0).addclass("slick-current") } }) // create slider each tab $("#panel1v").createtabslider() $("#panel2v").createtabslider()
Comments
Post a Comment